SemaOverload.cpp revision ad00b7705f9bbee81beeac428e7c6587734ab5a6
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->isVectorType() && 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->isFloatingType() && ToType->isFloatingType()) {
1019    // Floating point conversions (C++ 4.8).
1020    SCS.Second = ICK_Floating_Conversion;
1021    FromType = ToType.getUnqualifiedType();
1022  } else if ((FromType->isFloatingType() &&
1023              ToType->isIntegralType(Context) && !ToType->isBooleanType()) ||
1024             (FromType->isIntegralOrEnumerationType() &&
1025              ToType->isFloatingType())) {
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/// AddOverloadCandidate - Adds the given function to the set of
3072/// candidate functions, using the given function call arguments.  If
3073/// @p SuppressUserConversions, then don't allow user-defined
3074/// conversions via constructors or conversion operators.
3075///
3076/// \para PartialOverloading true if we are performing "partial" overloading
3077/// based on an incomplete set of function arguments. This feature is used by
3078/// code completion.
3079void
3080Sema::AddOverloadCandidate(FunctionDecl *Function,
3081                           DeclAccessPair FoundDecl,
3082                           Expr **Args, unsigned NumArgs,
3083                           OverloadCandidateSet& CandidateSet,
3084                           bool SuppressUserConversions,
3085                           bool PartialOverloading) {
3086  const FunctionProtoType* Proto
3087    = dyn_cast<FunctionProtoType>(Function->getType()->getAs<FunctionType>());
3088  assert(Proto && "Functions without a prototype cannot be overloaded");
3089  assert(!Function->getDescribedFunctionTemplate() &&
3090         "Use AddTemplateOverloadCandidate for function templates");
3091
3092  if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Function)) {
3093    if (!isa<CXXConstructorDecl>(Method)) {
3094      // If we get here, it's because we're calling a member function
3095      // that is named without a member access expression (e.g.,
3096      // "this->f") that was either written explicitly or created
3097      // implicitly. This can happen with a qualified call to a member
3098      // function, e.g., X::f(). We use an empty type for the implied
3099      // object argument (C++ [over.call.func]p3), and the acting context
3100      // is irrelevant.
3101      AddMethodCandidate(Method, FoundDecl, Method->getParent(),
3102                         QualType(), Args, NumArgs, CandidateSet,
3103                         SuppressUserConversions);
3104      return;
3105    }
3106    // We treat a constructor like a non-member function, since its object
3107    // argument doesn't participate in overload resolution.
3108  }
3109
3110  if (!CandidateSet.isNewCandidate(Function))
3111    return;
3112
3113  // Overload resolution is always an unevaluated context.
3114  EnterExpressionEvaluationContext Unevaluated(*this, Action::Unevaluated);
3115
3116  if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Function)){
3117    // C++ [class.copy]p3:
3118    //   A member function template is never instantiated to perform the copy
3119    //   of a class object to an object of its class type.
3120    QualType ClassType = Context.getTypeDeclType(Constructor->getParent());
3121    if (NumArgs == 1 &&
3122        Constructor->isCopyConstructorLikeSpecialization() &&
3123        (Context.hasSameUnqualifiedType(ClassType, Args[0]->getType()) ||
3124         IsDerivedFrom(Args[0]->getType(), ClassType)))
3125      return;
3126  }
3127
3128  // Add this candidate
3129  CandidateSet.push_back(OverloadCandidate());
3130  OverloadCandidate& Candidate = CandidateSet.back();
3131  Candidate.FoundDecl = FoundDecl;
3132  Candidate.Function = Function;
3133  Candidate.Viable = true;
3134  Candidate.IsSurrogate = false;
3135  Candidate.IgnoreObjectArgument = false;
3136
3137  unsigned NumArgsInProto = Proto->getNumArgs();
3138
3139  // (C++ 13.3.2p2): A candidate function having fewer than m
3140  // parameters is viable only if it has an ellipsis in its parameter
3141  // list (8.3.5).
3142  if ((NumArgs + (PartialOverloading && NumArgs)) > NumArgsInProto &&
3143      !Proto->isVariadic()) {
3144    Candidate.Viable = false;
3145    Candidate.FailureKind = ovl_fail_too_many_arguments;
3146    return;
3147  }
3148
3149  // (C++ 13.3.2p2): A candidate function having more than m parameters
3150  // is viable only if the (m+1)st parameter has a default argument
3151  // (8.3.6). For the purposes of overload resolution, the
3152  // parameter list is truncated on the right, so that there are
3153  // exactly m parameters.
3154  unsigned MinRequiredArgs = Function->getMinRequiredArguments();
3155  if (NumArgs < MinRequiredArgs && !PartialOverloading) {
3156    // Not enough arguments.
3157    Candidate.Viable = false;
3158    Candidate.FailureKind = ovl_fail_too_few_arguments;
3159    return;
3160  }
3161
3162  // Determine the implicit conversion sequences for each of the
3163  // arguments.
3164  Candidate.Conversions.resize(NumArgs);
3165  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
3166    if (ArgIdx < NumArgsInProto) {
3167      // (C++ 13.3.2p3): for F to be a viable function, there shall
3168      // exist for each argument an implicit conversion sequence
3169      // (13.3.3.1) that converts that argument to the corresponding
3170      // parameter of F.
3171      QualType ParamType = Proto->getArgType(ArgIdx);
3172      Candidate.Conversions[ArgIdx]
3173        = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
3174                                SuppressUserConversions,
3175                                /*InOverloadResolution=*/true);
3176      if (Candidate.Conversions[ArgIdx].isBad()) {
3177        Candidate.Viable = false;
3178        Candidate.FailureKind = ovl_fail_bad_conversion;
3179        break;
3180      }
3181    } else {
3182      // (C++ 13.3.2p2): For the purposes of overload resolution, any
3183      // argument for which there is no corresponding parameter is
3184      // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
3185      Candidate.Conversions[ArgIdx].setEllipsis();
3186    }
3187  }
3188}
3189
3190/// \brief Add all of the function declarations in the given function set to
3191/// the overload canddiate set.
3192void Sema::AddFunctionCandidates(const UnresolvedSetImpl &Fns,
3193                                 Expr **Args, unsigned NumArgs,
3194                                 OverloadCandidateSet& CandidateSet,
3195                                 bool SuppressUserConversions) {
3196  for (UnresolvedSetIterator F = Fns.begin(), E = Fns.end(); F != E; ++F) {
3197    NamedDecl *D = F.getDecl()->getUnderlyingDecl();
3198    if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
3199      if (isa<CXXMethodDecl>(FD) && !cast<CXXMethodDecl>(FD)->isStatic())
3200        AddMethodCandidate(cast<CXXMethodDecl>(FD), F.getPair(),
3201                           cast<CXXMethodDecl>(FD)->getParent(),
3202                           Args[0]->getType(), Args + 1, NumArgs - 1,
3203                           CandidateSet, SuppressUserConversions);
3204      else
3205        AddOverloadCandidate(FD, F.getPair(), Args, NumArgs, CandidateSet,
3206                             SuppressUserConversions);
3207    } else {
3208      FunctionTemplateDecl *FunTmpl = cast<FunctionTemplateDecl>(D);
3209      if (isa<CXXMethodDecl>(FunTmpl->getTemplatedDecl()) &&
3210          !cast<CXXMethodDecl>(FunTmpl->getTemplatedDecl())->isStatic())
3211        AddMethodTemplateCandidate(FunTmpl, F.getPair(),
3212                              cast<CXXRecordDecl>(FunTmpl->getDeclContext()),
3213                                   /*FIXME: explicit args */ 0,
3214                                   Args[0]->getType(), Args + 1, NumArgs - 1,
3215                                   CandidateSet,
3216                                   SuppressUserConversions);
3217      else
3218        AddTemplateOverloadCandidate(FunTmpl, F.getPair(),
3219                                     /*FIXME: explicit args */ 0,
3220                                     Args, NumArgs, CandidateSet,
3221                                     SuppressUserConversions);
3222    }
3223  }
3224}
3225
3226/// AddMethodCandidate - Adds a named decl (which is some kind of
3227/// method) as a method candidate to the given overload set.
3228void Sema::AddMethodCandidate(DeclAccessPair FoundDecl,
3229                              QualType ObjectType,
3230                              Expr **Args, unsigned NumArgs,
3231                              OverloadCandidateSet& CandidateSet,
3232                              bool SuppressUserConversions) {
3233  NamedDecl *Decl = FoundDecl.getDecl();
3234  CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(Decl->getDeclContext());
3235
3236  if (isa<UsingShadowDecl>(Decl))
3237    Decl = cast<UsingShadowDecl>(Decl)->getTargetDecl();
3238
3239  if (FunctionTemplateDecl *TD = dyn_cast<FunctionTemplateDecl>(Decl)) {
3240    assert(isa<CXXMethodDecl>(TD->getTemplatedDecl()) &&
3241           "Expected a member function template");
3242    AddMethodTemplateCandidate(TD, FoundDecl, ActingContext,
3243                               /*ExplicitArgs*/ 0,
3244                               ObjectType, Args, NumArgs,
3245                               CandidateSet,
3246                               SuppressUserConversions);
3247  } else {
3248    AddMethodCandidate(cast<CXXMethodDecl>(Decl), FoundDecl, ActingContext,
3249                       ObjectType, Args, NumArgs,
3250                       CandidateSet, SuppressUserConversions);
3251  }
3252}
3253
3254/// AddMethodCandidate - Adds the given C++ member function to the set
3255/// of candidate functions, using the given function call arguments
3256/// and the object argument (@c Object). For example, in a call
3257/// @c o.f(a1,a2), @c Object will contain @c o and @c Args will contain
3258/// both @c a1 and @c a2. If @p SuppressUserConversions, then don't
3259/// allow user-defined conversions via constructors or conversion
3260/// operators.
3261void
3262Sema::AddMethodCandidate(CXXMethodDecl *Method, DeclAccessPair FoundDecl,
3263                         CXXRecordDecl *ActingContext, QualType ObjectType,
3264                         Expr **Args, unsigned NumArgs,
3265                         OverloadCandidateSet& CandidateSet,
3266                         bool SuppressUserConversions) {
3267  const FunctionProtoType* Proto
3268    = dyn_cast<FunctionProtoType>(Method->getType()->getAs<FunctionType>());
3269  assert(Proto && "Methods without a prototype cannot be overloaded");
3270  assert(!isa<CXXConstructorDecl>(Method) &&
3271         "Use AddOverloadCandidate for constructors");
3272
3273  if (!CandidateSet.isNewCandidate(Method))
3274    return;
3275
3276  // Overload resolution is always an unevaluated context.
3277  EnterExpressionEvaluationContext Unevaluated(*this, Action::Unevaluated);
3278
3279  // Add this candidate
3280  CandidateSet.push_back(OverloadCandidate());
3281  OverloadCandidate& Candidate = CandidateSet.back();
3282  Candidate.FoundDecl = FoundDecl;
3283  Candidate.Function = Method;
3284  Candidate.IsSurrogate = false;
3285  Candidate.IgnoreObjectArgument = false;
3286
3287  unsigned NumArgsInProto = Proto->getNumArgs();
3288
3289  // (C++ 13.3.2p2): A candidate function having fewer than m
3290  // parameters is viable only if it has an ellipsis in its parameter
3291  // list (8.3.5).
3292  if (NumArgs > NumArgsInProto && !Proto->isVariadic()) {
3293    Candidate.Viable = false;
3294    Candidate.FailureKind = ovl_fail_too_many_arguments;
3295    return;
3296  }
3297
3298  // (C++ 13.3.2p2): A candidate function having more than m parameters
3299  // is viable only if the (m+1)st parameter has a default argument
3300  // (8.3.6). For the purposes of overload resolution, the
3301  // parameter list is truncated on the right, so that there are
3302  // exactly m parameters.
3303  unsigned MinRequiredArgs = Method->getMinRequiredArguments();
3304  if (NumArgs < MinRequiredArgs) {
3305    // Not enough arguments.
3306    Candidate.Viable = false;
3307    Candidate.FailureKind = ovl_fail_too_few_arguments;
3308    return;
3309  }
3310
3311  Candidate.Viable = true;
3312  Candidate.Conversions.resize(NumArgs + 1);
3313
3314  if (Method->isStatic() || ObjectType.isNull())
3315    // The implicit object argument is ignored.
3316    Candidate.IgnoreObjectArgument = true;
3317  else {
3318    // Determine the implicit conversion sequence for the object
3319    // parameter.
3320    Candidate.Conversions[0]
3321      = TryObjectArgumentInitialization(ObjectType, Method, ActingContext);
3322    if (Candidate.Conversions[0].isBad()) {
3323      Candidate.Viable = false;
3324      Candidate.FailureKind = ovl_fail_bad_conversion;
3325      return;
3326    }
3327  }
3328
3329  // Determine the implicit conversion sequences for each of the
3330  // arguments.
3331  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
3332    if (ArgIdx < NumArgsInProto) {
3333      // (C++ 13.3.2p3): for F to be a viable function, there shall
3334      // exist for each argument an implicit conversion sequence
3335      // (13.3.3.1) that converts that argument to the corresponding
3336      // parameter of F.
3337      QualType ParamType = Proto->getArgType(ArgIdx);
3338      Candidate.Conversions[ArgIdx + 1]
3339        = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
3340                                SuppressUserConversions,
3341                                /*InOverloadResolution=*/true);
3342      if (Candidate.Conversions[ArgIdx + 1].isBad()) {
3343        Candidate.Viable = false;
3344        Candidate.FailureKind = ovl_fail_bad_conversion;
3345        break;
3346      }
3347    } else {
3348      // (C++ 13.3.2p2): For the purposes of overload resolution, any
3349      // argument for which there is no corresponding parameter is
3350      // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
3351      Candidate.Conversions[ArgIdx + 1].setEllipsis();
3352    }
3353  }
3354}
3355
3356/// \brief Add a C++ member function template as a candidate to the candidate
3357/// set, using template argument deduction to produce an appropriate member
3358/// function template specialization.
3359void
3360Sema::AddMethodTemplateCandidate(FunctionTemplateDecl *MethodTmpl,
3361                                 DeclAccessPair FoundDecl,
3362                                 CXXRecordDecl *ActingContext,
3363                        const TemplateArgumentListInfo *ExplicitTemplateArgs,
3364                                 QualType ObjectType,
3365                                 Expr **Args, unsigned NumArgs,
3366                                 OverloadCandidateSet& CandidateSet,
3367                                 bool SuppressUserConversions) {
3368  if (!CandidateSet.isNewCandidate(MethodTmpl))
3369    return;
3370
3371  // C++ [over.match.funcs]p7:
3372  //   In each case where a candidate is a function template, candidate
3373  //   function template specializations are generated using template argument
3374  //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
3375  //   candidate functions in the usual way.113) A given name can refer to one
3376  //   or more function templates and also to a set of overloaded non-template
3377  //   functions. In such a case, the candidate functions generated from each
3378  //   function template are combined with the set of non-template candidate
3379  //   functions.
3380  TemplateDeductionInfo Info(Context, CandidateSet.getLocation());
3381  FunctionDecl *Specialization = 0;
3382  if (TemplateDeductionResult Result
3383      = DeduceTemplateArguments(MethodTmpl, ExplicitTemplateArgs,
3384                                Args, NumArgs, Specialization, Info)) {
3385    CandidateSet.push_back(OverloadCandidate());
3386    OverloadCandidate &Candidate = CandidateSet.back();
3387    Candidate.FoundDecl = FoundDecl;
3388    Candidate.Function = MethodTmpl->getTemplatedDecl();
3389    Candidate.Viable = false;
3390    Candidate.FailureKind = ovl_fail_bad_deduction;
3391    Candidate.IsSurrogate = false;
3392    Candidate.IgnoreObjectArgument = false;
3393    Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
3394                                                          Info);
3395    return;
3396  }
3397
3398  // Add the function template specialization produced by template argument
3399  // deduction as a candidate.
3400  assert(Specialization && "Missing member function template specialization?");
3401  assert(isa<CXXMethodDecl>(Specialization) &&
3402         "Specialization is not a member function?");
3403  AddMethodCandidate(cast<CXXMethodDecl>(Specialization), FoundDecl,
3404                     ActingContext, ObjectType, Args, NumArgs,
3405                     CandidateSet, SuppressUserConversions);
3406}
3407
3408/// \brief Add a C++ function template specialization as a candidate
3409/// in the candidate set, using template argument deduction to produce
3410/// an appropriate function template specialization.
3411void
3412Sema::AddTemplateOverloadCandidate(FunctionTemplateDecl *FunctionTemplate,
3413                                   DeclAccessPair FoundDecl,
3414                        const TemplateArgumentListInfo *ExplicitTemplateArgs,
3415                                   Expr **Args, unsigned NumArgs,
3416                                   OverloadCandidateSet& CandidateSet,
3417                                   bool SuppressUserConversions) {
3418  if (!CandidateSet.isNewCandidate(FunctionTemplate))
3419    return;
3420
3421  // C++ [over.match.funcs]p7:
3422  //   In each case where a candidate is a function template, candidate
3423  //   function template specializations are generated using template argument
3424  //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
3425  //   candidate functions in the usual way.113) A given name can refer to one
3426  //   or more function templates and also to a set of overloaded non-template
3427  //   functions. In such a case, the candidate functions generated from each
3428  //   function template are combined with the set of non-template candidate
3429  //   functions.
3430  TemplateDeductionInfo Info(Context, CandidateSet.getLocation());
3431  FunctionDecl *Specialization = 0;
3432  if (TemplateDeductionResult Result
3433        = DeduceTemplateArguments(FunctionTemplate, ExplicitTemplateArgs,
3434                                  Args, NumArgs, Specialization, Info)) {
3435    CandidateSet.push_back(OverloadCandidate());
3436    OverloadCandidate &Candidate = CandidateSet.back();
3437    Candidate.FoundDecl = FoundDecl;
3438    Candidate.Function = FunctionTemplate->getTemplatedDecl();
3439    Candidate.Viable = false;
3440    Candidate.FailureKind = ovl_fail_bad_deduction;
3441    Candidate.IsSurrogate = false;
3442    Candidate.IgnoreObjectArgument = false;
3443    Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
3444                                                          Info);
3445    return;
3446  }
3447
3448  // Add the function template specialization produced by template argument
3449  // deduction as a candidate.
3450  assert(Specialization && "Missing function template specialization?");
3451  AddOverloadCandidate(Specialization, FoundDecl, Args, NumArgs, CandidateSet,
3452                       SuppressUserConversions);
3453}
3454
3455/// AddConversionCandidate - Add a C++ conversion function as a
3456/// candidate in the candidate set (C++ [over.match.conv],
3457/// C++ [over.match.copy]). From is the expression we're converting from,
3458/// and ToType is the type that we're eventually trying to convert to
3459/// (which may or may not be the same type as the type that the
3460/// conversion function produces).
3461void
3462Sema::AddConversionCandidate(CXXConversionDecl *Conversion,
3463                             DeclAccessPair FoundDecl,
3464                             CXXRecordDecl *ActingContext,
3465                             Expr *From, QualType ToType,
3466                             OverloadCandidateSet& CandidateSet) {
3467  assert(!Conversion->getDescribedFunctionTemplate() &&
3468         "Conversion function templates use AddTemplateConversionCandidate");
3469  QualType ConvType = Conversion->getConversionType().getNonReferenceType();
3470  if (!CandidateSet.isNewCandidate(Conversion))
3471    return;
3472
3473  // Overload resolution is always an unevaluated context.
3474  EnterExpressionEvaluationContext Unevaluated(*this, Action::Unevaluated);
3475
3476  // Add this candidate
3477  CandidateSet.push_back(OverloadCandidate());
3478  OverloadCandidate& Candidate = CandidateSet.back();
3479  Candidate.FoundDecl = FoundDecl;
3480  Candidate.Function = Conversion;
3481  Candidate.IsSurrogate = false;
3482  Candidate.IgnoreObjectArgument = false;
3483  Candidate.FinalConversion.setAsIdentityConversion();
3484  Candidate.FinalConversion.setFromType(ConvType);
3485  Candidate.FinalConversion.setAllToTypes(ToType);
3486
3487  // Determine the implicit conversion sequence for the implicit
3488  // object parameter.
3489  Candidate.Viable = true;
3490  Candidate.Conversions.resize(1);
3491  Candidate.Conversions[0]
3492    = TryObjectArgumentInitialization(From->getType(), Conversion,
3493                                      ActingContext);
3494  // Conversion functions to a different type in the base class is visible in
3495  // the derived class.  So, a derived to base conversion should not participate
3496  // in overload resolution.
3497  if (Candidate.Conversions[0].Standard.Second == ICK_Derived_To_Base)
3498    Candidate.Conversions[0].Standard.Second = ICK_Identity;
3499  if (Candidate.Conversions[0].isBad()) {
3500    Candidate.Viable = false;
3501    Candidate.FailureKind = ovl_fail_bad_conversion;
3502    return;
3503  }
3504
3505  // We won't go through a user-define type conversion function to convert a
3506  // derived to base as such conversions are given Conversion Rank. They only
3507  // go through a copy constructor. 13.3.3.1.2-p4 [over.ics.user]
3508  QualType FromCanon
3509    = Context.getCanonicalType(From->getType().getUnqualifiedType());
3510  QualType ToCanon = Context.getCanonicalType(ToType).getUnqualifiedType();
3511  if (FromCanon == ToCanon || IsDerivedFrom(FromCanon, ToCanon)) {
3512    Candidate.Viable = false;
3513    Candidate.FailureKind = ovl_fail_trivial_conversion;
3514    return;
3515  }
3516
3517  // To determine what the conversion from the result of calling the
3518  // conversion function to the type we're eventually trying to
3519  // convert to (ToType), we need to synthesize a call to the
3520  // conversion function and attempt copy initialization from it. This
3521  // makes sure that we get the right semantics with respect to
3522  // lvalues/rvalues and the type. Fortunately, we can allocate this
3523  // call on the stack and we don't need its arguments to be
3524  // well-formed.
3525  DeclRefExpr ConversionRef(Conversion, Conversion->getType(),
3526                            From->getLocStart());
3527  ImplicitCastExpr ConversionFn(Context.getPointerType(Conversion->getType()),
3528                                CastExpr::CK_FunctionToPointerDecay,
3529                                &ConversionRef, CXXBaseSpecifierArray(), false);
3530
3531  // Note that it is safe to allocate CallExpr on the stack here because
3532  // there are 0 arguments (i.e., nothing is allocated using ASTContext's
3533  // allocator).
3534  CallExpr Call(Context, &ConversionFn, 0, 0,
3535                Conversion->getConversionType().getNonReferenceType(),
3536                From->getLocStart());
3537  ImplicitConversionSequence ICS =
3538    TryCopyInitialization(*this, &Call, ToType,
3539                          /*SuppressUserConversions=*/true,
3540                          /*InOverloadResolution=*/false);
3541
3542  switch (ICS.getKind()) {
3543  case ImplicitConversionSequence::StandardConversion:
3544    Candidate.FinalConversion = ICS.Standard;
3545
3546    // C++ [over.ics.user]p3:
3547    //   If the user-defined conversion is specified by a specialization of a
3548    //   conversion function template, the second standard conversion sequence
3549    //   shall have exact match rank.
3550    if (Conversion->getPrimaryTemplate() &&
3551        GetConversionRank(ICS.Standard.Second) != ICR_Exact_Match) {
3552      Candidate.Viable = false;
3553      Candidate.FailureKind = ovl_fail_final_conversion_not_exact;
3554    }
3555
3556    break;
3557
3558  case ImplicitConversionSequence::BadConversion:
3559    Candidate.Viable = false;
3560    Candidate.FailureKind = ovl_fail_bad_final_conversion;
3561    break;
3562
3563  default:
3564    assert(false &&
3565           "Can only end up with a standard conversion sequence or failure");
3566  }
3567}
3568
3569/// \brief Adds a conversion function template specialization
3570/// candidate to the overload set, using template argument deduction
3571/// to deduce the template arguments of the conversion function
3572/// template from the type that we are converting to (C++
3573/// [temp.deduct.conv]).
3574void
3575Sema::AddTemplateConversionCandidate(FunctionTemplateDecl *FunctionTemplate,
3576                                     DeclAccessPair FoundDecl,
3577                                     CXXRecordDecl *ActingDC,
3578                                     Expr *From, QualType ToType,
3579                                     OverloadCandidateSet &CandidateSet) {
3580  assert(isa<CXXConversionDecl>(FunctionTemplate->getTemplatedDecl()) &&
3581         "Only conversion function templates permitted here");
3582
3583  if (!CandidateSet.isNewCandidate(FunctionTemplate))
3584    return;
3585
3586  TemplateDeductionInfo Info(Context, CandidateSet.getLocation());
3587  CXXConversionDecl *Specialization = 0;
3588  if (TemplateDeductionResult Result
3589        = DeduceTemplateArguments(FunctionTemplate, ToType,
3590                                  Specialization, Info)) {
3591    CandidateSet.push_back(OverloadCandidate());
3592    OverloadCandidate &Candidate = CandidateSet.back();
3593    Candidate.FoundDecl = FoundDecl;
3594    Candidate.Function = FunctionTemplate->getTemplatedDecl();
3595    Candidate.Viable = false;
3596    Candidate.FailureKind = ovl_fail_bad_deduction;
3597    Candidate.IsSurrogate = false;
3598    Candidate.IgnoreObjectArgument = false;
3599    Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
3600                                                          Info);
3601    return;
3602  }
3603
3604  // Add the conversion function template specialization produced by
3605  // template argument deduction as a candidate.
3606  assert(Specialization && "Missing function template specialization?");
3607  AddConversionCandidate(Specialization, FoundDecl, ActingDC, From, ToType,
3608                         CandidateSet);
3609}
3610
3611/// AddSurrogateCandidate - Adds a "surrogate" candidate function that
3612/// converts the given @c Object to a function pointer via the
3613/// conversion function @c Conversion, and then attempts to call it
3614/// with the given arguments (C++ [over.call.object]p2-4). Proto is
3615/// the type of function that we'll eventually be calling.
3616void Sema::AddSurrogateCandidate(CXXConversionDecl *Conversion,
3617                                 DeclAccessPair FoundDecl,
3618                                 CXXRecordDecl *ActingContext,
3619                                 const FunctionProtoType *Proto,
3620                                 QualType ObjectType,
3621                                 Expr **Args, unsigned NumArgs,
3622                                 OverloadCandidateSet& CandidateSet) {
3623  if (!CandidateSet.isNewCandidate(Conversion))
3624    return;
3625
3626  // Overload resolution is always an unevaluated context.
3627  EnterExpressionEvaluationContext Unevaluated(*this, Action::Unevaluated);
3628
3629  CandidateSet.push_back(OverloadCandidate());
3630  OverloadCandidate& Candidate = CandidateSet.back();
3631  Candidate.FoundDecl = FoundDecl;
3632  Candidate.Function = 0;
3633  Candidate.Surrogate = Conversion;
3634  Candidate.Viable = true;
3635  Candidate.IsSurrogate = true;
3636  Candidate.IgnoreObjectArgument = false;
3637  Candidate.Conversions.resize(NumArgs + 1);
3638
3639  // Determine the implicit conversion sequence for the implicit
3640  // object parameter.
3641  ImplicitConversionSequence ObjectInit
3642    = TryObjectArgumentInitialization(ObjectType, Conversion, ActingContext);
3643  if (ObjectInit.isBad()) {
3644    Candidate.Viable = false;
3645    Candidate.FailureKind = ovl_fail_bad_conversion;
3646    Candidate.Conversions[0] = ObjectInit;
3647    return;
3648  }
3649
3650  // The first conversion is actually a user-defined conversion whose
3651  // first conversion is ObjectInit's standard conversion (which is
3652  // effectively a reference binding). Record it as such.
3653  Candidate.Conversions[0].setUserDefined();
3654  Candidate.Conversions[0].UserDefined.Before = ObjectInit.Standard;
3655  Candidate.Conversions[0].UserDefined.EllipsisConversion = false;
3656  Candidate.Conversions[0].UserDefined.ConversionFunction = Conversion;
3657  Candidate.Conversions[0].UserDefined.After
3658    = Candidate.Conversions[0].UserDefined.Before;
3659  Candidate.Conversions[0].UserDefined.After.setAsIdentityConversion();
3660
3661  // Find the
3662  unsigned NumArgsInProto = Proto->getNumArgs();
3663
3664  // (C++ 13.3.2p2): A candidate function having fewer than m
3665  // parameters is viable only if it has an ellipsis in its parameter
3666  // list (8.3.5).
3667  if (NumArgs > NumArgsInProto && !Proto->isVariadic()) {
3668    Candidate.Viable = false;
3669    Candidate.FailureKind = ovl_fail_too_many_arguments;
3670    return;
3671  }
3672
3673  // Function types don't have any default arguments, so just check if
3674  // we have enough arguments.
3675  if (NumArgs < NumArgsInProto) {
3676    // Not enough arguments.
3677    Candidate.Viable = false;
3678    Candidate.FailureKind = ovl_fail_too_few_arguments;
3679    return;
3680  }
3681
3682  // Determine the implicit conversion sequences for each of the
3683  // arguments.
3684  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
3685    if (ArgIdx < NumArgsInProto) {
3686      // (C++ 13.3.2p3): for F to be a viable function, there shall
3687      // exist for each argument an implicit conversion sequence
3688      // (13.3.3.1) that converts that argument to the corresponding
3689      // parameter of F.
3690      QualType ParamType = Proto->getArgType(ArgIdx);
3691      Candidate.Conversions[ArgIdx + 1]
3692        = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
3693                                /*SuppressUserConversions=*/false,
3694                                /*InOverloadResolution=*/false);
3695      if (Candidate.Conversions[ArgIdx + 1].isBad()) {
3696        Candidate.Viable = false;
3697        Candidate.FailureKind = ovl_fail_bad_conversion;
3698        break;
3699      }
3700    } else {
3701      // (C++ 13.3.2p2): For the purposes of overload resolution, any
3702      // argument for which there is no corresponding parameter is
3703      // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
3704      Candidate.Conversions[ArgIdx + 1].setEllipsis();
3705    }
3706  }
3707}
3708
3709/// \brief Add overload candidates for overloaded operators that are
3710/// member functions.
3711///
3712/// Add the overloaded operator candidates that are member functions
3713/// for the operator Op that was used in an operator expression such
3714/// as "x Op y". , Args/NumArgs provides the operator arguments, and
3715/// CandidateSet will store the added overload candidates. (C++
3716/// [over.match.oper]).
3717void Sema::AddMemberOperatorCandidates(OverloadedOperatorKind Op,
3718                                       SourceLocation OpLoc,
3719                                       Expr **Args, unsigned NumArgs,
3720                                       OverloadCandidateSet& CandidateSet,
3721                                       SourceRange OpRange) {
3722  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
3723
3724  // C++ [over.match.oper]p3:
3725  //   For a unary operator @ with an operand of a type whose
3726  //   cv-unqualified version is T1, and for a binary operator @ with
3727  //   a left operand of a type whose cv-unqualified version is T1 and
3728  //   a right operand of a type whose cv-unqualified version is T2,
3729  //   three sets of candidate functions, designated member
3730  //   candidates, non-member candidates and built-in candidates, are
3731  //   constructed as follows:
3732  QualType T1 = Args[0]->getType();
3733  QualType T2;
3734  if (NumArgs > 1)
3735    T2 = Args[1]->getType();
3736
3737  //     -- If T1 is a class type, the set of member candidates is the
3738  //        result of the qualified lookup of T1::operator@
3739  //        (13.3.1.1.1); otherwise, the set of member candidates is
3740  //        empty.
3741  if (const RecordType *T1Rec = T1->getAs<RecordType>()) {
3742    // Complete the type if it can be completed. Otherwise, we're done.
3743    if (RequireCompleteType(OpLoc, T1, PDiag()))
3744      return;
3745
3746    LookupResult Operators(*this, OpName, OpLoc, LookupOrdinaryName);
3747    LookupQualifiedName(Operators, T1Rec->getDecl());
3748    Operators.suppressDiagnostics();
3749
3750    for (LookupResult::iterator Oper = Operators.begin(),
3751                             OperEnd = Operators.end();
3752         Oper != OperEnd;
3753         ++Oper)
3754      AddMethodCandidate(Oper.getPair(), Args[0]->getType(),
3755                         Args + 1, NumArgs - 1, CandidateSet,
3756                         /* SuppressUserConversions = */ false);
3757  }
3758}
3759
3760/// AddBuiltinCandidate - Add a candidate for a built-in
3761/// operator. ResultTy and ParamTys are the result and parameter types
3762/// of the built-in candidate, respectively. Args and NumArgs are the
3763/// arguments being passed to the candidate. IsAssignmentOperator
3764/// should be true when this built-in candidate is an assignment
3765/// operator. NumContextualBoolArguments is the number of arguments
3766/// (at the beginning of the argument list) that will be contextually
3767/// converted to bool.
3768void Sema::AddBuiltinCandidate(QualType ResultTy, QualType *ParamTys,
3769                               Expr **Args, unsigned NumArgs,
3770                               OverloadCandidateSet& CandidateSet,
3771                               bool IsAssignmentOperator,
3772                               unsigned NumContextualBoolArguments) {
3773  // Overload resolution is always an unevaluated context.
3774  EnterExpressionEvaluationContext Unevaluated(*this, Action::Unevaluated);
3775
3776  // Add this candidate
3777  CandidateSet.push_back(OverloadCandidate());
3778  OverloadCandidate& Candidate = CandidateSet.back();
3779  Candidate.FoundDecl = DeclAccessPair::make(0, AS_none);
3780  Candidate.Function = 0;
3781  Candidate.IsSurrogate = false;
3782  Candidate.IgnoreObjectArgument = false;
3783  Candidate.BuiltinTypes.ResultTy = ResultTy;
3784  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
3785    Candidate.BuiltinTypes.ParamTypes[ArgIdx] = ParamTys[ArgIdx];
3786
3787  // Determine the implicit conversion sequences for each of the
3788  // arguments.
3789  Candidate.Viable = true;
3790  Candidate.Conversions.resize(NumArgs);
3791  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
3792    // C++ [over.match.oper]p4:
3793    //   For the built-in assignment operators, conversions of the
3794    //   left operand are restricted as follows:
3795    //     -- no temporaries are introduced to hold the left operand, and
3796    //     -- no user-defined conversions are applied to the left
3797    //        operand to achieve a type match with the left-most
3798    //        parameter of a built-in candidate.
3799    //
3800    // We block these conversions by turning off user-defined
3801    // conversions, since that is the only way that initialization of
3802    // a reference to a non-class type can occur from something that
3803    // is not of the same type.
3804    if (ArgIdx < NumContextualBoolArguments) {
3805      assert(ParamTys[ArgIdx] == Context.BoolTy &&
3806             "Contextual conversion to bool requires bool type");
3807      Candidate.Conversions[ArgIdx] = TryContextuallyConvertToBool(Args[ArgIdx]);
3808    } else {
3809      Candidate.Conversions[ArgIdx]
3810        = TryCopyInitialization(*this, Args[ArgIdx], ParamTys[ArgIdx],
3811                                ArgIdx == 0 && IsAssignmentOperator,
3812                                /*InOverloadResolution=*/false);
3813    }
3814    if (Candidate.Conversions[ArgIdx].isBad()) {
3815      Candidate.Viable = false;
3816      Candidate.FailureKind = ovl_fail_bad_conversion;
3817      break;
3818    }
3819  }
3820}
3821
3822/// BuiltinCandidateTypeSet - A set of types that will be used for the
3823/// candidate operator functions for built-in operators (C++
3824/// [over.built]). The types are separated into pointer types and
3825/// enumeration types.
3826class BuiltinCandidateTypeSet  {
3827  /// TypeSet - A set of types.
3828  typedef llvm::SmallPtrSet<QualType, 8> TypeSet;
3829
3830  /// PointerTypes - The set of pointer types that will be used in the
3831  /// built-in candidates.
3832  TypeSet PointerTypes;
3833
3834  /// MemberPointerTypes - The set of member pointer types that will be
3835  /// used in the built-in candidates.
3836  TypeSet MemberPointerTypes;
3837
3838  /// EnumerationTypes - The set of enumeration types that will be
3839  /// used in the built-in candidates.
3840  TypeSet EnumerationTypes;
3841
3842  /// \brief The set of vector types that will be used in the built-in
3843  /// candidates.
3844  TypeSet VectorTypes;
3845
3846  /// Sema - The semantic analysis instance where we are building the
3847  /// candidate type set.
3848  Sema &SemaRef;
3849
3850  /// Context - The AST context in which we will build the type sets.
3851  ASTContext &Context;
3852
3853  bool AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
3854                                               const Qualifiers &VisibleQuals);
3855  bool AddMemberPointerWithMoreQualifiedTypeVariants(QualType Ty);
3856
3857public:
3858  /// iterator - Iterates through the types that are part of the set.
3859  typedef TypeSet::iterator iterator;
3860
3861  BuiltinCandidateTypeSet(Sema &SemaRef)
3862    : SemaRef(SemaRef), Context(SemaRef.Context) { }
3863
3864  void AddTypesConvertedFrom(QualType Ty,
3865                             SourceLocation Loc,
3866                             bool AllowUserConversions,
3867                             bool AllowExplicitConversions,
3868                             const Qualifiers &VisibleTypeConversionsQuals);
3869
3870  /// pointer_begin - First pointer type found;
3871  iterator pointer_begin() { return PointerTypes.begin(); }
3872
3873  /// pointer_end - Past the last pointer type found;
3874  iterator pointer_end() { return PointerTypes.end(); }
3875
3876  /// member_pointer_begin - First member pointer type found;
3877  iterator member_pointer_begin() { return MemberPointerTypes.begin(); }
3878
3879  /// member_pointer_end - Past the last member pointer type found;
3880  iterator member_pointer_end() { return MemberPointerTypes.end(); }
3881
3882  /// enumeration_begin - First enumeration type found;
3883  iterator enumeration_begin() { return EnumerationTypes.begin(); }
3884
3885  /// enumeration_end - Past the last enumeration type found;
3886  iterator enumeration_end() { return EnumerationTypes.end(); }
3887
3888  iterator vector_begin() { return VectorTypes.begin(); }
3889  iterator vector_end() { return VectorTypes.end(); }
3890};
3891
3892/// AddPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty to
3893/// the set of pointer types along with any more-qualified variants of
3894/// that type. For example, if @p Ty is "int const *", this routine
3895/// will add "int const *", "int const volatile *", "int const
3896/// restrict *", and "int const volatile restrict *" to the set of
3897/// pointer types. Returns true if the add of @p Ty itself succeeded,
3898/// false otherwise.
3899///
3900/// FIXME: what to do about extended qualifiers?
3901bool
3902BuiltinCandidateTypeSet::AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
3903                                             const Qualifiers &VisibleQuals) {
3904
3905  // Insert this type.
3906  if (!PointerTypes.insert(Ty))
3907    return false;
3908
3909  const PointerType *PointerTy = Ty->getAs<PointerType>();
3910  assert(PointerTy && "type was not a pointer type!");
3911
3912  QualType PointeeTy = PointerTy->getPointeeType();
3913  // Don't add qualified variants of arrays. For one, they're not allowed
3914  // (the qualifier would sink to the element type), and for another, the
3915  // only overload situation where it matters is subscript or pointer +- int,
3916  // and those shouldn't have qualifier variants anyway.
3917  if (PointeeTy->isArrayType())
3918    return true;
3919  unsigned BaseCVR = PointeeTy.getCVRQualifiers();
3920  if (const ConstantArrayType *Array =Context.getAsConstantArrayType(PointeeTy))
3921    BaseCVR = Array->getElementType().getCVRQualifiers();
3922  bool hasVolatile = VisibleQuals.hasVolatile();
3923  bool hasRestrict = VisibleQuals.hasRestrict();
3924
3925  // Iterate through all strict supersets of BaseCVR.
3926  for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
3927    if ((CVR | BaseCVR) != CVR) continue;
3928    // Skip over Volatile/Restrict if no Volatile/Restrict found anywhere
3929    // in the types.
3930    if ((CVR & Qualifiers::Volatile) && !hasVolatile) continue;
3931    if ((CVR & Qualifiers::Restrict) && !hasRestrict) continue;
3932    QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
3933    PointerTypes.insert(Context.getPointerType(QPointeeTy));
3934  }
3935
3936  return true;
3937}
3938
3939/// AddMemberPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty
3940/// to the set of pointer types along with any more-qualified variants of
3941/// that type. For example, if @p Ty is "int const *", this routine
3942/// will add "int const *", "int const volatile *", "int const
3943/// restrict *", and "int const volatile restrict *" to the set of
3944/// pointer types. Returns true if the add of @p Ty itself succeeded,
3945/// false otherwise.
3946///
3947/// FIXME: what to do about extended qualifiers?
3948bool
3949BuiltinCandidateTypeSet::AddMemberPointerWithMoreQualifiedTypeVariants(
3950    QualType Ty) {
3951  // Insert this type.
3952  if (!MemberPointerTypes.insert(Ty))
3953    return false;
3954
3955  const MemberPointerType *PointerTy = Ty->getAs<MemberPointerType>();
3956  assert(PointerTy && "type was not a member pointer type!");
3957
3958  QualType PointeeTy = PointerTy->getPointeeType();
3959  // Don't add qualified variants of arrays. For one, they're not allowed
3960  // (the qualifier would sink to the element type), and for another, the
3961  // only overload situation where it matters is subscript or pointer +- int,
3962  // and those shouldn't have qualifier variants anyway.
3963  if (PointeeTy->isArrayType())
3964    return true;
3965  const Type *ClassTy = PointerTy->getClass();
3966
3967  // Iterate through all strict supersets of the pointee type's CVR
3968  // qualifiers.
3969  unsigned BaseCVR = PointeeTy.getCVRQualifiers();
3970  for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
3971    if ((CVR | BaseCVR) != CVR) continue;
3972
3973    QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
3974    MemberPointerTypes.insert(Context.getMemberPointerType(QPointeeTy, ClassTy));
3975  }
3976
3977  return true;
3978}
3979
3980/// AddTypesConvertedFrom - Add each of the types to which the type @p
3981/// Ty can be implicit converted to the given set of @p Types. We're
3982/// primarily interested in pointer types and enumeration types. We also
3983/// take member pointer types, for the conditional operator.
3984/// AllowUserConversions is true if we should look at the conversion
3985/// functions of a class type, and AllowExplicitConversions if we
3986/// should also include the explicit conversion functions of a class
3987/// type.
3988void
3989BuiltinCandidateTypeSet::AddTypesConvertedFrom(QualType Ty,
3990                                               SourceLocation Loc,
3991                                               bool AllowUserConversions,
3992                                               bool AllowExplicitConversions,
3993                                               const Qualifiers &VisibleQuals) {
3994  // Only deal with canonical types.
3995  Ty = Context.getCanonicalType(Ty);
3996
3997  // Look through reference types; they aren't part of the type of an
3998  // expression for the purposes of conversions.
3999  if (const ReferenceType *RefTy = Ty->getAs<ReferenceType>())
4000    Ty = RefTy->getPointeeType();
4001
4002  // We don't care about qualifiers on the type.
4003  Ty = Ty.getLocalUnqualifiedType();
4004
4005  // If we're dealing with an array type, decay to the pointer.
4006  if (Ty->isArrayType())
4007    Ty = SemaRef.Context.getArrayDecayedType(Ty);
4008
4009  if (const PointerType *PointerTy = Ty->getAs<PointerType>()) {
4010    QualType PointeeTy = PointerTy->getPointeeType();
4011
4012    // Insert our type, and its more-qualified variants, into the set
4013    // of types.
4014    if (!AddPointerWithMoreQualifiedTypeVariants(Ty, VisibleQuals))
4015      return;
4016  } else if (Ty->isMemberPointerType()) {
4017    // Member pointers are far easier, since the pointee can't be converted.
4018    if (!AddMemberPointerWithMoreQualifiedTypeVariants(Ty))
4019      return;
4020  } else if (Ty->isEnumeralType()) {
4021    EnumerationTypes.insert(Ty);
4022  } else if (Ty->isVectorType()) {
4023    VectorTypes.insert(Ty);
4024  } else if (AllowUserConversions) {
4025    if (const RecordType *TyRec = Ty->getAs<RecordType>()) {
4026      if (SemaRef.RequireCompleteType(Loc, Ty, 0)) {
4027        // No conversion functions in incomplete types.
4028        return;
4029      }
4030
4031      CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
4032      const UnresolvedSetImpl *Conversions
4033        = ClassDecl->getVisibleConversionFunctions();
4034      for (UnresolvedSetImpl::iterator I = Conversions->begin(),
4035             E = Conversions->end(); I != E; ++I) {
4036        NamedDecl *D = I.getDecl();
4037        if (isa<UsingShadowDecl>(D))
4038          D = cast<UsingShadowDecl>(D)->getTargetDecl();
4039
4040        // Skip conversion function templates; they don't tell us anything
4041        // about which builtin types we can convert to.
4042        if (isa<FunctionTemplateDecl>(D))
4043          continue;
4044
4045        CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
4046        if (AllowExplicitConversions || !Conv->isExplicit()) {
4047          AddTypesConvertedFrom(Conv->getConversionType(), Loc, false, false,
4048                                VisibleQuals);
4049        }
4050      }
4051    }
4052  }
4053}
4054
4055/// \brief Helper function for AddBuiltinOperatorCandidates() that adds
4056/// the volatile- and non-volatile-qualified assignment operators for the
4057/// given type to the candidate set.
4058static void AddBuiltinAssignmentOperatorCandidates(Sema &S,
4059                                                   QualType T,
4060                                                   Expr **Args,
4061                                                   unsigned NumArgs,
4062                                    OverloadCandidateSet &CandidateSet) {
4063  QualType ParamTypes[2];
4064
4065  // T& operator=(T&, T)
4066  ParamTypes[0] = S.Context.getLValueReferenceType(T);
4067  ParamTypes[1] = T;
4068  S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
4069                        /*IsAssignmentOperator=*/true);
4070
4071  if (!S.Context.getCanonicalType(T).isVolatileQualified()) {
4072    // volatile T& operator=(volatile T&, T)
4073    ParamTypes[0]
4074      = S.Context.getLValueReferenceType(S.Context.getVolatileType(T));
4075    ParamTypes[1] = T;
4076    S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
4077                          /*IsAssignmentOperator=*/true);
4078  }
4079}
4080
4081/// CollectVRQualifiers - This routine returns Volatile/Restrict qualifiers,
4082/// if any, found in visible type conversion functions found in ArgExpr's type.
4083static  Qualifiers CollectVRQualifiers(ASTContext &Context, Expr* ArgExpr) {
4084    Qualifiers VRQuals;
4085    const RecordType *TyRec;
4086    if (const MemberPointerType *RHSMPType =
4087        ArgExpr->getType()->getAs<MemberPointerType>())
4088      TyRec = RHSMPType->getClass()->getAs<RecordType>();
4089    else
4090      TyRec = ArgExpr->getType()->getAs<RecordType>();
4091    if (!TyRec) {
4092      // Just to be safe, assume the worst case.
4093      VRQuals.addVolatile();
4094      VRQuals.addRestrict();
4095      return VRQuals;
4096    }
4097
4098    CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
4099    if (!ClassDecl->hasDefinition())
4100      return VRQuals;
4101
4102    const UnresolvedSetImpl *Conversions =
4103      ClassDecl->getVisibleConversionFunctions();
4104
4105    for (UnresolvedSetImpl::iterator I = Conversions->begin(),
4106           E = Conversions->end(); I != E; ++I) {
4107      NamedDecl *D = I.getDecl();
4108      if (isa<UsingShadowDecl>(D))
4109        D = cast<UsingShadowDecl>(D)->getTargetDecl();
4110      if (CXXConversionDecl *Conv = dyn_cast<CXXConversionDecl>(D)) {
4111        QualType CanTy = Context.getCanonicalType(Conv->getConversionType());
4112        if (const ReferenceType *ResTypeRef = CanTy->getAs<ReferenceType>())
4113          CanTy = ResTypeRef->getPointeeType();
4114        // Need to go down the pointer/mempointer chain and add qualifiers
4115        // as see them.
4116        bool done = false;
4117        while (!done) {
4118          if (const PointerType *ResTypePtr = CanTy->getAs<PointerType>())
4119            CanTy = ResTypePtr->getPointeeType();
4120          else if (const MemberPointerType *ResTypeMPtr =
4121                CanTy->getAs<MemberPointerType>())
4122            CanTy = ResTypeMPtr->getPointeeType();
4123          else
4124            done = true;
4125          if (CanTy.isVolatileQualified())
4126            VRQuals.addVolatile();
4127          if (CanTy.isRestrictQualified())
4128            VRQuals.addRestrict();
4129          if (VRQuals.hasRestrict() && VRQuals.hasVolatile())
4130            return VRQuals;
4131        }
4132      }
4133    }
4134    return VRQuals;
4135}
4136
4137/// AddBuiltinOperatorCandidates - Add the appropriate built-in
4138/// operator overloads to the candidate set (C++ [over.built]), based
4139/// on the operator @p Op and the arguments given. For example, if the
4140/// operator is a binary '+', this routine might add "int
4141/// operator+(int, int)" to cover integer addition.
4142void
4143Sema::AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,
4144                                   SourceLocation OpLoc,
4145                                   Expr **Args, unsigned NumArgs,
4146                                   OverloadCandidateSet& CandidateSet) {
4147  // The set of "promoted arithmetic types", which are the arithmetic
4148  // types are that preserved by promotion (C++ [over.built]p2). Note
4149  // that the first few of these types are the promoted integral
4150  // types; these types need to be first.
4151  // FIXME: What about complex?
4152  const unsigned FirstIntegralType = 0;
4153  const unsigned LastIntegralType = 13;
4154  const unsigned FirstPromotedIntegralType = 7,
4155                 LastPromotedIntegralType = 13;
4156  const unsigned FirstPromotedArithmeticType = 7,
4157                 LastPromotedArithmeticType = 16;
4158  const unsigned NumArithmeticTypes = 16;
4159  QualType ArithmeticTypes[NumArithmeticTypes] = {
4160    Context.BoolTy, Context.CharTy, Context.WCharTy,
4161// FIXME:   Context.Char16Ty, Context.Char32Ty,
4162    Context.SignedCharTy, Context.ShortTy,
4163    Context.UnsignedCharTy, Context.UnsignedShortTy,
4164    Context.IntTy, Context.LongTy, Context.LongLongTy,
4165    Context.UnsignedIntTy, Context.UnsignedLongTy, Context.UnsignedLongLongTy,
4166    Context.FloatTy, Context.DoubleTy, Context.LongDoubleTy
4167  };
4168  assert(ArithmeticTypes[FirstPromotedIntegralType] == Context.IntTy &&
4169         "Invalid first promoted integral type");
4170  assert(ArithmeticTypes[LastPromotedIntegralType - 1]
4171           == Context.UnsignedLongLongTy &&
4172         "Invalid last promoted integral type");
4173  assert(ArithmeticTypes[FirstPromotedArithmeticType] == Context.IntTy &&
4174         "Invalid first promoted arithmetic type");
4175  assert(ArithmeticTypes[LastPromotedArithmeticType - 1]
4176            == Context.LongDoubleTy &&
4177         "Invalid last promoted arithmetic type");
4178
4179  // Find all of the types that the arguments can convert to, but only
4180  // if the operator we're looking at has built-in operator candidates
4181  // that make use of these types.
4182  Qualifiers VisibleTypeConversionsQuals;
4183  VisibleTypeConversionsQuals.addConst();
4184  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
4185    VisibleTypeConversionsQuals += CollectVRQualifiers(Context, Args[ArgIdx]);
4186
4187  BuiltinCandidateTypeSet CandidateTypes(*this);
4188  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
4189    CandidateTypes.AddTypesConvertedFrom(Args[ArgIdx]->getType(),
4190                                         OpLoc,
4191                                         true,
4192                                         (Op == OO_Exclaim ||
4193                                          Op == OO_AmpAmp ||
4194                                          Op == OO_PipePipe),
4195                                         VisibleTypeConversionsQuals);
4196
4197  bool isComparison = false;
4198  switch (Op) {
4199  case OO_None:
4200  case NUM_OVERLOADED_OPERATORS:
4201    assert(false && "Expected an overloaded operator");
4202    break;
4203
4204  case OO_Star: // '*' is either unary or binary
4205    if (NumArgs == 1)
4206      goto UnaryStar;
4207    else
4208      goto BinaryStar;
4209    break;
4210
4211  case OO_Plus: // '+' is either unary or binary
4212    if (NumArgs == 1)
4213      goto UnaryPlus;
4214    else
4215      goto BinaryPlus;
4216    break;
4217
4218  case OO_Minus: // '-' is either unary or binary
4219    if (NumArgs == 1)
4220      goto UnaryMinus;
4221    else
4222      goto BinaryMinus;
4223    break;
4224
4225  case OO_Amp: // '&' is either unary or binary
4226    if (NumArgs == 1)
4227      goto UnaryAmp;
4228    else
4229      goto BinaryAmp;
4230
4231  case OO_PlusPlus:
4232  case OO_MinusMinus:
4233    // C++ [over.built]p3:
4234    //
4235    //   For every pair (T, VQ), where T is an arithmetic type, and VQ
4236    //   is either volatile or empty, there exist candidate operator
4237    //   functions of the form
4238    //
4239    //       VQ T&      operator++(VQ T&);
4240    //       T          operator++(VQ T&, int);
4241    //
4242    // C++ [over.built]p4:
4243    //
4244    //   For every pair (T, VQ), where T is an arithmetic type other
4245    //   than bool, and VQ is either volatile or empty, there exist
4246    //   candidate operator functions of the form
4247    //
4248    //       VQ T&      operator--(VQ T&);
4249    //       T          operator--(VQ T&, int);
4250    for (unsigned Arith = (Op == OO_PlusPlus? 0 : 1);
4251         Arith < NumArithmeticTypes; ++Arith) {
4252      QualType ArithTy = ArithmeticTypes[Arith];
4253      QualType ParamTypes[2]
4254        = { Context.getLValueReferenceType(ArithTy), Context.IntTy };
4255
4256      // Non-volatile version.
4257      if (NumArgs == 1)
4258        AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
4259      else
4260        AddBuiltinCandidate(ArithTy, ParamTypes, Args, 2, CandidateSet);
4261      // heuristic to reduce number of builtin candidates in the set.
4262      // Add volatile version only if there are conversions to a volatile type.
4263      if (VisibleTypeConversionsQuals.hasVolatile()) {
4264        // Volatile version
4265        ParamTypes[0]
4266          = Context.getLValueReferenceType(Context.getVolatileType(ArithTy));
4267        if (NumArgs == 1)
4268          AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
4269        else
4270          AddBuiltinCandidate(ArithTy, ParamTypes, Args, 2, CandidateSet);
4271      }
4272    }
4273
4274    // C++ [over.built]p5:
4275    //
4276    //   For every pair (T, VQ), where T is a cv-qualified or
4277    //   cv-unqualified object type, and VQ is either volatile or
4278    //   empty, there exist candidate operator functions of the form
4279    //
4280    //       T*VQ&      operator++(T*VQ&);
4281    //       T*VQ&      operator--(T*VQ&);
4282    //       T*         operator++(T*VQ&, int);
4283    //       T*         operator--(T*VQ&, int);
4284    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin();
4285         Ptr != CandidateTypes.pointer_end(); ++Ptr) {
4286      // Skip pointer types that aren't pointers to object types.
4287      if (!(*Ptr)->getAs<PointerType>()->getPointeeType()->isObjectType())
4288        continue;
4289
4290      QualType ParamTypes[2] = {
4291        Context.getLValueReferenceType(*Ptr), Context.IntTy
4292      };
4293
4294      // Without volatile
4295      if (NumArgs == 1)
4296        AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
4297      else
4298        AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
4299
4300      if (!Context.getCanonicalType(*Ptr).isVolatileQualified() &&
4301          VisibleTypeConversionsQuals.hasVolatile()) {
4302        // With volatile
4303        ParamTypes[0]
4304          = Context.getLValueReferenceType(Context.getVolatileType(*Ptr));
4305        if (NumArgs == 1)
4306          AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
4307        else
4308          AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
4309      }
4310    }
4311    break;
4312
4313  UnaryStar:
4314    // C++ [over.built]p6:
4315    //   For every cv-qualified or cv-unqualified object type T, there
4316    //   exist candidate operator functions of the form
4317    //
4318    //       T&         operator*(T*);
4319    //
4320    // C++ [over.built]p7:
4321    //   For every function type T, there exist candidate operator
4322    //   functions of the form
4323    //       T&         operator*(T*);
4324    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin();
4325         Ptr != CandidateTypes.pointer_end(); ++Ptr) {
4326      QualType ParamTy = *Ptr;
4327      QualType PointeeTy = ParamTy->getAs<PointerType>()->getPointeeType();
4328      AddBuiltinCandidate(Context.getLValueReferenceType(PointeeTy),
4329                          &ParamTy, Args, 1, CandidateSet);
4330    }
4331    break;
4332
4333  UnaryPlus:
4334    // C++ [over.built]p8:
4335    //   For every type T, there exist candidate operator functions of
4336    //   the form
4337    //
4338    //       T*         operator+(T*);
4339    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin();
4340         Ptr != CandidateTypes.pointer_end(); ++Ptr) {
4341      QualType ParamTy = *Ptr;
4342      AddBuiltinCandidate(ParamTy, &ParamTy, Args, 1, CandidateSet);
4343    }
4344
4345    // Fall through
4346
4347  UnaryMinus:
4348    // C++ [over.built]p9:
4349    //  For every promoted arithmetic type T, there exist candidate
4350    //  operator functions of the form
4351    //
4352    //       T         operator+(T);
4353    //       T         operator-(T);
4354    for (unsigned Arith = FirstPromotedArithmeticType;
4355         Arith < LastPromotedArithmeticType; ++Arith) {
4356      QualType ArithTy = ArithmeticTypes[Arith];
4357      AddBuiltinCandidate(ArithTy, &ArithTy, Args, 1, CandidateSet);
4358    }
4359
4360    // Extension: We also add these operators for vector types.
4361    for (BuiltinCandidateTypeSet::iterator Vec = CandidateTypes.vector_begin(),
4362                                        VecEnd = CandidateTypes.vector_end();
4363         Vec != VecEnd; ++Vec) {
4364      QualType VecTy = *Vec;
4365      AddBuiltinCandidate(VecTy, &VecTy, Args, 1, CandidateSet);
4366    }
4367    break;
4368
4369  case OO_Tilde:
4370    // C++ [over.built]p10:
4371    //   For every promoted integral type T, there exist candidate
4372    //   operator functions of the form
4373    //
4374    //        T         operator~(T);
4375    for (unsigned Int = FirstPromotedIntegralType;
4376         Int < LastPromotedIntegralType; ++Int) {
4377      QualType IntTy = ArithmeticTypes[Int];
4378      AddBuiltinCandidate(IntTy, &IntTy, Args, 1, CandidateSet);
4379    }
4380
4381    // Extension: We also add this operator for vector types.
4382    for (BuiltinCandidateTypeSet::iterator Vec = CandidateTypes.vector_begin(),
4383                                        VecEnd = CandidateTypes.vector_end();
4384         Vec != VecEnd; ++Vec) {
4385      QualType VecTy = *Vec;
4386      AddBuiltinCandidate(VecTy, &VecTy, Args, 1, CandidateSet);
4387    }
4388    break;
4389
4390  case OO_New:
4391  case OO_Delete:
4392  case OO_Array_New:
4393  case OO_Array_Delete:
4394  case OO_Call:
4395    assert(false && "Special operators don't use AddBuiltinOperatorCandidates");
4396    break;
4397
4398  case OO_Comma:
4399  UnaryAmp:
4400  case OO_Arrow:
4401    // C++ [over.match.oper]p3:
4402    //   -- For the operator ',', the unary operator '&', or the
4403    //      operator '->', the built-in candidates set is empty.
4404    break;
4405
4406  case OO_EqualEqual:
4407  case OO_ExclaimEqual:
4408    // C++ [over.match.oper]p16:
4409    //   For every pointer to member type T, there exist candidate operator
4410    //   functions of the form
4411    //
4412    //        bool operator==(T,T);
4413    //        bool operator!=(T,T);
4414    for (BuiltinCandidateTypeSet::iterator
4415           MemPtr = CandidateTypes.member_pointer_begin(),
4416           MemPtrEnd = CandidateTypes.member_pointer_end();
4417         MemPtr != MemPtrEnd;
4418         ++MemPtr) {
4419      QualType ParamTypes[2] = { *MemPtr, *MemPtr };
4420      AddBuiltinCandidate(Context.BoolTy, ParamTypes, Args, 2, CandidateSet);
4421    }
4422
4423    // Fall through
4424
4425  case OO_Less:
4426  case OO_Greater:
4427  case OO_LessEqual:
4428  case OO_GreaterEqual:
4429    // C++ [over.built]p15:
4430    //
4431    //   For every pointer or enumeration type T, there exist
4432    //   candidate operator functions of the form
4433    //
4434    //        bool       operator<(T, T);
4435    //        bool       operator>(T, T);
4436    //        bool       operator<=(T, T);
4437    //        bool       operator>=(T, T);
4438    //        bool       operator==(T, T);
4439    //        bool       operator!=(T, T);
4440    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin();
4441         Ptr != CandidateTypes.pointer_end(); ++Ptr) {
4442      QualType ParamTypes[2] = { *Ptr, *Ptr };
4443      AddBuiltinCandidate(Context.BoolTy, ParamTypes, Args, 2, CandidateSet);
4444    }
4445    for (BuiltinCandidateTypeSet::iterator Enum
4446           = CandidateTypes.enumeration_begin();
4447         Enum != CandidateTypes.enumeration_end(); ++Enum) {
4448      QualType ParamTypes[2] = { *Enum, *Enum };
4449      AddBuiltinCandidate(Context.BoolTy, ParamTypes, Args, 2, CandidateSet);
4450    }
4451
4452    // Fall through.
4453    isComparison = true;
4454
4455  BinaryPlus:
4456  BinaryMinus:
4457    if (!isComparison) {
4458      // We didn't fall through, so we must have OO_Plus or OO_Minus.
4459
4460      // C++ [over.built]p13:
4461      //
4462      //   For every cv-qualified or cv-unqualified object type T
4463      //   there exist candidate operator functions of the form
4464      //
4465      //      T*         operator+(T*, ptrdiff_t);
4466      //      T&         operator[](T*, ptrdiff_t);    [BELOW]
4467      //      T*         operator-(T*, ptrdiff_t);
4468      //      T*         operator+(ptrdiff_t, T*);
4469      //      T&         operator[](ptrdiff_t, T*);    [BELOW]
4470      //
4471      // C++ [over.built]p14:
4472      //
4473      //   For every T, where T is a pointer to object type, there
4474      //   exist candidate operator functions of the form
4475      //
4476      //      ptrdiff_t  operator-(T, T);
4477      for (BuiltinCandidateTypeSet::iterator Ptr
4478             = CandidateTypes.pointer_begin();
4479           Ptr != CandidateTypes.pointer_end(); ++Ptr) {
4480        QualType ParamTypes[2] = { *Ptr, Context.getPointerDiffType() };
4481
4482        // operator+(T*, ptrdiff_t) or operator-(T*, ptrdiff_t)
4483        AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
4484
4485        if (Op == OO_Plus) {
4486          // T* operator+(ptrdiff_t, T*);
4487          ParamTypes[0] = ParamTypes[1];
4488          ParamTypes[1] = *Ptr;
4489          AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
4490        } else {
4491          // ptrdiff_t operator-(T, T);
4492          ParamTypes[1] = *Ptr;
4493          AddBuiltinCandidate(Context.getPointerDiffType(), ParamTypes,
4494                              Args, 2, CandidateSet);
4495        }
4496      }
4497    }
4498    // Fall through
4499
4500  case OO_Slash:
4501  BinaryStar:
4502  Conditional:
4503    // C++ [over.built]p12:
4504    //
4505    //   For every pair of promoted arithmetic types L and R, there
4506    //   exist candidate operator functions of the form
4507    //
4508    //        LR         operator*(L, R);
4509    //        LR         operator/(L, R);
4510    //        LR         operator+(L, R);
4511    //        LR         operator-(L, R);
4512    //        bool       operator<(L, R);
4513    //        bool       operator>(L, R);
4514    //        bool       operator<=(L, R);
4515    //        bool       operator>=(L, R);
4516    //        bool       operator==(L, R);
4517    //        bool       operator!=(L, R);
4518    //
4519    //   where LR is the result of the usual arithmetic conversions
4520    //   between types L and R.
4521    //
4522    // C++ [over.built]p24:
4523    //
4524    //   For every pair of promoted arithmetic types L and R, there exist
4525    //   candidate operator functions of the form
4526    //
4527    //        LR       operator?(bool, L, R);
4528    //
4529    //   where LR is the result of the usual arithmetic conversions
4530    //   between types L and R.
4531    // Our candidates ignore the first parameter.
4532    for (unsigned Left = FirstPromotedArithmeticType;
4533         Left < LastPromotedArithmeticType; ++Left) {
4534      for (unsigned Right = FirstPromotedArithmeticType;
4535           Right < LastPromotedArithmeticType; ++Right) {
4536        QualType LandR[2] = { ArithmeticTypes[Left], ArithmeticTypes[Right] };
4537        QualType Result
4538          = isComparison
4539          ? Context.BoolTy
4540          : Context.UsualArithmeticConversionsType(LandR[0], LandR[1]);
4541        AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
4542      }
4543    }
4544
4545    // Extension: Add the binary operators ==, !=, <, <=, >=, >, *, /, and the
4546    // conditional operator for vector types.
4547    for (BuiltinCandidateTypeSet::iterator Vec1 = CandidateTypes.vector_begin(),
4548         Vec1End = CandidateTypes.vector_end();
4549         Vec1 != Vec1End; ++Vec1)
4550      for (BuiltinCandidateTypeSet::iterator
4551           Vec2 = CandidateTypes.vector_begin(),
4552           Vec2End = CandidateTypes.vector_end();
4553           Vec2 != Vec2End; ++Vec2) {
4554        QualType LandR[2] = { *Vec1, *Vec2 };
4555        QualType Result;
4556        if (isComparison)
4557          Result = Context.BoolTy;
4558        else {
4559          if ((*Vec1)->isExtVectorType() || !(*Vec2)->isExtVectorType())
4560            Result = *Vec1;
4561          else
4562            Result = *Vec2;
4563        }
4564
4565        AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
4566      }
4567
4568    break;
4569
4570  case OO_Percent:
4571  BinaryAmp:
4572  case OO_Caret:
4573  case OO_Pipe:
4574  case OO_LessLess:
4575  case OO_GreaterGreater:
4576    // C++ [over.built]p17:
4577    //
4578    //   For every pair of promoted integral types L and R, there
4579    //   exist candidate operator functions of the form
4580    //
4581    //      LR         operator%(L, R);
4582    //      LR         operator&(L, R);
4583    //      LR         operator^(L, R);
4584    //      LR         operator|(L, R);
4585    //      L          operator<<(L, R);
4586    //      L          operator>>(L, R);
4587    //
4588    //   where LR is the result of the usual arithmetic conversions
4589    //   between types L and R.
4590    for (unsigned Left = FirstPromotedIntegralType;
4591         Left < LastPromotedIntegralType; ++Left) {
4592      for (unsigned Right = FirstPromotedIntegralType;
4593           Right < LastPromotedIntegralType; ++Right) {
4594        QualType LandR[2] = { ArithmeticTypes[Left], ArithmeticTypes[Right] };
4595        QualType Result = (Op == OO_LessLess || Op == OO_GreaterGreater)
4596            ? LandR[0]
4597            : Context.UsualArithmeticConversionsType(LandR[0], LandR[1]);
4598        AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
4599      }
4600    }
4601    break;
4602
4603  case OO_Equal:
4604    // C++ [over.built]p20:
4605    //
4606    //   For every pair (T, VQ), where T is an enumeration or
4607    //   pointer to member type and VQ is either volatile or
4608    //   empty, there exist candidate operator functions of the form
4609    //
4610    //        VQ T&      operator=(VQ T&, T);
4611    for (BuiltinCandidateTypeSet::iterator
4612           Enum = CandidateTypes.enumeration_begin(),
4613           EnumEnd = CandidateTypes.enumeration_end();
4614         Enum != EnumEnd; ++Enum)
4615      AddBuiltinAssignmentOperatorCandidates(*this, *Enum, Args, 2,
4616                                             CandidateSet);
4617    for (BuiltinCandidateTypeSet::iterator
4618           MemPtr = CandidateTypes.member_pointer_begin(),
4619         MemPtrEnd = CandidateTypes.member_pointer_end();
4620         MemPtr != MemPtrEnd; ++MemPtr)
4621      AddBuiltinAssignmentOperatorCandidates(*this, *MemPtr, Args, 2,
4622                                             CandidateSet);
4623
4624    // Fall through.
4625
4626  case OO_PlusEqual:
4627  case OO_MinusEqual:
4628    // C++ [over.built]p19:
4629    //
4630    //   For every pair (T, VQ), where T is any type and VQ is either
4631    //   volatile or empty, there exist candidate operator functions
4632    //   of the form
4633    //
4634    //        T*VQ&      operator=(T*VQ&, T*);
4635    //
4636    // C++ [over.built]p21:
4637    //
4638    //   For every pair (T, VQ), where T is a cv-qualified or
4639    //   cv-unqualified object type and VQ is either volatile or
4640    //   empty, there exist candidate operator functions of the form
4641    //
4642    //        T*VQ&      operator+=(T*VQ&, ptrdiff_t);
4643    //        T*VQ&      operator-=(T*VQ&, ptrdiff_t);
4644    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin();
4645         Ptr != CandidateTypes.pointer_end(); ++Ptr) {
4646      QualType ParamTypes[2];
4647      ParamTypes[1] = (Op == OO_Equal)? *Ptr : Context.getPointerDiffType();
4648
4649      // non-volatile version
4650      ParamTypes[0] = Context.getLValueReferenceType(*Ptr);
4651      AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
4652                          /*IsAssigmentOperator=*/Op == OO_Equal);
4653
4654      if (!Context.getCanonicalType(*Ptr).isVolatileQualified() &&
4655          VisibleTypeConversionsQuals.hasVolatile()) {
4656        // volatile version
4657        ParamTypes[0]
4658          = Context.getLValueReferenceType(Context.getVolatileType(*Ptr));
4659        AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
4660                            /*IsAssigmentOperator=*/Op == OO_Equal);
4661      }
4662    }
4663    // Fall through.
4664
4665  case OO_StarEqual:
4666  case OO_SlashEqual:
4667    // C++ [over.built]p18:
4668    //
4669    //   For every triple (L, VQ, R), where L is an arithmetic type,
4670    //   VQ is either volatile or empty, and R is a promoted
4671    //   arithmetic type, there exist candidate operator functions of
4672    //   the form
4673    //
4674    //        VQ L&      operator=(VQ L&, R);
4675    //        VQ L&      operator*=(VQ L&, R);
4676    //        VQ L&      operator/=(VQ L&, R);
4677    //        VQ L&      operator+=(VQ L&, R);
4678    //        VQ L&      operator-=(VQ L&, R);
4679    for (unsigned Left = 0; Left < NumArithmeticTypes; ++Left) {
4680      for (unsigned Right = FirstPromotedArithmeticType;
4681           Right < LastPromotedArithmeticType; ++Right) {
4682        QualType ParamTypes[2];
4683        ParamTypes[1] = ArithmeticTypes[Right];
4684
4685        // Add this built-in operator as a candidate (VQ is empty).
4686        ParamTypes[0] = Context.getLValueReferenceType(ArithmeticTypes[Left]);
4687        AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
4688                            /*IsAssigmentOperator=*/Op == OO_Equal);
4689
4690        // Add this built-in operator as a candidate (VQ is 'volatile').
4691        if (VisibleTypeConversionsQuals.hasVolatile()) {
4692          ParamTypes[0] = Context.getVolatileType(ArithmeticTypes[Left]);
4693          ParamTypes[0] = Context.getLValueReferenceType(ParamTypes[0]);
4694          AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
4695                              /*IsAssigmentOperator=*/Op == OO_Equal);
4696        }
4697      }
4698    }
4699
4700    // Extension: Add the binary operators =, +=, -=, *=, /= for vector types.
4701    for (BuiltinCandidateTypeSet::iterator Vec1 = CandidateTypes.vector_begin(),
4702                                        Vec1End = CandidateTypes.vector_end();
4703         Vec1 != Vec1End; ++Vec1)
4704      for (BuiltinCandidateTypeSet::iterator
4705                Vec2 = CandidateTypes.vector_begin(),
4706             Vec2End = CandidateTypes.vector_end();
4707           Vec2 != Vec2End; ++Vec2) {
4708        QualType ParamTypes[2];
4709        ParamTypes[1] = *Vec2;
4710        // Add this built-in operator as a candidate (VQ is empty).
4711        ParamTypes[0] = Context.getLValueReferenceType(*Vec1);
4712        AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
4713                            /*IsAssigmentOperator=*/Op == OO_Equal);
4714
4715        // Add this built-in operator as a candidate (VQ is 'volatile').
4716        if (VisibleTypeConversionsQuals.hasVolatile()) {
4717          ParamTypes[0] = Context.getVolatileType(*Vec1);
4718          ParamTypes[0] = Context.getLValueReferenceType(ParamTypes[0]);
4719          AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
4720                              /*IsAssigmentOperator=*/Op == OO_Equal);
4721        }
4722      }
4723    break;
4724
4725  case OO_PercentEqual:
4726  case OO_LessLessEqual:
4727  case OO_GreaterGreaterEqual:
4728  case OO_AmpEqual:
4729  case OO_CaretEqual:
4730  case OO_PipeEqual:
4731    // C++ [over.built]p22:
4732    //
4733    //   For every triple (L, VQ, R), where L is an integral type, VQ
4734    //   is either volatile or empty, and R is a promoted integral
4735    //   type, there exist candidate operator functions of the form
4736    //
4737    //        VQ L&       operator%=(VQ L&, R);
4738    //        VQ L&       operator<<=(VQ L&, R);
4739    //        VQ L&       operator>>=(VQ L&, R);
4740    //        VQ L&       operator&=(VQ L&, R);
4741    //        VQ L&       operator^=(VQ L&, R);
4742    //        VQ L&       operator|=(VQ L&, R);
4743    for (unsigned Left = FirstIntegralType; Left < LastIntegralType; ++Left) {
4744      for (unsigned Right = FirstPromotedIntegralType;
4745           Right < LastPromotedIntegralType; ++Right) {
4746        QualType ParamTypes[2];
4747        ParamTypes[1] = ArithmeticTypes[Right];
4748
4749        // Add this built-in operator as a candidate (VQ is empty).
4750        ParamTypes[0] = Context.getLValueReferenceType(ArithmeticTypes[Left]);
4751        AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet);
4752        if (VisibleTypeConversionsQuals.hasVolatile()) {
4753          // Add this built-in operator as a candidate (VQ is 'volatile').
4754          ParamTypes[0] = ArithmeticTypes[Left];
4755          ParamTypes[0] = Context.getVolatileType(ParamTypes[0]);
4756          ParamTypes[0] = Context.getLValueReferenceType(ParamTypes[0]);
4757          AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet);
4758        }
4759      }
4760    }
4761    break;
4762
4763  case OO_Exclaim: {
4764    // C++ [over.operator]p23:
4765    //
4766    //   There also exist candidate operator functions of the form
4767    //
4768    //        bool        operator!(bool);
4769    //        bool        operator&&(bool, bool);     [BELOW]
4770    //        bool        operator||(bool, bool);     [BELOW]
4771    QualType ParamTy = Context.BoolTy;
4772    AddBuiltinCandidate(ParamTy, &ParamTy, Args, 1, CandidateSet,
4773                        /*IsAssignmentOperator=*/false,
4774                        /*NumContextualBoolArguments=*/1);
4775    break;
4776  }
4777
4778  case OO_AmpAmp:
4779  case OO_PipePipe: {
4780    // C++ [over.operator]p23:
4781    //
4782    //   There also exist candidate operator functions of the form
4783    //
4784    //        bool        operator!(bool);            [ABOVE]
4785    //        bool        operator&&(bool, bool);
4786    //        bool        operator||(bool, bool);
4787    QualType ParamTypes[2] = { Context.BoolTy, Context.BoolTy };
4788    AddBuiltinCandidate(Context.BoolTy, ParamTypes, Args, 2, CandidateSet,
4789                        /*IsAssignmentOperator=*/false,
4790                        /*NumContextualBoolArguments=*/2);
4791    break;
4792  }
4793
4794  case OO_Subscript:
4795    // C++ [over.built]p13:
4796    //
4797    //   For every cv-qualified or cv-unqualified object type T there
4798    //   exist candidate operator functions of the form
4799    //
4800    //        T*         operator+(T*, ptrdiff_t);     [ABOVE]
4801    //        T&         operator[](T*, ptrdiff_t);
4802    //        T*         operator-(T*, ptrdiff_t);     [ABOVE]
4803    //        T*         operator+(ptrdiff_t, T*);     [ABOVE]
4804    //        T&         operator[](ptrdiff_t, T*);
4805    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin();
4806         Ptr != CandidateTypes.pointer_end(); ++Ptr) {
4807      QualType ParamTypes[2] = { *Ptr, Context.getPointerDiffType() };
4808      QualType PointeeType = (*Ptr)->getAs<PointerType>()->getPointeeType();
4809      QualType ResultTy = Context.getLValueReferenceType(PointeeType);
4810
4811      // T& operator[](T*, ptrdiff_t)
4812      AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
4813
4814      // T& operator[](ptrdiff_t, T*);
4815      ParamTypes[0] = ParamTypes[1];
4816      ParamTypes[1] = *Ptr;
4817      AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
4818    }
4819    break;
4820
4821  case OO_ArrowStar:
4822    // C++ [over.built]p11:
4823    //    For every quintuple (C1, C2, T, CV1, CV2), where C2 is a class type,
4824    //    C1 is the same type as C2 or is a derived class of C2, T is an object
4825    //    type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
4826    //    there exist candidate operator functions of the form
4827    //    CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
4828    //    where CV12 is the union of CV1 and CV2.
4829    {
4830      for (BuiltinCandidateTypeSet::iterator Ptr =
4831             CandidateTypes.pointer_begin();
4832           Ptr != CandidateTypes.pointer_end(); ++Ptr) {
4833        QualType C1Ty = (*Ptr);
4834        QualType C1;
4835        QualifierCollector Q1;
4836        if (const PointerType *PointerTy = C1Ty->getAs<PointerType>()) {
4837          C1 = QualType(Q1.strip(PointerTy->getPointeeType()), 0);
4838          if (!isa<RecordType>(C1))
4839            continue;
4840          // heuristic to reduce number of builtin candidates in the set.
4841          // Add volatile/restrict version only if there are conversions to a
4842          // volatile/restrict type.
4843          if (!VisibleTypeConversionsQuals.hasVolatile() && Q1.hasVolatile())
4844            continue;
4845          if (!VisibleTypeConversionsQuals.hasRestrict() && Q1.hasRestrict())
4846            continue;
4847        }
4848        for (BuiltinCandidateTypeSet::iterator
4849             MemPtr = CandidateTypes.member_pointer_begin(),
4850             MemPtrEnd = CandidateTypes.member_pointer_end();
4851             MemPtr != MemPtrEnd; ++MemPtr) {
4852          const MemberPointerType *mptr = cast<MemberPointerType>(*MemPtr);
4853          QualType C2 = QualType(mptr->getClass(), 0);
4854          C2 = C2.getUnqualifiedType();
4855          if (C1 != C2 && !IsDerivedFrom(C1, C2))
4856            break;
4857          QualType ParamTypes[2] = { *Ptr, *MemPtr };
4858          // build CV12 T&
4859          QualType T = mptr->getPointeeType();
4860          if (!VisibleTypeConversionsQuals.hasVolatile() &&
4861              T.isVolatileQualified())
4862            continue;
4863          if (!VisibleTypeConversionsQuals.hasRestrict() &&
4864              T.isRestrictQualified())
4865            continue;
4866          T = Q1.apply(T);
4867          QualType ResultTy = Context.getLValueReferenceType(T);
4868          AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
4869        }
4870      }
4871    }
4872    break;
4873
4874  case OO_Conditional:
4875    // Note that we don't consider the first argument, since it has been
4876    // contextually converted to bool long ago. The candidates below are
4877    // therefore added as binary.
4878    //
4879    // C++ [over.built]p24:
4880    //   For every type T, where T is a pointer or pointer-to-member type,
4881    //   there exist candidate operator functions of the form
4882    //
4883    //        T        operator?(bool, T, T);
4884    //
4885    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin(),
4886         E = CandidateTypes.pointer_end(); Ptr != E; ++Ptr) {
4887      QualType ParamTypes[2] = { *Ptr, *Ptr };
4888      AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
4889    }
4890    for (BuiltinCandidateTypeSet::iterator Ptr =
4891           CandidateTypes.member_pointer_begin(),
4892         E = CandidateTypes.member_pointer_end(); Ptr != E; ++Ptr) {
4893      QualType ParamTypes[2] = { *Ptr, *Ptr };
4894      AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
4895    }
4896    goto Conditional;
4897  }
4898}
4899
4900/// \brief Add function candidates found via argument-dependent lookup
4901/// to the set of overloading candidates.
4902///
4903/// This routine performs argument-dependent name lookup based on the
4904/// given function name (which may also be an operator name) and adds
4905/// all of the overload candidates found by ADL to the overload
4906/// candidate set (C++ [basic.lookup.argdep]).
4907void
4908Sema::AddArgumentDependentLookupCandidates(DeclarationName Name,
4909                                           bool Operator,
4910                                           Expr **Args, unsigned NumArgs,
4911                       const TemplateArgumentListInfo *ExplicitTemplateArgs,
4912                                           OverloadCandidateSet& CandidateSet,
4913                                           bool PartialOverloading) {
4914  ADLResult Fns;
4915
4916  // FIXME: This approach for uniquing ADL results (and removing
4917  // redundant candidates from the set) relies on pointer-equality,
4918  // which means we need to key off the canonical decl.  However,
4919  // always going back to the canonical decl might not get us the
4920  // right set of default arguments.  What default arguments are
4921  // we supposed to consider on ADL candidates, anyway?
4922
4923  // FIXME: Pass in the explicit template arguments?
4924  ArgumentDependentLookup(Name, Operator, Args, NumArgs, Fns);
4925
4926  // Erase all of the candidates we already knew about.
4927  for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(),
4928                                   CandEnd = CandidateSet.end();
4929       Cand != CandEnd; ++Cand)
4930    if (Cand->Function) {
4931      Fns.erase(Cand->Function);
4932      if (FunctionTemplateDecl *FunTmpl = Cand->Function->getPrimaryTemplate())
4933        Fns.erase(FunTmpl);
4934    }
4935
4936  // For each of the ADL candidates we found, add it to the overload
4937  // set.
4938  for (ADLResult::iterator I = Fns.begin(), E = Fns.end(); I != E; ++I) {
4939    DeclAccessPair FoundDecl = DeclAccessPair::make(*I, AS_none);
4940    if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
4941      if (ExplicitTemplateArgs)
4942        continue;
4943
4944      AddOverloadCandidate(FD, FoundDecl, Args, NumArgs, CandidateSet,
4945                           false, PartialOverloading);
4946    } else
4947      AddTemplateOverloadCandidate(cast<FunctionTemplateDecl>(*I),
4948                                   FoundDecl, ExplicitTemplateArgs,
4949                                   Args, NumArgs, CandidateSet);
4950  }
4951}
4952
4953/// isBetterOverloadCandidate - Determines whether the first overload
4954/// candidate is a better candidate than the second (C++ 13.3.3p1).
4955bool
4956Sema::isBetterOverloadCandidate(const OverloadCandidate& Cand1,
4957                                const OverloadCandidate& Cand2,
4958                                SourceLocation Loc) {
4959  // Define viable functions to be better candidates than non-viable
4960  // functions.
4961  if (!Cand2.Viable)
4962    return Cand1.Viable;
4963  else if (!Cand1.Viable)
4964    return false;
4965
4966  // C++ [over.match.best]p1:
4967  //
4968  //   -- if F is a static member function, ICS1(F) is defined such
4969  //      that ICS1(F) is neither better nor worse than ICS1(G) for
4970  //      any function G, and, symmetrically, ICS1(G) is neither
4971  //      better nor worse than ICS1(F).
4972  unsigned StartArg = 0;
4973  if (Cand1.IgnoreObjectArgument || Cand2.IgnoreObjectArgument)
4974    StartArg = 1;
4975
4976  // C++ [over.match.best]p1:
4977  //   A viable function F1 is defined to be a better function than another
4978  //   viable function F2 if for all arguments i, ICSi(F1) is not a worse
4979  //   conversion sequence than ICSi(F2), and then...
4980  unsigned NumArgs = Cand1.Conversions.size();
4981  assert(Cand2.Conversions.size() == NumArgs && "Overload candidate mismatch");
4982  bool HasBetterConversion = false;
4983  for (unsigned ArgIdx = StartArg; ArgIdx < NumArgs; ++ArgIdx) {
4984    switch (CompareImplicitConversionSequences(Cand1.Conversions[ArgIdx],
4985                                               Cand2.Conversions[ArgIdx])) {
4986    case ImplicitConversionSequence::Better:
4987      // Cand1 has a better conversion sequence.
4988      HasBetterConversion = true;
4989      break;
4990
4991    case ImplicitConversionSequence::Worse:
4992      // Cand1 can't be better than Cand2.
4993      return false;
4994
4995    case ImplicitConversionSequence::Indistinguishable:
4996      // Do nothing.
4997      break;
4998    }
4999  }
5000
5001  //    -- for some argument j, ICSj(F1) is a better conversion sequence than
5002  //       ICSj(F2), or, if not that,
5003  if (HasBetterConversion)
5004    return true;
5005
5006  //     - F1 is a non-template function and F2 is a function template
5007  //       specialization, or, if not that,
5008  if ((!Cand1.Function || !Cand1.Function->getPrimaryTemplate()) &&
5009      Cand2.Function && Cand2.Function->getPrimaryTemplate())
5010    return true;
5011
5012  //   -- F1 and F2 are function template specializations, and the function
5013  //      template for F1 is more specialized than the template for F2
5014  //      according to the partial ordering rules described in 14.5.5.2, or,
5015  //      if not that,
5016  if (Cand1.Function && Cand1.Function->getPrimaryTemplate() &&
5017      Cand2.Function && Cand2.Function->getPrimaryTemplate())
5018    if (FunctionTemplateDecl *BetterTemplate
5019          = getMoreSpecializedTemplate(Cand1.Function->getPrimaryTemplate(),
5020                                       Cand2.Function->getPrimaryTemplate(),
5021                                       Loc,
5022                       isa<CXXConversionDecl>(Cand1.Function)? TPOC_Conversion
5023                                                             : TPOC_Call))
5024      return BetterTemplate == Cand1.Function->getPrimaryTemplate();
5025
5026  //   -- the context is an initialization by user-defined conversion
5027  //      (see 8.5, 13.3.1.5) and the standard conversion sequence
5028  //      from the return type of F1 to the destination type (i.e.,
5029  //      the type of the entity being initialized) is a better
5030  //      conversion sequence than the standard conversion sequence
5031  //      from the return type of F2 to the destination type.
5032  if (Cand1.Function && Cand2.Function &&
5033      isa<CXXConversionDecl>(Cand1.Function) &&
5034      isa<CXXConversionDecl>(Cand2.Function)) {
5035    switch (CompareStandardConversionSequences(Cand1.FinalConversion,
5036                                               Cand2.FinalConversion)) {
5037    case ImplicitConversionSequence::Better:
5038      // Cand1 has a better conversion sequence.
5039      return true;
5040
5041    case ImplicitConversionSequence::Worse:
5042      // Cand1 can't be better than Cand2.
5043      return false;
5044
5045    case ImplicitConversionSequence::Indistinguishable:
5046      // Do nothing
5047      break;
5048    }
5049  }
5050
5051  return false;
5052}
5053
5054/// \brief Computes the best viable function (C++ 13.3.3)
5055/// within an overload candidate set.
5056///
5057/// \param CandidateSet the set of candidate functions.
5058///
5059/// \param Loc the location of the function name (or operator symbol) for
5060/// which overload resolution occurs.
5061///
5062/// \param Best f overload resolution was successful or found a deleted
5063/// function, Best points to the candidate function found.
5064///
5065/// \returns The result of overload resolution.
5066OverloadingResult Sema::BestViableFunction(OverloadCandidateSet& CandidateSet,
5067                                           SourceLocation Loc,
5068                                        OverloadCandidateSet::iterator& Best) {
5069  // Find the best viable function.
5070  Best = CandidateSet.end();
5071  for (OverloadCandidateSet::iterator Cand = CandidateSet.begin();
5072       Cand != CandidateSet.end(); ++Cand) {
5073    if (Cand->Viable) {
5074      if (Best == CandidateSet.end() ||
5075          isBetterOverloadCandidate(*Cand, *Best, Loc))
5076        Best = Cand;
5077    }
5078  }
5079
5080  // If we didn't find any viable functions, abort.
5081  if (Best == CandidateSet.end())
5082    return OR_No_Viable_Function;
5083
5084  // Make sure that this function is better than every other viable
5085  // function. If not, we have an ambiguity.
5086  for (OverloadCandidateSet::iterator Cand = CandidateSet.begin();
5087       Cand != CandidateSet.end(); ++Cand) {
5088    if (Cand->Viable &&
5089        Cand != Best &&
5090        !isBetterOverloadCandidate(*Best, *Cand, Loc)) {
5091      Best = CandidateSet.end();
5092      return OR_Ambiguous;
5093    }
5094  }
5095
5096  // Best is the best viable function.
5097  if (Best->Function &&
5098      (Best->Function->isDeleted() ||
5099       Best->Function->getAttr<UnavailableAttr>()))
5100    return OR_Deleted;
5101
5102  // C++ [basic.def.odr]p2:
5103  //   An overloaded function is used if it is selected by overload resolution
5104  //   when referred to from a potentially-evaluated expression. [Note: this
5105  //   covers calls to named functions (5.2.2), operator overloading
5106  //   (clause 13), user-defined conversions (12.3.2), allocation function for
5107  //   placement new (5.3.4), as well as non-default initialization (8.5).
5108  if (Best->Function)
5109    MarkDeclarationReferenced(Loc, Best->Function);
5110  return OR_Success;
5111}
5112
5113namespace {
5114
5115enum OverloadCandidateKind {
5116  oc_function,
5117  oc_method,
5118  oc_constructor,
5119  oc_function_template,
5120  oc_method_template,
5121  oc_constructor_template,
5122  oc_implicit_default_constructor,
5123  oc_implicit_copy_constructor,
5124  oc_implicit_copy_assignment
5125};
5126
5127OverloadCandidateKind ClassifyOverloadCandidate(Sema &S,
5128                                                FunctionDecl *Fn,
5129                                                std::string &Description) {
5130  bool isTemplate = false;
5131
5132  if (FunctionTemplateDecl *FunTmpl = Fn->getPrimaryTemplate()) {
5133    isTemplate = true;
5134    Description = S.getTemplateArgumentBindingsText(
5135      FunTmpl->getTemplateParameters(), *Fn->getTemplateSpecializationArgs());
5136  }
5137
5138  if (CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn)) {
5139    if (!Ctor->isImplicit())
5140      return isTemplate ? oc_constructor_template : oc_constructor;
5141
5142    return Ctor->isCopyConstructor() ? oc_implicit_copy_constructor
5143                                     : oc_implicit_default_constructor;
5144  }
5145
5146  if (CXXMethodDecl *Meth = dyn_cast<CXXMethodDecl>(Fn)) {
5147    // This actually gets spelled 'candidate function' for now, but
5148    // it doesn't hurt to split it out.
5149    if (!Meth->isImplicit())
5150      return isTemplate ? oc_method_template : oc_method;
5151
5152    assert(Meth->isCopyAssignment()
5153           && "implicit method is not copy assignment operator?");
5154    return oc_implicit_copy_assignment;
5155  }
5156
5157  return isTemplate ? oc_function_template : oc_function;
5158}
5159
5160} // end anonymous namespace
5161
5162// Notes the location of an overload candidate.
5163void Sema::NoteOverloadCandidate(FunctionDecl *Fn) {
5164  std::string FnDesc;
5165  OverloadCandidateKind K = ClassifyOverloadCandidate(*this, Fn, FnDesc);
5166  Diag(Fn->getLocation(), diag::note_ovl_candidate)
5167    << (unsigned) K << FnDesc;
5168}
5169
5170/// Diagnoses an ambiguous conversion.  The partial diagnostic is the
5171/// "lead" diagnostic; it will be given two arguments, the source and
5172/// target types of the conversion.
5173void Sema::DiagnoseAmbiguousConversion(const ImplicitConversionSequence &ICS,
5174                                       SourceLocation CaretLoc,
5175                                       const PartialDiagnostic &PDiag) {
5176  Diag(CaretLoc, PDiag)
5177    << ICS.Ambiguous.getFromType() << ICS.Ambiguous.getToType();
5178  for (AmbiguousConversionSequence::const_iterator
5179         I = ICS.Ambiguous.begin(), E = ICS.Ambiguous.end(); I != E; ++I) {
5180    NoteOverloadCandidate(*I);
5181  }
5182}
5183
5184namespace {
5185
5186void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I) {
5187  const ImplicitConversionSequence &Conv = Cand->Conversions[I];
5188  assert(Conv.isBad());
5189  assert(Cand->Function && "for now, candidate must be a function");
5190  FunctionDecl *Fn = Cand->Function;
5191
5192  // There's a conversion slot for the object argument if this is a
5193  // non-constructor method.  Note that 'I' corresponds the
5194  // conversion-slot index.
5195  bool isObjectArgument = false;
5196  if (isa<CXXMethodDecl>(Fn) && !isa<CXXConstructorDecl>(Fn)) {
5197    if (I == 0)
5198      isObjectArgument = true;
5199    else
5200      I--;
5201  }
5202
5203  std::string FnDesc;
5204  OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
5205
5206  Expr *FromExpr = Conv.Bad.FromExpr;
5207  QualType FromTy = Conv.Bad.getFromType();
5208  QualType ToTy = Conv.Bad.getToType();
5209
5210  if (FromTy == S.Context.OverloadTy) {
5211    assert(FromExpr && "overload set argument came from implicit argument?");
5212    Expr *E = FromExpr->IgnoreParens();
5213    if (isa<UnaryOperator>(E))
5214      E = cast<UnaryOperator>(E)->getSubExpr()->IgnoreParens();
5215    DeclarationName Name = cast<OverloadExpr>(E)->getName();
5216
5217    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_overload)
5218      << (unsigned) FnKind << FnDesc
5219      << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
5220      << ToTy << Name << I+1;
5221    return;
5222  }
5223
5224  // Do some hand-waving analysis to see if the non-viability is due
5225  // to a qualifier mismatch.
5226  CanQualType CFromTy = S.Context.getCanonicalType(FromTy);
5227  CanQualType CToTy = S.Context.getCanonicalType(ToTy);
5228  if (CanQual<ReferenceType> RT = CToTy->getAs<ReferenceType>())
5229    CToTy = RT->getPointeeType();
5230  else {
5231    // TODO: detect and diagnose the full richness of const mismatches.
5232    if (CanQual<PointerType> FromPT = CFromTy->getAs<PointerType>())
5233      if (CanQual<PointerType> ToPT = CToTy->getAs<PointerType>())
5234        CFromTy = FromPT->getPointeeType(), CToTy = ToPT->getPointeeType();
5235  }
5236
5237  if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() &&
5238      !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {
5239    // It is dumb that we have to do this here.
5240    while (isa<ArrayType>(CFromTy))
5241      CFromTy = CFromTy->getAs<ArrayType>()->getElementType();
5242    while (isa<ArrayType>(CToTy))
5243      CToTy = CFromTy->getAs<ArrayType>()->getElementType();
5244
5245    Qualifiers FromQs = CFromTy.getQualifiers();
5246    Qualifiers ToQs = CToTy.getQualifiers();
5247
5248    if (FromQs.getAddressSpace() != ToQs.getAddressSpace()) {
5249      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_addrspace)
5250        << (unsigned) FnKind << FnDesc
5251        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
5252        << FromTy
5253        << FromQs.getAddressSpace() << ToQs.getAddressSpace()
5254        << (unsigned) isObjectArgument << I+1;
5255      return;
5256    }
5257
5258    unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
5259    assert(CVR && "unexpected qualifiers mismatch");
5260
5261    if (isObjectArgument) {
5262      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr_this)
5263        << (unsigned) FnKind << FnDesc
5264        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
5265        << FromTy << (CVR - 1);
5266    } else {
5267      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr)
5268        << (unsigned) FnKind << FnDesc
5269        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
5270        << FromTy << (CVR - 1) << I+1;
5271    }
5272    return;
5273  }
5274
5275  // Diagnose references or pointers to incomplete types differently,
5276  // since it's far from impossible that the incompleteness triggered
5277  // the failure.
5278  QualType TempFromTy = FromTy.getNonReferenceType();
5279  if (const PointerType *PTy = TempFromTy->getAs<PointerType>())
5280    TempFromTy = PTy->getPointeeType();
5281  if (TempFromTy->isIncompleteType()) {
5282    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_conv_incomplete)
5283      << (unsigned) FnKind << FnDesc
5284      << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
5285      << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
5286    return;
5287  }
5288
5289  // TODO: specialize more based on the kind of mismatch
5290  S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_conv)
5291    << (unsigned) FnKind << FnDesc
5292    << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
5293    << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
5294}
5295
5296void DiagnoseArityMismatch(Sema &S, OverloadCandidate *Cand,
5297                           unsigned NumFormalArgs) {
5298  // TODO: treat calls to a missing default constructor as a special case
5299
5300  FunctionDecl *Fn = Cand->Function;
5301  const FunctionProtoType *FnTy = Fn->getType()->getAs<FunctionProtoType>();
5302
5303  unsigned MinParams = Fn->getMinRequiredArguments();
5304
5305  // at least / at most / exactly
5306  // FIXME: variadic templates "at most" should account for parameter packs
5307  unsigned mode, modeCount;
5308  if (NumFormalArgs < MinParams) {
5309    assert((Cand->FailureKind == ovl_fail_too_few_arguments) ||
5310           (Cand->FailureKind == ovl_fail_bad_deduction &&
5311            Cand->DeductionFailure.Result == Sema::TDK_TooFewArguments));
5312    if (MinParams != FnTy->getNumArgs() || FnTy->isVariadic())
5313      mode = 0; // "at least"
5314    else
5315      mode = 2; // "exactly"
5316    modeCount = MinParams;
5317  } else {
5318    assert((Cand->FailureKind == ovl_fail_too_many_arguments) ||
5319           (Cand->FailureKind == ovl_fail_bad_deduction &&
5320            Cand->DeductionFailure.Result == Sema::TDK_TooManyArguments));
5321    if (MinParams != FnTy->getNumArgs())
5322      mode = 1; // "at most"
5323    else
5324      mode = 2; // "exactly"
5325    modeCount = FnTy->getNumArgs();
5326  }
5327
5328  std::string Description;
5329  OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, Description);
5330
5331  S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity)
5332    << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != 0) << mode
5333    << modeCount << NumFormalArgs;
5334}
5335
5336/// Diagnose a failed template-argument deduction.
5337void DiagnoseBadDeduction(Sema &S, OverloadCandidate *Cand,
5338                          Expr **Args, unsigned NumArgs) {
5339  FunctionDecl *Fn = Cand->Function; // pattern
5340
5341  TemplateParameter Param = Cand->DeductionFailure.getTemplateParameter();
5342  NamedDecl *ParamD;
5343  (ParamD = Param.dyn_cast<TemplateTypeParmDecl*>()) ||
5344  (ParamD = Param.dyn_cast<NonTypeTemplateParmDecl*>()) ||
5345  (ParamD = Param.dyn_cast<TemplateTemplateParmDecl*>());
5346  switch (Cand->DeductionFailure.Result) {
5347  case Sema::TDK_Success:
5348    llvm_unreachable("TDK_success while diagnosing bad deduction");
5349
5350  case Sema::TDK_Incomplete: {
5351    assert(ParamD && "no parameter found for incomplete deduction result");
5352    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_incomplete_deduction)
5353      << ParamD->getDeclName();
5354    return;
5355  }
5356
5357  case Sema::TDK_Inconsistent:
5358  case Sema::TDK_InconsistentQuals: {
5359    assert(ParamD && "no parameter found for inconsistent deduction result");
5360    int which = 0;
5361    if (isa<TemplateTypeParmDecl>(ParamD))
5362      which = 0;
5363    else if (isa<NonTypeTemplateParmDecl>(ParamD))
5364      which = 1;
5365    else {
5366      which = 2;
5367    }
5368
5369    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_inconsistent_deduction)
5370      << which << ParamD->getDeclName()
5371      << *Cand->DeductionFailure.getFirstArg()
5372      << *Cand->DeductionFailure.getSecondArg();
5373    return;
5374  }
5375
5376  case Sema::TDK_InvalidExplicitArguments:
5377    assert(ParamD && "no parameter found for invalid explicit arguments");
5378    if (ParamD->getDeclName())
5379      S.Diag(Fn->getLocation(),
5380             diag::note_ovl_candidate_explicit_arg_mismatch_named)
5381        << ParamD->getDeclName();
5382    else {
5383      int index = 0;
5384      if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(ParamD))
5385        index = TTP->getIndex();
5386      else if (NonTypeTemplateParmDecl *NTTP
5387                                  = dyn_cast<NonTypeTemplateParmDecl>(ParamD))
5388        index = NTTP->getIndex();
5389      else
5390        index = cast<TemplateTemplateParmDecl>(ParamD)->getIndex();
5391      S.Diag(Fn->getLocation(),
5392             diag::note_ovl_candidate_explicit_arg_mismatch_unnamed)
5393        << (index + 1);
5394    }
5395    return;
5396
5397  case Sema::TDK_TooManyArguments:
5398  case Sema::TDK_TooFewArguments:
5399    DiagnoseArityMismatch(S, Cand, NumArgs);
5400    return;
5401
5402  case Sema::TDK_InstantiationDepth:
5403    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_instantiation_depth);
5404    return;
5405
5406  case Sema::TDK_SubstitutionFailure: {
5407    std::string ArgString;
5408    if (TemplateArgumentList *Args
5409                            = Cand->DeductionFailure.getTemplateArgumentList())
5410      ArgString = S.getTemplateArgumentBindingsText(
5411                    Fn->getDescribedFunctionTemplate()->getTemplateParameters(),
5412                                                    *Args);
5413    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_substitution_failure)
5414      << ArgString;
5415    return;
5416  }
5417
5418  // TODO: diagnose these individually, then kill off
5419  // note_ovl_candidate_bad_deduction, which is uselessly vague.
5420  case Sema::TDK_NonDeducedMismatch:
5421  case Sema::TDK_FailedOverloadResolution:
5422    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_deduction);
5423    return;
5424  }
5425}
5426
5427/// Generates a 'note' diagnostic for an overload candidate.  We've
5428/// already generated a primary error at the call site.
5429///
5430/// It really does need to be a single diagnostic with its caret
5431/// pointed at the candidate declaration.  Yes, this creates some
5432/// major challenges of technical writing.  Yes, this makes pointing
5433/// out problems with specific arguments quite awkward.  It's still
5434/// better than generating twenty screens of text for every failed
5435/// overload.
5436///
5437/// It would be great to be able to express per-candidate problems
5438/// more richly for those diagnostic clients that cared, but we'd
5439/// still have to be just as careful with the default diagnostics.
5440void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand,
5441                           Expr **Args, unsigned NumArgs) {
5442  FunctionDecl *Fn = Cand->Function;
5443
5444  // Note deleted candidates, but only if they're viable.
5445  if (Cand->Viable && (Fn->isDeleted() || Fn->hasAttr<UnavailableAttr>())) {
5446    std::string FnDesc;
5447    OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
5448
5449    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_deleted)
5450      << FnKind << FnDesc << Fn->isDeleted();
5451    return;
5452  }
5453
5454  // We don't really have anything else to say about viable candidates.
5455  if (Cand->Viable) {
5456    S.NoteOverloadCandidate(Fn);
5457    return;
5458  }
5459
5460  switch (Cand->FailureKind) {
5461  case ovl_fail_too_many_arguments:
5462  case ovl_fail_too_few_arguments:
5463    return DiagnoseArityMismatch(S, Cand, NumArgs);
5464
5465  case ovl_fail_bad_deduction:
5466    return DiagnoseBadDeduction(S, Cand, Args, NumArgs);
5467
5468  case ovl_fail_trivial_conversion:
5469  case ovl_fail_bad_final_conversion:
5470  case ovl_fail_final_conversion_not_exact:
5471    return S.NoteOverloadCandidate(Fn);
5472
5473  case ovl_fail_bad_conversion: {
5474    unsigned I = (Cand->IgnoreObjectArgument ? 1 : 0);
5475    for (unsigned N = Cand->Conversions.size(); I != N; ++I)
5476      if (Cand->Conversions[I].isBad())
5477        return DiagnoseBadConversion(S, Cand, I);
5478
5479    // FIXME: this currently happens when we're called from SemaInit
5480    // when user-conversion overload fails.  Figure out how to handle
5481    // those conditions and diagnose them well.
5482    return S.NoteOverloadCandidate(Fn);
5483  }
5484  }
5485}
5486
5487void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) {
5488  // Desugar the type of the surrogate down to a function type,
5489  // retaining as many typedefs as possible while still showing
5490  // the function type (and, therefore, its parameter types).
5491  QualType FnType = Cand->Surrogate->getConversionType();
5492  bool isLValueReference = false;
5493  bool isRValueReference = false;
5494  bool isPointer = false;
5495  if (const LValueReferenceType *FnTypeRef =
5496        FnType->getAs<LValueReferenceType>()) {
5497    FnType = FnTypeRef->getPointeeType();
5498    isLValueReference = true;
5499  } else if (const RValueReferenceType *FnTypeRef =
5500               FnType->getAs<RValueReferenceType>()) {
5501    FnType = FnTypeRef->getPointeeType();
5502    isRValueReference = true;
5503  }
5504  if (const PointerType *FnTypePtr = FnType->getAs<PointerType>()) {
5505    FnType = FnTypePtr->getPointeeType();
5506    isPointer = true;
5507  }
5508  // Desugar down to a function type.
5509  FnType = QualType(FnType->getAs<FunctionType>(), 0);
5510  // Reconstruct the pointer/reference as appropriate.
5511  if (isPointer) FnType = S.Context.getPointerType(FnType);
5512  if (isRValueReference) FnType = S.Context.getRValueReferenceType(FnType);
5513  if (isLValueReference) FnType = S.Context.getLValueReferenceType(FnType);
5514
5515  S.Diag(Cand->Surrogate->getLocation(), diag::note_ovl_surrogate_cand)
5516    << FnType;
5517}
5518
5519void NoteBuiltinOperatorCandidate(Sema &S,
5520                                  const char *Opc,
5521                                  SourceLocation OpLoc,
5522                                  OverloadCandidate *Cand) {
5523  assert(Cand->Conversions.size() <= 2 && "builtin operator is not binary");
5524  std::string TypeStr("operator");
5525  TypeStr += Opc;
5526  TypeStr += "(";
5527  TypeStr += Cand->BuiltinTypes.ParamTypes[0].getAsString();
5528  if (Cand->Conversions.size() == 1) {
5529    TypeStr += ")";
5530    S.Diag(OpLoc, diag::note_ovl_builtin_unary_candidate) << TypeStr;
5531  } else {
5532    TypeStr += ", ";
5533    TypeStr += Cand->BuiltinTypes.ParamTypes[1].getAsString();
5534    TypeStr += ")";
5535    S.Diag(OpLoc, diag::note_ovl_builtin_binary_candidate) << TypeStr;
5536  }
5537}
5538
5539void NoteAmbiguousUserConversions(Sema &S, SourceLocation OpLoc,
5540                                  OverloadCandidate *Cand) {
5541  unsigned NoOperands = Cand->Conversions.size();
5542  for (unsigned ArgIdx = 0; ArgIdx < NoOperands; ++ArgIdx) {
5543    const ImplicitConversionSequence &ICS = Cand->Conversions[ArgIdx];
5544    if (ICS.isBad()) break; // all meaningless after first invalid
5545    if (!ICS.isAmbiguous()) continue;
5546
5547    S.DiagnoseAmbiguousConversion(ICS, OpLoc,
5548                              S.PDiag(diag::note_ambiguous_type_conversion));
5549  }
5550}
5551
5552SourceLocation GetLocationForCandidate(const OverloadCandidate *Cand) {
5553  if (Cand->Function)
5554    return Cand->Function->getLocation();
5555  if (Cand->IsSurrogate)
5556    return Cand->Surrogate->getLocation();
5557  return SourceLocation();
5558}
5559
5560struct CompareOverloadCandidatesForDisplay {
5561  Sema &S;
5562  CompareOverloadCandidatesForDisplay(Sema &S) : S(S) {}
5563
5564  bool operator()(const OverloadCandidate *L,
5565                  const OverloadCandidate *R) {
5566    // Fast-path this check.
5567    if (L == R) return false;
5568
5569    // Order first by viability.
5570    if (L->Viable) {
5571      if (!R->Viable) return true;
5572
5573      // TODO: introduce a tri-valued comparison for overload
5574      // candidates.  Would be more worthwhile if we had a sort
5575      // that could exploit it.
5576      if (S.isBetterOverloadCandidate(*L, *R, SourceLocation())) return true;
5577      if (S.isBetterOverloadCandidate(*R, *L, SourceLocation())) return false;
5578    } else if (R->Viable)
5579      return false;
5580
5581    assert(L->Viable == R->Viable);
5582
5583    // Criteria by which we can sort non-viable candidates:
5584    if (!L->Viable) {
5585      // 1. Arity mismatches come after other candidates.
5586      if (L->FailureKind == ovl_fail_too_many_arguments ||
5587          L->FailureKind == ovl_fail_too_few_arguments)
5588        return false;
5589      if (R->FailureKind == ovl_fail_too_many_arguments ||
5590          R->FailureKind == ovl_fail_too_few_arguments)
5591        return true;
5592
5593      // 2. Bad conversions come first and are ordered by the number
5594      // of bad conversions and quality of good conversions.
5595      if (L->FailureKind == ovl_fail_bad_conversion) {
5596        if (R->FailureKind != ovl_fail_bad_conversion)
5597          return true;
5598
5599        // If there's any ordering between the defined conversions...
5600        // FIXME: this might not be transitive.
5601        assert(L->Conversions.size() == R->Conversions.size());
5602
5603        int leftBetter = 0;
5604        unsigned I = (L->IgnoreObjectArgument || R->IgnoreObjectArgument);
5605        for (unsigned E = L->Conversions.size(); I != E; ++I) {
5606          switch (S.CompareImplicitConversionSequences(L->Conversions[I],
5607                                                       R->Conversions[I])) {
5608          case ImplicitConversionSequence::Better:
5609            leftBetter++;
5610            break;
5611
5612          case ImplicitConversionSequence::Worse:
5613            leftBetter--;
5614            break;
5615
5616          case ImplicitConversionSequence::Indistinguishable:
5617            break;
5618          }
5619        }
5620        if (leftBetter > 0) return true;
5621        if (leftBetter < 0) return false;
5622
5623      } else if (R->FailureKind == ovl_fail_bad_conversion)
5624        return false;
5625
5626      // TODO: others?
5627    }
5628
5629    // Sort everything else by location.
5630    SourceLocation LLoc = GetLocationForCandidate(L);
5631    SourceLocation RLoc = GetLocationForCandidate(R);
5632
5633    // Put candidates without locations (e.g. builtins) at the end.
5634    if (LLoc.isInvalid()) return false;
5635    if (RLoc.isInvalid()) return true;
5636
5637    return S.SourceMgr.isBeforeInTranslationUnit(LLoc, RLoc);
5638  }
5639};
5640
5641/// CompleteNonViableCandidate - Normally, overload resolution only
5642/// computes up to the first
5643void CompleteNonViableCandidate(Sema &S, OverloadCandidate *Cand,
5644                                Expr **Args, unsigned NumArgs) {
5645  assert(!Cand->Viable);
5646
5647  // Don't do anything on failures other than bad conversion.
5648  if (Cand->FailureKind != ovl_fail_bad_conversion) return;
5649
5650  // Skip forward to the first bad conversion.
5651  unsigned ConvIdx = (Cand->IgnoreObjectArgument ? 1 : 0);
5652  unsigned ConvCount = Cand->Conversions.size();
5653  while (true) {
5654    assert(ConvIdx != ConvCount && "no bad conversion in candidate");
5655    ConvIdx++;
5656    if (Cand->Conversions[ConvIdx - 1].isBad())
5657      break;
5658  }
5659
5660  if (ConvIdx == ConvCount)
5661    return;
5662
5663  assert(!Cand->Conversions[ConvIdx].isInitialized() &&
5664         "remaining conversion is initialized?");
5665
5666  // FIXME: this should probably be preserved from the overload
5667  // operation somehow.
5668  bool SuppressUserConversions = false;
5669
5670  const FunctionProtoType* Proto;
5671  unsigned ArgIdx = ConvIdx;
5672
5673  if (Cand->IsSurrogate) {
5674    QualType ConvType
5675      = Cand->Surrogate->getConversionType().getNonReferenceType();
5676    if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
5677      ConvType = ConvPtrType->getPointeeType();
5678    Proto = ConvType->getAs<FunctionProtoType>();
5679    ArgIdx--;
5680  } else if (Cand->Function) {
5681    Proto = Cand->Function->getType()->getAs<FunctionProtoType>();
5682    if (isa<CXXMethodDecl>(Cand->Function) &&
5683        !isa<CXXConstructorDecl>(Cand->Function))
5684      ArgIdx--;
5685  } else {
5686    // Builtin binary operator with a bad first conversion.
5687    assert(ConvCount <= 3);
5688    for (; ConvIdx != ConvCount; ++ConvIdx)
5689      Cand->Conversions[ConvIdx]
5690        = TryCopyInitialization(S, Args[ConvIdx],
5691                                Cand->BuiltinTypes.ParamTypes[ConvIdx],
5692                                SuppressUserConversions,
5693                                /*InOverloadResolution*/ true);
5694    return;
5695  }
5696
5697  // Fill in the rest of the conversions.
5698  unsigned NumArgsInProto = Proto->getNumArgs();
5699  for (; ConvIdx != ConvCount; ++ConvIdx, ++ArgIdx) {
5700    if (ArgIdx < NumArgsInProto)
5701      Cand->Conversions[ConvIdx]
5702        = TryCopyInitialization(S, Args[ArgIdx], Proto->getArgType(ArgIdx),
5703                                SuppressUserConversions,
5704                                /*InOverloadResolution=*/true);
5705    else
5706      Cand->Conversions[ConvIdx].setEllipsis();
5707  }
5708}
5709
5710} // end anonymous namespace
5711
5712/// PrintOverloadCandidates - When overload resolution fails, prints
5713/// diagnostic messages containing the candidates in the candidate
5714/// set.
5715void
5716Sema::PrintOverloadCandidates(OverloadCandidateSet& CandidateSet,
5717                              OverloadCandidateDisplayKind OCD,
5718                              Expr **Args, unsigned NumArgs,
5719                              const char *Opc,
5720                              SourceLocation OpLoc) {
5721  // Sort the candidates by viability and position.  Sorting directly would
5722  // be prohibitive, so we make a set of pointers and sort those.
5723  llvm::SmallVector<OverloadCandidate*, 32> Cands;
5724  if (OCD == OCD_AllCandidates) Cands.reserve(CandidateSet.size());
5725  for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(),
5726                                  LastCand = CandidateSet.end();
5727       Cand != LastCand; ++Cand) {
5728    if (Cand->Viable)
5729      Cands.push_back(Cand);
5730    else if (OCD == OCD_AllCandidates) {
5731      CompleteNonViableCandidate(*this, Cand, Args, NumArgs);
5732      if (Cand->Function || Cand->IsSurrogate)
5733        Cands.push_back(Cand);
5734      // Otherwise, this a non-viable builtin candidate.  We do not, in general,
5735      // want to list every possible builtin candidate.
5736    }
5737  }
5738
5739  std::sort(Cands.begin(), Cands.end(),
5740            CompareOverloadCandidatesForDisplay(*this));
5741
5742  bool ReportedAmbiguousConversions = false;
5743
5744  llvm::SmallVectorImpl<OverloadCandidate*>::iterator I, E;
5745  const Diagnostic::OverloadsShown ShowOverloads = Diags.getShowOverloads();
5746  unsigned CandsShown = 0;
5747  for (I = Cands.begin(), E = Cands.end(); I != E; ++I) {
5748    OverloadCandidate *Cand = *I;
5749
5750    // Set an arbitrary limit on the number of candidate functions we'll spam
5751    // the user with.  FIXME: This limit should depend on details of the
5752    // candidate list.
5753    if (CandsShown >= 4 && ShowOverloads == Diagnostic::Ovl_Best) {
5754      break;
5755    }
5756    ++CandsShown;
5757
5758    if (Cand->Function)
5759      NoteFunctionCandidate(*this, Cand, Args, NumArgs);
5760    else if (Cand->IsSurrogate)
5761      NoteSurrogateCandidate(*this, Cand);
5762    else {
5763      assert(Cand->Viable &&
5764             "Non-viable built-in candidates are not added to Cands.");
5765      // Generally we only see ambiguities including viable builtin
5766      // operators if overload resolution got screwed up by an
5767      // ambiguous user-defined conversion.
5768      //
5769      // FIXME: It's quite possible for different conversions to see
5770      // different ambiguities, though.
5771      if (!ReportedAmbiguousConversions) {
5772        NoteAmbiguousUserConversions(*this, OpLoc, Cand);
5773        ReportedAmbiguousConversions = true;
5774      }
5775
5776      // If this is a viable builtin, print it.
5777      NoteBuiltinOperatorCandidate(*this, Opc, OpLoc, Cand);
5778    }
5779  }
5780
5781  if (I != E)
5782    Diag(OpLoc, diag::note_ovl_too_many_candidates) << int(E - I);
5783}
5784
5785static bool CheckUnresolvedAccess(Sema &S, OverloadExpr *E, DeclAccessPair D) {
5786  if (isa<UnresolvedLookupExpr>(E))
5787    return S.CheckUnresolvedLookupAccess(cast<UnresolvedLookupExpr>(E), D);
5788
5789  return S.CheckUnresolvedMemberAccess(cast<UnresolvedMemberExpr>(E), D);
5790}
5791
5792/// ResolveAddressOfOverloadedFunction - Try to resolve the address of
5793/// an overloaded function (C++ [over.over]), where @p From is an
5794/// expression with overloaded function type and @p ToType is the type
5795/// we're trying to resolve to. For example:
5796///
5797/// @code
5798/// int f(double);
5799/// int f(int);
5800///
5801/// int (*pfd)(double) = f; // selects f(double)
5802/// @endcode
5803///
5804/// This routine returns the resulting FunctionDecl if it could be
5805/// resolved, and NULL otherwise. When @p Complain is true, this
5806/// routine will emit diagnostics if there is an error.
5807FunctionDecl *
5808Sema::ResolveAddressOfOverloadedFunction(Expr *From, QualType ToType,
5809                                         bool Complain,
5810                                         DeclAccessPair &FoundResult) {
5811  QualType FunctionType = ToType;
5812  bool IsMember = false;
5813  if (const PointerType *ToTypePtr = ToType->getAs<PointerType>())
5814    FunctionType = ToTypePtr->getPointeeType();
5815  else if (const ReferenceType *ToTypeRef = ToType->getAs<ReferenceType>())
5816    FunctionType = ToTypeRef->getPointeeType();
5817  else if (const MemberPointerType *MemTypePtr =
5818                    ToType->getAs<MemberPointerType>()) {
5819    FunctionType = MemTypePtr->getPointeeType();
5820    IsMember = true;
5821  }
5822
5823  // C++ [over.over]p1:
5824  //   [...] [Note: any redundant set of parentheses surrounding the
5825  //   overloaded function name is ignored (5.1). ]
5826  // C++ [over.over]p1:
5827  //   [...] The overloaded function name can be preceded by the &
5828  //   operator.
5829  OverloadExpr *OvlExpr = OverloadExpr::find(From).getPointer();
5830  TemplateArgumentListInfo ETABuffer, *ExplicitTemplateArgs = 0;
5831  if (OvlExpr->hasExplicitTemplateArgs()) {
5832    OvlExpr->getExplicitTemplateArgs().copyInto(ETABuffer);
5833    ExplicitTemplateArgs = &ETABuffer;
5834  }
5835
5836  // We expect a pointer or reference to function, or a function pointer.
5837  FunctionType = Context.getCanonicalType(FunctionType).getUnqualifiedType();
5838  if (!FunctionType->isFunctionType()) {
5839    if (Complain)
5840      Diag(From->getLocStart(), diag::err_addr_ovl_not_func_ptrref)
5841        << OvlExpr->getName() << ToType;
5842
5843    return 0;
5844  }
5845
5846  assert(From->getType() == Context.OverloadTy);
5847
5848  // Look through all of the overloaded functions, searching for one
5849  // whose type matches exactly.
5850  llvm::SmallVector<std::pair<DeclAccessPair, FunctionDecl*>, 4> Matches;
5851  llvm::SmallVector<FunctionDecl *, 4> NonMatches;
5852
5853  bool FoundNonTemplateFunction = false;
5854  for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
5855         E = OvlExpr->decls_end(); I != E; ++I) {
5856    // Look through any using declarations to find the underlying function.
5857    NamedDecl *Fn = (*I)->getUnderlyingDecl();
5858
5859    // C++ [over.over]p3:
5860    //   Non-member functions and static member functions match
5861    //   targets of type "pointer-to-function" or "reference-to-function."
5862    //   Nonstatic member functions match targets of
5863    //   type "pointer-to-member-function."
5864    // Note that according to DR 247, the containing class does not matter.
5865
5866    if (FunctionTemplateDecl *FunctionTemplate
5867          = dyn_cast<FunctionTemplateDecl>(Fn)) {
5868      if (CXXMethodDecl *Method
5869            = dyn_cast<CXXMethodDecl>(FunctionTemplate->getTemplatedDecl())) {
5870        // Skip non-static function templates when converting to pointer, and
5871        // static when converting to member pointer.
5872        if (Method->isStatic() == IsMember)
5873          continue;
5874      } else if (IsMember)
5875        continue;
5876
5877      // C++ [over.over]p2:
5878      //   If the name is a function template, template argument deduction is
5879      //   done (14.8.2.2), and if the argument deduction succeeds, the
5880      //   resulting template argument list is used to generate a single
5881      //   function template specialization, which is added to the set of
5882      //   overloaded functions considered.
5883      // FIXME: We don't really want to build the specialization here, do we?
5884      FunctionDecl *Specialization = 0;
5885      TemplateDeductionInfo Info(Context, OvlExpr->getNameLoc());
5886      if (TemplateDeductionResult Result
5887            = DeduceTemplateArguments(FunctionTemplate, ExplicitTemplateArgs,
5888                                      FunctionType, Specialization, Info)) {
5889        // FIXME: make a note of the failed deduction for diagnostics.
5890        (void)Result;
5891      } else {
5892        // FIXME: If the match isn't exact, shouldn't we just drop this as
5893        // a candidate? Find a testcase before changing the code.
5894        assert(FunctionType
5895                 == Context.getCanonicalType(Specialization->getType()));
5896        Matches.push_back(std::make_pair(I.getPair(),
5897                    cast<FunctionDecl>(Specialization->getCanonicalDecl())));
5898      }
5899
5900      continue;
5901    }
5902
5903    if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
5904      // Skip non-static functions when converting to pointer, and static
5905      // when converting to member pointer.
5906      if (Method->isStatic() == IsMember)
5907        continue;
5908
5909      // If we have explicit template arguments, skip non-templates.
5910      if (OvlExpr->hasExplicitTemplateArgs())
5911        continue;
5912    } else if (IsMember)
5913      continue;
5914
5915    if (FunctionDecl *FunDecl = dyn_cast<FunctionDecl>(Fn)) {
5916      QualType ResultTy;
5917      if (Context.hasSameUnqualifiedType(FunctionType, FunDecl->getType()) ||
5918          IsNoReturnConversion(Context, FunDecl->getType(), FunctionType,
5919                               ResultTy)) {
5920        Matches.push_back(std::make_pair(I.getPair(),
5921                           cast<FunctionDecl>(FunDecl->getCanonicalDecl())));
5922        FoundNonTemplateFunction = true;
5923      }
5924    }
5925  }
5926
5927  // If there were 0 or 1 matches, we're done.
5928  if (Matches.empty()) {
5929    if (Complain) {
5930      Diag(From->getLocStart(), diag::err_addr_ovl_no_viable)
5931        << OvlExpr->getName() << FunctionType;
5932      for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
5933                                 E = OvlExpr->decls_end();
5934           I != E; ++I)
5935        if (FunctionDecl *F = dyn_cast<FunctionDecl>((*I)->getUnderlyingDecl()))
5936          NoteOverloadCandidate(F);
5937    }
5938
5939    return 0;
5940  } else if (Matches.size() == 1) {
5941    FunctionDecl *Result = Matches[0].second;
5942    FoundResult = Matches[0].first;
5943    MarkDeclarationReferenced(From->getLocStart(), Result);
5944    if (Complain)
5945      CheckAddressOfMemberAccess(OvlExpr, Matches[0].first);
5946    return Result;
5947  }
5948
5949  // C++ [over.over]p4:
5950  //   If more than one function is selected, [...]
5951  if (!FoundNonTemplateFunction) {
5952    //   [...] and any given function template specialization F1 is
5953    //   eliminated if the set contains a second function template
5954    //   specialization whose function template is more specialized
5955    //   than the function template of F1 according to the partial
5956    //   ordering rules of 14.5.5.2.
5957
5958    // The algorithm specified above is quadratic. We instead use a
5959    // two-pass algorithm (similar to the one used to identify the
5960    // best viable function in an overload set) that identifies the
5961    // best function template (if it exists).
5962
5963    UnresolvedSet<4> MatchesCopy; // TODO: avoid!
5964    for (unsigned I = 0, E = Matches.size(); I != E; ++I)
5965      MatchesCopy.addDecl(Matches[I].second, Matches[I].first.getAccess());
5966
5967    UnresolvedSetIterator Result =
5968        getMostSpecialized(MatchesCopy.begin(), MatchesCopy.end(),
5969                           TPOC_Other, From->getLocStart(),
5970                           PDiag(),
5971                           PDiag(diag::err_addr_ovl_ambiguous)
5972                               << Matches[0].second->getDeclName(),
5973                           PDiag(diag::note_ovl_candidate)
5974                               << (unsigned) oc_function_template);
5975    assert(Result != MatchesCopy.end() && "no most-specialized template");
5976    MarkDeclarationReferenced(From->getLocStart(), *Result);
5977    FoundResult = Matches[Result - MatchesCopy.begin()].first;
5978    if (Complain) {
5979      CheckUnresolvedAccess(*this, OvlExpr, FoundResult);
5980      DiagnoseUseOfDecl(FoundResult, OvlExpr->getNameLoc());
5981    }
5982    return cast<FunctionDecl>(*Result);
5983  }
5984
5985  //   [...] any function template specializations in the set are
5986  //   eliminated if the set also contains a non-template function, [...]
5987  for (unsigned I = 0, N = Matches.size(); I != N; ) {
5988    if (Matches[I].second->getPrimaryTemplate() == 0)
5989      ++I;
5990    else {
5991      Matches[I] = Matches[--N];
5992      Matches.set_size(N);
5993    }
5994  }
5995
5996  // [...] After such eliminations, if any, there shall remain exactly one
5997  // selected function.
5998  if (Matches.size() == 1) {
5999    MarkDeclarationReferenced(From->getLocStart(), Matches[0].second);
6000    FoundResult = Matches[0].first;
6001    if (Complain) {
6002      CheckUnresolvedAccess(*this, OvlExpr, Matches[0].first);
6003      DiagnoseUseOfDecl(Matches[0].first, OvlExpr->getNameLoc());
6004    }
6005    return cast<FunctionDecl>(Matches[0].second);
6006  }
6007
6008  // FIXME: We should probably return the same thing that BestViableFunction
6009  // returns (even if we issue the diagnostics here).
6010  Diag(From->getLocStart(), diag::err_addr_ovl_ambiguous)
6011    << Matches[0].second->getDeclName();
6012  for (unsigned I = 0, E = Matches.size(); I != E; ++I)
6013    NoteOverloadCandidate(Matches[I].second);
6014  return 0;
6015}
6016
6017/// \brief Given an expression that refers to an overloaded function, try to
6018/// resolve that overloaded function expression down to a single function.
6019///
6020/// This routine can only resolve template-ids that refer to a single function
6021/// template, where that template-id refers to a single template whose template
6022/// arguments are either provided by the template-id or have defaults,
6023/// as described in C++0x [temp.arg.explicit]p3.
6024FunctionDecl *Sema::ResolveSingleFunctionTemplateSpecialization(Expr *From) {
6025  // C++ [over.over]p1:
6026  //   [...] [Note: any redundant set of parentheses surrounding the
6027  //   overloaded function name is ignored (5.1). ]
6028  // C++ [over.over]p1:
6029  //   [...] The overloaded function name can be preceded by the &
6030  //   operator.
6031
6032  if (From->getType() != Context.OverloadTy)
6033    return 0;
6034
6035  OverloadExpr *OvlExpr = OverloadExpr::find(From).getPointer();
6036
6037  // If we didn't actually find any template-ids, we're done.
6038  if (!OvlExpr->hasExplicitTemplateArgs())
6039    return 0;
6040
6041  TemplateArgumentListInfo ExplicitTemplateArgs;
6042  OvlExpr->getExplicitTemplateArgs().copyInto(ExplicitTemplateArgs);
6043
6044  // Look through all of the overloaded functions, searching for one
6045  // whose type matches exactly.
6046  FunctionDecl *Matched = 0;
6047  for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
6048         E = OvlExpr->decls_end(); I != E; ++I) {
6049    // C++0x [temp.arg.explicit]p3:
6050    //   [...] In contexts where deduction is done and fails, or in contexts
6051    //   where deduction is not done, if a template argument list is
6052    //   specified and it, along with any default template arguments,
6053    //   identifies a single function template specialization, then the
6054    //   template-id is an lvalue for the function template specialization.
6055    FunctionTemplateDecl *FunctionTemplate = cast<FunctionTemplateDecl>(*I);
6056
6057    // C++ [over.over]p2:
6058    //   If the name is a function template, template argument deduction is
6059    //   done (14.8.2.2), and if the argument deduction succeeds, the
6060    //   resulting template argument list is used to generate a single
6061    //   function template specialization, which is added to the set of
6062    //   overloaded functions considered.
6063    FunctionDecl *Specialization = 0;
6064    TemplateDeductionInfo Info(Context, OvlExpr->getNameLoc());
6065    if (TemplateDeductionResult Result
6066          = DeduceTemplateArguments(FunctionTemplate, &ExplicitTemplateArgs,
6067                                    Specialization, Info)) {
6068      // FIXME: make a note of the failed deduction for diagnostics.
6069      (void)Result;
6070      continue;
6071    }
6072
6073    // Multiple matches; we can't resolve to a single declaration.
6074    if (Matched)
6075      return 0;
6076
6077    Matched = Specialization;
6078  }
6079
6080  return Matched;
6081}
6082
6083/// \brief Add a single candidate to the overload set.
6084static void AddOverloadedCallCandidate(Sema &S,
6085                                       DeclAccessPair FoundDecl,
6086                       const TemplateArgumentListInfo *ExplicitTemplateArgs,
6087                                       Expr **Args, unsigned NumArgs,
6088                                       OverloadCandidateSet &CandidateSet,
6089                                       bool PartialOverloading) {
6090  NamedDecl *Callee = FoundDecl.getDecl();
6091  if (isa<UsingShadowDecl>(Callee))
6092    Callee = cast<UsingShadowDecl>(Callee)->getTargetDecl();
6093
6094  if (FunctionDecl *Func = dyn_cast<FunctionDecl>(Callee)) {
6095    assert(!ExplicitTemplateArgs && "Explicit template arguments?");
6096    S.AddOverloadCandidate(Func, FoundDecl, Args, NumArgs, CandidateSet,
6097                           false, PartialOverloading);
6098    return;
6099  }
6100
6101  if (FunctionTemplateDecl *FuncTemplate
6102      = dyn_cast<FunctionTemplateDecl>(Callee)) {
6103    S.AddTemplateOverloadCandidate(FuncTemplate, FoundDecl,
6104                                   ExplicitTemplateArgs,
6105                                   Args, NumArgs, CandidateSet);
6106    return;
6107  }
6108
6109  assert(false && "unhandled case in overloaded call candidate");
6110
6111  // do nothing?
6112}
6113
6114/// \brief Add the overload candidates named by callee and/or found by argument
6115/// dependent lookup to the given overload set.
6116void Sema::AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE,
6117                                       Expr **Args, unsigned NumArgs,
6118                                       OverloadCandidateSet &CandidateSet,
6119                                       bool PartialOverloading) {
6120
6121#ifndef NDEBUG
6122  // Verify that ArgumentDependentLookup is consistent with the rules
6123  // in C++0x [basic.lookup.argdep]p3:
6124  //
6125  //   Let X be the lookup set produced by unqualified lookup (3.4.1)
6126  //   and let Y be the lookup set produced by argument dependent
6127  //   lookup (defined as follows). If X contains
6128  //
6129  //     -- a declaration of a class member, or
6130  //
6131  //     -- a block-scope function declaration that is not a
6132  //        using-declaration, or
6133  //
6134  //     -- a declaration that is neither a function or a function
6135  //        template
6136  //
6137  //   then Y is empty.
6138
6139  if (ULE->requiresADL()) {
6140    for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
6141           E = ULE->decls_end(); I != E; ++I) {
6142      assert(!(*I)->getDeclContext()->isRecord());
6143      assert(isa<UsingShadowDecl>(*I) ||
6144             !(*I)->getDeclContext()->isFunctionOrMethod());
6145      assert((*I)->getUnderlyingDecl()->isFunctionOrFunctionTemplate());
6146    }
6147  }
6148#endif
6149
6150  // It would be nice to avoid this copy.
6151  TemplateArgumentListInfo TABuffer;
6152  const TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
6153  if (ULE->hasExplicitTemplateArgs()) {
6154    ULE->copyTemplateArgumentsInto(TABuffer);
6155    ExplicitTemplateArgs = &TABuffer;
6156  }
6157
6158  for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
6159         E = ULE->decls_end(); I != E; ++I)
6160    AddOverloadedCallCandidate(*this, I.getPair(), ExplicitTemplateArgs,
6161                               Args, NumArgs, CandidateSet,
6162                               PartialOverloading);
6163
6164  if (ULE->requiresADL())
6165    AddArgumentDependentLookupCandidates(ULE->getName(), /*Operator*/ false,
6166                                         Args, NumArgs,
6167                                         ExplicitTemplateArgs,
6168                                         CandidateSet,
6169                                         PartialOverloading);
6170}
6171
6172static Sema::OwningExprResult Destroy(Sema &SemaRef, Expr *Fn,
6173                                      Expr **Args, unsigned NumArgs) {
6174  Fn->Destroy(SemaRef.Context);
6175  for (unsigned Arg = 0; Arg < NumArgs; ++Arg)
6176    Args[Arg]->Destroy(SemaRef.Context);
6177  return SemaRef.ExprError();
6178}
6179
6180/// Attempts to recover from a call where no functions were found.
6181///
6182/// Returns true if new candidates were found.
6183static Sema::OwningExprResult
6184BuildRecoveryCallExpr(Sema &SemaRef, Scope *S, Expr *Fn,
6185                      UnresolvedLookupExpr *ULE,
6186                      SourceLocation LParenLoc,
6187                      Expr **Args, unsigned NumArgs,
6188                      SourceLocation *CommaLocs,
6189                      SourceLocation RParenLoc) {
6190
6191  CXXScopeSpec SS;
6192  if (ULE->getQualifier()) {
6193    SS.setScopeRep(ULE->getQualifier());
6194    SS.setRange(ULE->getQualifierRange());
6195  }
6196
6197  TemplateArgumentListInfo TABuffer;
6198  const TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
6199  if (ULE->hasExplicitTemplateArgs()) {
6200    ULE->copyTemplateArgumentsInto(TABuffer);
6201    ExplicitTemplateArgs = &TABuffer;
6202  }
6203
6204  LookupResult R(SemaRef, ULE->getName(), ULE->getNameLoc(),
6205                 Sema::LookupOrdinaryName);
6206  if (SemaRef.DiagnoseEmptyLookup(S, SS, R, Sema::CTC_Expression))
6207    return Destroy(SemaRef, Fn, Args, NumArgs);
6208
6209  assert(!R.empty() && "lookup results empty despite recovery");
6210
6211  // Build an implicit member call if appropriate.  Just drop the
6212  // casts and such from the call, we don't really care.
6213  Sema::OwningExprResult NewFn = SemaRef.ExprError();
6214  if ((*R.begin())->isCXXClassMember())
6215    NewFn = SemaRef.BuildPossibleImplicitMemberExpr(SS, R, ExplicitTemplateArgs);
6216  else if (ExplicitTemplateArgs)
6217    NewFn = SemaRef.BuildTemplateIdExpr(SS, R, false, *ExplicitTemplateArgs);
6218  else
6219    NewFn = SemaRef.BuildDeclarationNameExpr(SS, R, false);
6220
6221  if (NewFn.isInvalid())
6222    return Destroy(SemaRef, Fn, Args, NumArgs);
6223
6224  Fn->Destroy(SemaRef.Context);
6225
6226  // This shouldn't cause an infinite loop because we're giving it
6227  // an expression with non-empty lookup results, which should never
6228  // end up here.
6229  return SemaRef.ActOnCallExpr(/*Scope*/ 0, move(NewFn), LParenLoc,
6230                         Sema::MultiExprArg(SemaRef, (void**) Args, NumArgs),
6231                               CommaLocs, RParenLoc);
6232}
6233
6234/// ResolveOverloadedCallFn - Given the call expression that calls Fn
6235/// (which eventually refers to the declaration Func) and the call
6236/// arguments Args/NumArgs, attempt to resolve the function call down
6237/// to a specific function. If overload resolution succeeds, returns
6238/// the function declaration produced by overload
6239/// resolution. Otherwise, emits diagnostics, deletes all of the
6240/// arguments and Fn, and returns NULL.
6241Sema::OwningExprResult
6242Sema::BuildOverloadedCallExpr(Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE,
6243                              SourceLocation LParenLoc,
6244                              Expr **Args, unsigned NumArgs,
6245                              SourceLocation *CommaLocs,
6246                              SourceLocation RParenLoc) {
6247#ifndef NDEBUG
6248  if (ULE->requiresADL()) {
6249    // To do ADL, we must have found an unqualified name.
6250    assert(!ULE->getQualifier() && "qualified name with ADL");
6251
6252    // We don't perform ADL for implicit declarations of builtins.
6253    // Verify that this was correctly set up.
6254    FunctionDecl *F;
6255    if (ULE->decls_begin() + 1 == ULE->decls_end() &&
6256        (F = dyn_cast<FunctionDecl>(*ULE->decls_begin())) &&
6257        F->getBuiltinID() && F->isImplicit())
6258      assert(0 && "performing ADL for builtin");
6259
6260    // We don't perform ADL in C.
6261    assert(getLangOptions().CPlusPlus && "ADL enabled in C");
6262  }
6263#endif
6264
6265  OverloadCandidateSet CandidateSet(Fn->getExprLoc());
6266
6267  // Add the functions denoted by the callee to the set of candidate
6268  // functions, including those from argument-dependent lookup.
6269  AddOverloadedCallCandidates(ULE, Args, NumArgs, CandidateSet);
6270
6271  // If we found nothing, try to recover.
6272  // AddRecoveryCallCandidates diagnoses the error itself, so we just
6273  // bailout out if it fails.
6274  if (CandidateSet.empty())
6275    return BuildRecoveryCallExpr(*this, S, Fn, ULE, LParenLoc, Args, NumArgs,
6276                                 CommaLocs, RParenLoc);
6277
6278  OverloadCandidateSet::iterator Best;
6279  switch (BestViableFunction(CandidateSet, Fn->getLocStart(), Best)) {
6280  case OR_Success: {
6281    FunctionDecl *FDecl = Best->Function;
6282    CheckUnresolvedLookupAccess(ULE, Best->FoundDecl);
6283    DiagnoseUseOfDecl(Best->FoundDecl, ULE->getNameLoc());
6284    Fn = FixOverloadedFunctionReference(Fn, Best->FoundDecl, FDecl);
6285    return BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, NumArgs, RParenLoc);
6286  }
6287
6288  case OR_No_Viable_Function:
6289    Diag(Fn->getSourceRange().getBegin(),
6290         diag::err_ovl_no_viable_function_in_call)
6291      << ULE->getName() << Fn->getSourceRange();
6292    PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, NumArgs);
6293    break;
6294
6295  case OR_Ambiguous:
6296    Diag(Fn->getSourceRange().getBegin(), diag::err_ovl_ambiguous_call)
6297      << ULE->getName() << Fn->getSourceRange();
6298    PrintOverloadCandidates(CandidateSet, OCD_ViableCandidates, Args, NumArgs);
6299    break;
6300
6301  case OR_Deleted:
6302    Diag(Fn->getSourceRange().getBegin(), diag::err_ovl_deleted_call)
6303      << Best->Function->isDeleted()
6304      << ULE->getName()
6305      << Fn->getSourceRange();
6306    PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, NumArgs);
6307    break;
6308  }
6309
6310  // Overload resolution failed. Destroy all of the subexpressions and
6311  // return NULL.
6312  Fn->Destroy(Context);
6313  for (unsigned Arg = 0; Arg < NumArgs; ++Arg)
6314    Args[Arg]->Destroy(Context);
6315  return ExprError();
6316}
6317
6318static bool IsOverloaded(const UnresolvedSetImpl &Functions) {
6319  return Functions.size() > 1 ||
6320    (Functions.size() == 1 && isa<FunctionTemplateDecl>(*Functions.begin()));
6321}
6322
6323/// \brief Create a unary operation that may resolve to an overloaded
6324/// operator.
6325///
6326/// \param OpLoc The location of the operator itself (e.g., '*').
6327///
6328/// \param OpcIn The UnaryOperator::Opcode that describes this
6329/// operator.
6330///
6331/// \param Functions The set of non-member functions that will be
6332/// considered by overload resolution. The caller needs to build this
6333/// set based on the context using, e.g.,
6334/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
6335/// set should not contain any member functions; those will be added
6336/// by CreateOverloadedUnaryOp().
6337///
6338/// \param input The input argument.
6339Sema::OwningExprResult
6340Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, unsigned OpcIn,
6341                              const UnresolvedSetImpl &Fns,
6342                              ExprArg input) {
6343  UnaryOperator::Opcode Opc = static_cast<UnaryOperator::Opcode>(OpcIn);
6344  Expr *Input = (Expr *)input.get();
6345
6346  OverloadedOperatorKind Op = UnaryOperator::getOverloadedOperator(Opc);
6347  assert(Op != OO_None && "Invalid opcode for overloaded unary operator");
6348  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
6349
6350  Expr *Args[2] = { Input, 0 };
6351  unsigned NumArgs = 1;
6352
6353  // For post-increment and post-decrement, add the implicit '0' as
6354  // the second argument, so that we know this is a post-increment or
6355  // post-decrement.
6356  if (Opc == UnaryOperator::PostInc || Opc == UnaryOperator::PostDec) {
6357    llvm::APSInt Zero(Context.getTypeSize(Context.IntTy), false);
6358    Args[1] = new (Context) IntegerLiteral(Zero, Context.IntTy,
6359                                           SourceLocation());
6360    NumArgs = 2;
6361  }
6362
6363  if (Input->isTypeDependent()) {
6364    CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
6365    UnresolvedLookupExpr *Fn
6366      = UnresolvedLookupExpr::Create(Context, /*Dependent*/ true, NamingClass,
6367                                     0, SourceRange(), OpName, OpLoc,
6368                                     /*ADL*/ true, IsOverloaded(Fns),
6369                                     Fns.begin(), Fns.end());
6370    input.release();
6371    return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn,
6372                                                   &Args[0], NumArgs,
6373                                                   Context.DependentTy,
6374                                                   OpLoc));
6375  }
6376
6377  // Build an empty overload set.
6378  OverloadCandidateSet CandidateSet(OpLoc);
6379
6380  // Add the candidates from the given function set.
6381  AddFunctionCandidates(Fns, &Args[0], NumArgs, CandidateSet, false);
6382
6383  // Add operator candidates that are member functions.
6384  AddMemberOperatorCandidates(Op, OpLoc, &Args[0], NumArgs, CandidateSet);
6385
6386  // Add candidates from ADL.
6387  AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true,
6388                                       Args, NumArgs,
6389                                       /*ExplicitTemplateArgs*/ 0,
6390                                       CandidateSet);
6391
6392  // Add builtin operator candidates.
6393  AddBuiltinOperatorCandidates(Op, OpLoc, &Args[0], NumArgs, CandidateSet);
6394
6395  // Perform overload resolution.
6396  OverloadCandidateSet::iterator Best;
6397  switch (BestViableFunction(CandidateSet, OpLoc, Best)) {
6398  case OR_Success: {
6399    // We found a built-in operator or an overloaded operator.
6400    FunctionDecl *FnDecl = Best->Function;
6401
6402    if (FnDecl) {
6403      // We matched an overloaded operator. Build a call to that
6404      // operator.
6405
6406      // Convert the arguments.
6407      if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
6408        CheckMemberOperatorAccess(OpLoc, Args[0], 0, Best->FoundDecl);
6409
6410        if (PerformObjectArgumentInitialization(Input, /*Qualifier=*/0,
6411                                                Best->FoundDecl, Method))
6412          return ExprError();
6413      } else {
6414        // Convert the arguments.
6415        OwningExprResult InputInit
6416          = PerformCopyInitialization(InitializedEntity::InitializeParameter(
6417                                                      FnDecl->getParamDecl(0)),
6418                                      SourceLocation(),
6419                                      move(input));
6420        if (InputInit.isInvalid())
6421          return ExprError();
6422
6423        input = move(InputInit);
6424        Input = (Expr *)input.get();
6425      }
6426
6427      DiagnoseUseOfDecl(Best->FoundDecl, OpLoc);
6428
6429      // Determine the result type
6430      QualType ResultTy = FnDecl->getResultType().getNonReferenceType();
6431
6432      // Build the actual expression node.
6433      Expr *FnExpr = new (Context) DeclRefExpr(FnDecl, FnDecl->getType(),
6434                                               SourceLocation());
6435      UsualUnaryConversions(FnExpr);
6436
6437      input.release();
6438      Args[0] = Input;
6439      ExprOwningPtr<CallExpr> TheCall(this,
6440        new (Context) CXXOperatorCallExpr(Context, Op, FnExpr,
6441                                          Args, NumArgs, ResultTy, OpLoc));
6442
6443      if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall.get(),
6444                              FnDecl))
6445        return ExprError();
6446
6447      return MaybeBindToTemporary(TheCall.release());
6448    } else {
6449      // We matched a built-in operator. Convert the arguments, then
6450      // break out so that we will build the appropriate built-in
6451      // operator node.
6452        if (PerformImplicitConversion(Input, Best->BuiltinTypes.ParamTypes[0],
6453                                      Best->Conversions[0], AA_Passing))
6454          return ExprError();
6455
6456        break;
6457      }
6458    }
6459
6460    case OR_No_Viable_Function:
6461      // No viable function; fall through to handling this as a
6462      // built-in operator, which will produce an error message for us.
6463      break;
6464
6465    case OR_Ambiguous:
6466      Diag(OpLoc,  diag::err_ovl_ambiguous_oper)
6467          << UnaryOperator::getOpcodeStr(Opc)
6468          << Input->getSourceRange();
6469      PrintOverloadCandidates(CandidateSet, OCD_ViableCandidates, Args, NumArgs,
6470                              UnaryOperator::getOpcodeStr(Opc), OpLoc);
6471      return ExprError();
6472
6473    case OR_Deleted:
6474      Diag(OpLoc, diag::err_ovl_deleted_oper)
6475        << Best->Function->isDeleted()
6476        << UnaryOperator::getOpcodeStr(Opc)
6477        << Input->getSourceRange();
6478      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, NumArgs);
6479      return ExprError();
6480    }
6481
6482  // Either we found no viable overloaded operator or we matched a
6483  // built-in operator. In either case, fall through to trying to
6484  // build a built-in operation.
6485  input.release();
6486  return CreateBuiltinUnaryOp(OpLoc, Opc, Owned(Input));
6487}
6488
6489/// \brief Create a binary operation that may resolve to an overloaded
6490/// operator.
6491///
6492/// \param OpLoc The location of the operator itself (e.g., '+').
6493///
6494/// \param OpcIn The BinaryOperator::Opcode that describes this
6495/// operator.
6496///
6497/// \param Functions The set of non-member functions that will be
6498/// considered by overload resolution. The caller needs to build this
6499/// set based on the context using, e.g.,
6500/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
6501/// set should not contain any member functions; those will be added
6502/// by CreateOverloadedBinOp().
6503///
6504/// \param LHS Left-hand argument.
6505/// \param RHS Right-hand argument.
6506Sema::OwningExprResult
6507Sema::CreateOverloadedBinOp(SourceLocation OpLoc,
6508                            unsigned OpcIn,
6509                            const UnresolvedSetImpl &Fns,
6510                            Expr *LHS, Expr *RHS) {
6511  Expr *Args[2] = { LHS, RHS };
6512  LHS=RHS=0; //Please use only Args instead of LHS/RHS couple
6513
6514  BinaryOperator::Opcode Opc = static_cast<BinaryOperator::Opcode>(OpcIn);
6515  OverloadedOperatorKind Op = BinaryOperator::getOverloadedOperator(Opc);
6516  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
6517
6518  // If either side is type-dependent, create an appropriate dependent
6519  // expression.
6520  if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
6521    if (Fns.empty()) {
6522      // If there are no functions to store, just build a dependent
6523      // BinaryOperator or CompoundAssignment.
6524      if (Opc <= BinaryOperator::Assign || Opc > BinaryOperator::OrAssign)
6525        return Owned(new (Context) BinaryOperator(Args[0], Args[1], Opc,
6526                                                  Context.DependentTy, OpLoc));
6527
6528      return Owned(new (Context) CompoundAssignOperator(Args[0], Args[1], Opc,
6529                                                        Context.DependentTy,
6530                                                        Context.DependentTy,
6531                                                        Context.DependentTy,
6532                                                        OpLoc));
6533    }
6534
6535    // FIXME: save results of ADL from here?
6536    CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
6537    UnresolvedLookupExpr *Fn
6538      = UnresolvedLookupExpr::Create(Context, /*Dependent*/ true, NamingClass,
6539                                     0, SourceRange(), OpName, OpLoc,
6540                                     /*ADL*/ true, IsOverloaded(Fns),
6541                                     Fns.begin(), Fns.end());
6542    return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn,
6543                                                   Args, 2,
6544                                                   Context.DependentTy,
6545                                                   OpLoc));
6546  }
6547
6548  // If this is the .* operator, which is not overloadable, just
6549  // create a built-in binary operator.
6550  if (Opc == BinaryOperator::PtrMemD)
6551    return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
6552
6553  // If this is the assignment operator, we only perform overload resolution
6554  // if the left-hand side is a class or enumeration type. This is actually
6555  // a hack. The standard requires that we do overload resolution between the
6556  // various built-in candidates, but as DR507 points out, this can lead to
6557  // problems. So we do it this way, which pretty much follows what GCC does.
6558  // Note that we go the traditional code path for compound assignment forms.
6559  if (Opc==BinaryOperator::Assign && !Args[0]->getType()->isOverloadableType())
6560    return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
6561
6562  // Build an empty overload set.
6563  OverloadCandidateSet CandidateSet(OpLoc);
6564
6565  // Add the candidates from the given function set.
6566  AddFunctionCandidates(Fns, Args, 2, CandidateSet, false);
6567
6568  // Add operator candidates that are member functions.
6569  AddMemberOperatorCandidates(Op, OpLoc, Args, 2, CandidateSet);
6570
6571  // Add candidates from ADL.
6572  AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true,
6573                                       Args, 2,
6574                                       /*ExplicitTemplateArgs*/ 0,
6575                                       CandidateSet);
6576
6577  // Add builtin operator candidates.
6578  AddBuiltinOperatorCandidates(Op, OpLoc, Args, 2, CandidateSet);
6579
6580  // Perform overload resolution.
6581  OverloadCandidateSet::iterator Best;
6582  switch (BestViableFunction(CandidateSet, OpLoc, Best)) {
6583    case OR_Success: {
6584      // We found a built-in operator or an overloaded operator.
6585      FunctionDecl *FnDecl = Best->Function;
6586
6587      if (FnDecl) {
6588        // We matched an overloaded operator. Build a call to that
6589        // operator.
6590
6591        // Convert the arguments.
6592        if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
6593          // Best->Access is only meaningful for class members.
6594          CheckMemberOperatorAccess(OpLoc, Args[0], Args[1], Best->FoundDecl);
6595
6596          OwningExprResult Arg1
6597            = PerformCopyInitialization(
6598                                        InitializedEntity::InitializeParameter(
6599                                                        FnDecl->getParamDecl(0)),
6600                                        SourceLocation(),
6601                                        Owned(Args[1]));
6602          if (Arg1.isInvalid())
6603            return ExprError();
6604
6605          if (PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0,
6606                                                  Best->FoundDecl, Method))
6607            return ExprError();
6608
6609          Args[1] = RHS = Arg1.takeAs<Expr>();
6610        } else {
6611          // Convert the arguments.
6612          OwningExprResult Arg0
6613            = PerformCopyInitialization(
6614                                        InitializedEntity::InitializeParameter(
6615                                                        FnDecl->getParamDecl(0)),
6616                                        SourceLocation(),
6617                                        Owned(Args[0]));
6618          if (Arg0.isInvalid())
6619            return ExprError();
6620
6621          OwningExprResult Arg1
6622            = PerformCopyInitialization(
6623                                        InitializedEntity::InitializeParameter(
6624                                                        FnDecl->getParamDecl(1)),
6625                                        SourceLocation(),
6626                                        Owned(Args[1]));
6627          if (Arg1.isInvalid())
6628            return ExprError();
6629          Args[0] = LHS = Arg0.takeAs<Expr>();
6630          Args[1] = RHS = Arg1.takeAs<Expr>();
6631        }
6632
6633        DiagnoseUseOfDecl(Best->FoundDecl, OpLoc);
6634
6635        // Determine the result type
6636        QualType ResultTy
6637          = FnDecl->getType()->getAs<FunctionType>()->getResultType();
6638        ResultTy = ResultTy.getNonReferenceType();
6639
6640        // Build the actual expression node.
6641        Expr *FnExpr = new (Context) DeclRefExpr(FnDecl, FnDecl->getType(),
6642                                                 OpLoc);
6643        UsualUnaryConversions(FnExpr);
6644
6645        ExprOwningPtr<CXXOperatorCallExpr>
6646          TheCall(this, new (Context) CXXOperatorCallExpr(Context, Op, FnExpr,
6647                                                          Args, 2, ResultTy,
6648                                                          OpLoc));
6649
6650        if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall.get(),
6651                                FnDecl))
6652          return ExprError();
6653
6654        return MaybeBindToTemporary(TheCall.release());
6655      } else {
6656        // We matched a built-in operator. Convert the arguments, then
6657        // break out so that we will build the appropriate built-in
6658        // operator node.
6659        if (PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
6660                                      Best->Conversions[0], AA_Passing) ||
6661            PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
6662                                      Best->Conversions[1], AA_Passing))
6663          return ExprError();
6664
6665        break;
6666      }
6667    }
6668
6669    case OR_No_Viable_Function: {
6670      // C++ [over.match.oper]p9:
6671      //   If the operator is the operator , [...] and there are no
6672      //   viable functions, then the operator is assumed to be the
6673      //   built-in operator and interpreted according to clause 5.
6674      if (Opc == BinaryOperator::Comma)
6675        break;
6676
6677      // For class as left operand for assignment or compound assigment operator
6678      // do not fall through to handling in built-in, but report that no overloaded
6679      // assignment operator found
6680      OwningExprResult Result = ExprError();
6681      if (Args[0]->getType()->isRecordType() &&
6682          Opc >= BinaryOperator::Assign && Opc <= BinaryOperator::OrAssign) {
6683        Diag(OpLoc,  diag::err_ovl_no_viable_oper)
6684             << BinaryOperator::getOpcodeStr(Opc)
6685             << Args[0]->getSourceRange() << Args[1]->getSourceRange();
6686      } else {
6687        // No viable function; try to create a built-in operation, which will
6688        // produce an error. Then, show the non-viable candidates.
6689        Result = CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
6690      }
6691      assert(Result.isInvalid() &&
6692             "C++ binary operator overloading is missing candidates!");
6693      if (Result.isInvalid())
6694        PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, 2,
6695                                BinaryOperator::getOpcodeStr(Opc), OpLoc);
6696      return move(Result);
6697    }
6698
6699    case OR_Ambiguous:
6700      Diag(OpLoc,  diag::err_ovl_ambiguous_oper)
6701          << BinaryOperator::getOpcodeStr(Opc)
6702          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
6703      PrintOverloadCandidates(CandidateSet, OCD_ViableCandidates, Args, 2,
6704                              BinaryOperator::getOpcodeStr(Opc), OpLoc);
6705      return ExprError();
6706
6707    case OR_Deleted:
6708      Diag(OpLoc, diag::err_ovl_deleted_oper)
6709        << Best->Function->isDeleted()
6710        << BinaryOperator::getOpcodeStr(Opc)
6711        << Args[0]->getSourceRange() << Args[1]->getSourceRange();
6712      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, 2);
6713      return ExprError();
6714  }
6715
6716  // We matched a built-in operator; build it.
6717  return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
6718}
6719
6720Action::OwningExprResult
6721Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc,
6722                                         SourceLocation RLoc,
6723                                         ExprArg Base, ExprArg Idx) {
6724  Expr *Args[2] = { static_cast<Expr*>(Base.get()),
6725                    static_cast<Expr*>(Idx.get()) };
6726  DeclarationName OpName =
6727      Context.DeclarationNames.getCXXOperatorName(OO_Subscript);
6728
6729  // If either side is type-dependent, create an appropriate dependent
6730  // expression.
6731  if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
6732
6733    CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
6734    UnresolvedLookupExpr *Fn
6735      = UnresolvedLookupExpr::Create(Context, /*Dependent*/ true, NamingClass,
6736                                     0, SourceRange(), OpName, LLoc,
6737                                     /*ADL*/ true, /*Overloaded*/ false,
6738                                     UnresolvedSetIterator(),
6739                                     UnresolvedSetIterator());
6740    // Can't add any actual overloads yet
6741
6742    Base.release();
6743    Idx.release();
6744    return Owned(new (Context) CXXOperatorCallExpr(Context, OO_Subscript, Fn,
6745                                                   Args, 2,
6746                                                   Context.DependentTy,
6747                                                   RLoc));
6748  }
6749
6750  // Build an empty overload set.
6751  OverloadCandidateSet CandidateSet(LLoc);
6752
6753  // Subscript can only be overloaded as a member function.
6754
6755  // Add operator candidates that are member functions.
6756  AddMemberOperatorCandidates(OO_Subscript, LLoc, Args, 2, CandidateSet);
6757
6758  // Add builtin operator candidates.
6759  AddBuiltinOperatorCandidates(OO_Subscript, LLoc, Args, 2, CandidateSet);
6760
6761  // Perform overload resolution.
6762  OverloadCandidateSet::iterator Best;
6763  switch (BestViableFunction(CandidateSet, LLoc, Best)) {
6764    case OR_Success: {
6765      // We found a built-in operator or an overloaded operator.
6766      FunctionDecl *FnDecl = Best->Function;
6767
6768      if (FnDecl) {
6769        // We matched an overloaded operator. Build a call to that
6770        // operator.
6771
6772        CheckMemberOperatorAccess(LLoc, Args[0], Args[1], Best->FoundDecl);
6773        DiagnoseUseOfDecl(Best->FoundDecl, LLoc);
6774
6775        // Convert the arguments.
6776        CXXMethodDecl *Method = cast<CXXMethodDecl>(FnDecl);
6777        if (PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0,
6778                                                Best->FoundDecl, Method))
6779          return ExprError();
6780
6781        // Convert the arguments.
6782        OwningExprResult InputInit
6783          = PerformCopyInitialization(InitializedEntity::InitializeParameter(
6784                                                      FnDecl->getParamDecl(0)),
6785                                      SourceLocation(),
6786                                      Owned(Args[1]));
6787        if (InputInit.isInvalid())
6788          return ExprError();
6789
6790        Args[1] = InputInit.takeAs<Expr>();
6791
6792        // Determine the result type
6793        QualType ResultTy
6794          = FnDecl->getType()->getAs<FunctionType>()->getResultType();
6795        ResultTy = ResultTy.getNonReferenceType();
6796
6797        // Build the actual expression node.
6798        Expr *FnExpr = new (Context) DeclRefExpr(FnDecl, FnDecl->getType(),
6799                                                 LLoc);
6800        UsualUnaryConversions(FnExpr);
6801
6802        Base.release();
6803        Idx.release();
6804        ExprOwningPtr<CXXOperatorCallExpr>
6805          TheCall(this, new (Context) CXXOperatorCallExpr(Context, OO_Subscript,
6806                                                          FnExpr, Args, 2,
6807                                                          ResultTy, RLoc));
6808
6809        if (CheckCallReturnType(FnDecl->getResultType(), LLoc, TheCall.get(),
6810                                FnDecl))
6811          return ExprError();
6812
6813        return MaybeBindToTemporary(TheCall.release());
6814      } else {
6815        // We matched a built-in operator. Convert the arguments, then
6816        // break out so that we will build the appropriate built-in
6817        // operator node.
6818        if (PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
6819                                      Best->Conversions[0], AA_Passing) ||
6820            PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
6821                                      Best->Conversions[1], AA_Passing))
6822          return ExprError();
6823
6824        break;
6825      }
6826    }
6827
6828    case OR_No_Viable_Function: {
6829      if (CandidateSet.empty())
6830        Diag(LLoc, diag::err_ovl_no_oper)
6831          << Args[0]->getType() << /*subscript*/ 0
6832          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
6833      else
6834        Diag(LLoc, diag::err_ovl_no_viable_subscript)
6835          << Args[0]->getType()
6836          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
6837      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, 2,
6838                              "[]", LLoc);
6839      return ExprError();
6840    }
6841
6842    case OR_Ambiguous:
6843      Diag(LLoc,  diag::err_ovl_ambiguous_oper)
6844          << "[]" << Args[0]->getSourceRange() << Args[1]->getSourceRange();
6845      PrintOverloadCandidates(CandidateSet, OCD_ViableCandidates, Args, 2,
6846                              "[]", LLoc);
6847      return ExprError();
6848
6849    case OR_Deleted:
6850      Diag(LLoc, diag::err_ovl_deleted_oper)
6851        << Best->Function->isDeleted() << "[]"
6852        << Args[0]->getSourceRange() << Args[1]->getSourceRange();
6853      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, 2,
6854                              "[]", LLoc);
6855      return ExprError();
6856    }
6857
6858  // We matched a built-in operator; build it.
6859  Base.release();
6860  Idx.release();
6861  return CreateBuiltinArraySubscriptExpr(Owned(Args[0]), LLoc,
6862                                         Owned(Args[1]), RLoc);
6863}
6864
6865/// BuildCallToMemberFunction - Build a call to a member
6866/// function. MemExpr is the expression that refers to the member
6867/// function (and includes the object parameter), Args/NumArgs are the
6868/// arguments to the function call (not including the object
6869/// parameter). The caller needs to validate that the member
6870/// expression refers to a member function or an overloaded member
6871/// function.
6872Sema::OwningExprResult
6873Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE,
6874                                SourceLocation LParenLoc, Expr **Args,
6875                                unsigned NumArgs, SourceLocation *CommaLocs,
6876                                SourceLocation RParenLoc) {
6877  // Dig out the member expression. This holds both the object
6878  // argument and the member function we're referring to.
6879  Expr *NakedMemExpr = MemExprE->IgnoreParens();
6880
6881  MemberExpr *MemExpr;
6882  CXXMethodDecl *Method = 0;
6883  DeclAccessPair FoundDecl = DeclAccessPair::make(0, AS_public);
6884  NestedNameSpecifier *Qualifier = 0;
6885  if (isa<MemberExpr>(NakedMemExpr)) {
6886    MemExpr = cast<MemberExpr>(NakedMemExpr);
6887    Method = cast<CXXMethodDecl>(MemExpr->getMemberDecl());
6888    FoundDecl = MemExpr->getFoundDecl();
6889    Qualifier = MemExpr->getQualifier();
6890  } else {
6891    UnresolvedMemberExpr *UnresExpr = cast<UnresolvedMemberExpr>(NakedMemExpr);
6892    Qualifier = UnresExpr->getQualifier();
6893
6894    QualType ObjectType = UnresExpr->getBaseType();
6895
6896    // Add overload candidates
6897    OverloadCandidateSet CandidateSet(UnresExpr->getMemberLoc());
6898
6899    // FIXME: avoid copy.
6900    TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
6901    if (UnresExpr->hasExplicitTemplateArgs()) {
6902      UnresExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
6903      TemplateArgs = &TemplateArgsBuffer;
6904    }
6905
6906    for (UnresolvedMemberExpr::decls_iterator I = UnresExpr->decls_begin(),
6907           E = UnresExpr->decls_end(); I != E; ++I) {
6908
6909      NamedDecl *Func = *I;
6910      CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(Func->getDeclContext());
6911      if (isa<UsingShadowDecl>(Func))
6912        Func = cast<UsingShadowDecl>(Func)->getTargetDecl();
6913
6914      if ((Method = dyn_cast<CXXMethodDecl>(Func))) {
6915        // If explicit template arguments were provided, we can't call a
6916        // non-template member function.
6917        if (TemplateArgs)
6918          continue;
6919
6920        AddMethodCandidate(Method, I.getPair(), ActingDC, ObjectType,
6921                           Args, NumArgs,
6922                           CandidateSet, /*SuppressUserConversions=*/false);
6923      } else {
6924        AddMethodTemplateCandidate(cast<FunctionTemplateDecl>(Func),
6925                                   I.getPair(), ActingDC, TemplateArgs,
6926                                   ObjectType, Args, NumArgs,
6927                                   CandidateSet,
6928                                   /*SuppressUsedConversions=*/false);
6929      }
6930    }
6931
6932    DeclarationName DeclName = UnresExpr->getMemberName();
6933
6934    OverloadCandidateSet::iterator Best;
6935    switch (BestViableFunction(CandidateSet, UnresExpr->getLocStart(), Best)) {
6936    case OR_Success:
6937      Method = cast<CXXMethodDecl>(Best->Function);
6938      FoundDecl = Best->FoundDecl;
6939      CheckUnresolvedMemberAccess(UnresExpr, Best->FoundDecl);
6940      DiagnoseUseOfDecl(Best->FoundDecl, UnresExpr->getNameLoc());
6941      break;
6942
6943    case OR_No_Viable_Function:
6944      Diag(UnresExpr->getMemberLoc(),
6945           diag::err_ovl_no_viable_member_function_in_call)
6946        << DeclName << MemExprE->getSourceRange();
6947      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, NumArgs);
6948      // FIXME: Leaking incoming expressions!
6949      return ExprError();
6950
6951    case OR_Ambiguous:
6952      Diag(UnresExpr->getMemberLoc(), diag::err_ovl_ambiguous_member_call)
6953        << DeclName << MemExprE->getSourceRange();
6954      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, NumArgs);
6955      // FIXME: Leaking incoming expressions!
6956      return ExprError();
6957
6958    case OR_Deleted:
6959      Diag(UnresExpr->getMemberLoc(), diag::err_ovl_deleted_member_call)
6960        << Best->Function->isDeleted()
6961        << DeclName << MemExprE->getSourceRange();
6962      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, NumArgs);
6963      // FIXME: Leaking incoming expressions!
6964      return ExprError();
6965    }
6966
6967    MemExprE = FixOverloadedFunctionReference(MemExprE, FoundDecl, Method);
6968
6969    // If overload resolution picked a static member, build a
6970    // non-member call based on that function.
6971    if (Method->isStatic()) {
6972      return BuildResolvedCallExpr(MemExprE, Method, LParenLoc,
6973                                   Args, NumArgs, RParenLoc);
6974    }
6975
6976    MemExpr = cast<MemberExpr>(MemExprE->IgnoreParens());
6977  }
6978
6979  assert(Method && "Member call to something that isn't a method?");
6980  ExprOwningPtr<CXXMemberCallExpr>
6981    TheCall(this, new (Context) CXXMemberCallExpr(Context, MemExprE, Args,
6982                                                  NumArgs,
6983                                  Method->getResultType().getNonReferenceType(),
6984                                  RParenLoc));
6985
6986  // Check for a valid return type.
6987  if (CheckCallReturnType(Method->getResultType(), MemExpr->getMemberLoc(),
6988                          TheCall.get(), Method))
6989    return ExprError();
6990
6991  // Convert the object argument (for a non-static member function call).
6992  // We only need to do this if there was actually an overload; otherwise
6993  // it was done at lookup.
6994  Expr *ObjectArg = MemExpr->getBase();
6995  if (!Method->isStatic() &&
6996      PerformObjectArgumentInitialization(ObjectArg, Qualifier,
6997                                          FoundDecl, Method))
6998    return ExprError();
6999  MemExpr->setBase(ObjectArg);
7000
7001  // Convert the rest of the arguments
7002  const FunctionProtoType *Proto = Method->getType()->getAs<FunctionProtoType>();
7003  if (ConvertArgumentsForCall(&*TheCall, MemExpr, Method, Proto, Args, NumArgs,
7004                              RParenLoc))
7005    return ExprError();
7006
7007  if (CheckFunctionCall(Method, TheCall.get()))
7008    return ExprError();
7009
7010  return MaybeBindToTemporary(TheCall.release());
7011}
7012
7013/// BuildCallToObjectOfClassType - Build a call to an object of class
7014/// type (C++ [over.call.object]), which can end up invoking an
7015/// overloaded function call operator (@c operator()) or performing a
7016/// user-defined conversion on the object argument.
7017Sema::ExprResult
7018Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Object,
7019                                   SourceLocation LParenLoc,
7020                                   Expr **Args, unsigned NumArgs,
7021                                   SourceLocation *CommaLocs,
7022                                   SourceLocation RParenLoc) {
7023  assert(Object->getType()->isRecordType() && "Requires object type argument");
7024  const RecordType *Record = Object->getType()->getAs<RecordType>();
7025
7026  // C++ [over.call.object]p1:
7027  //  If the primary-expression E in the function call syntax
7028  //  evaluates to a class object of type "cv T", then the set of
7029  //  candidate functions includes at least the function call
7030  //  operators of T. The function call operators of T are obtained by
7031  //  ordinary lookup of the name operator() in the context of
7032  //  (E).operator().
7033  OverloadCandidateSet CandidateSet(LParenLoc);
7034  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(OO_Call);
7035
7036  if (RequireCompleteType(LParenLoc, Object->getType(),
7037                          PDiag(diag::err_incomplete_object_call)
7038                          << Object->getSourceRange()))
7039    return true;
7040
7041  LookupResult R(*this, OpName, LParenLoc, LookupOrdinaryName);
7042  LookupQualifiedName(R, Record->getDecl());
7043  R.suppressDiagnostics();
7044
7045  for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
7046       Oper != OperEnd; ++Oper) {
7047    AddMethodCandidate(Oper.getPair(), Object->getType(),
7048                       Args, NumArgs, CandidateSet,
7049                       /*SuppressUserConversions=*/ false);
7050  }
7051
7052  // C++ [over.call.object]p2:
7053  //   In addition, for each conversion function declared in T of the
7054  //   form
7055  //
7056  //        operator conversion-type-id () cv-qualifier;
7057  //
7058  //   where cv-qualifier is the same cv-qualification as, or a
7059  //   greater cv-qualification than, cv, and where conversion-type-id
7060  //   denotes the type "pointer to function of (P1,...,Pn) returning
7061  //   R", or the type "reference to pointer to function of
7062  //   (P1,...,Pn) returning R", or the type "reference to function
7063  //   of (P1,...,Pn) returning R", a surrogate call function [...]
7064  //   is also considered as a candidate function. Similarly,
7065  //   surrogate call functions are added to the set of candidate
7066  //   functions for each conversion function declared in an
7067  //   accessible base class provided the function is not hidden
7068  //   within T by another intervening declaration.
7069  const UnresolvedSetImpl *Conversions
7070    = cast<CXXRecordDecl>(Record->getDecl())->getVisibleConversionFunctions();
7071  for (UnresolvedSetImpl::iterator I = Conversions->begin(),
7072         E = Conversions->end(); I != E; ++I) {
7073    NamedDecl *D = *I;
7074    CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
7075    if (isa<UsingShadowDecl>(D))
7076      D = cast<UsingShadowDecl>(D)->getTargetDecl();
7077
7078    // Skip over templated conversion functions; they aren't
7079    // surrogates.
7080    if (isa<FunctionTemplateDecl>(D))
7081      continue;
7082
7083    CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
7084
7085    // Strip the reference type (if any) and then the pointer type (if
7086    // any) to get down to what might be a function type.
7087    QualType ConvType = Conv->getConversionType().getNonReferenceType();
7088    if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
7089      ConvType = ConvPtrType->getPointeeType();
7090
7091    if (const FunctionProtoType *Proto = ConvType->getAs<FunctionProtoType>())
7092      AddSurrogateCandidate(Conv, I.getPair(), ActingContext, Proto,
7093                            Object->getType(), Args, NumArgs,
7094                            CandidateSet);
7095  }
7096
7097  // Perform overload resolution.
7098  OverloadCandidateSet::iterator Best;
7099  switch (BestViableFunction(CandidateSet, Object->getLocStart(), Best)) {
7100  case OR_Success:
7101    // Overload resolution succeeded; we'll build the appropriate call
7102    // below.
7103    break;
7104
7105  case OR_No_Viable_Function:
7106    if (CandidateSet.empty())
7107      Diag(Object->getSourceRange().getBegin(), diag::err_ovl_no_oper)
7108        << Object->getType() << /*call*/ 1
7109        << Object->getSourceRange();
7110    else
7111      Diag(Object->getSourceRange().getBegin(),
7112           diag::err_ovl_no_viable_object_call)
7113        << Object->getType() << Object->getSourceRange();
7114    PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, NumArgs);
7115    break;
7116
7117  case OR_Ambiguous:
7118    Diag(Object->getSourceRange().getBegin(),
7119         diag::err_ovl_ambiguous_object_call)
7120      << Object->getType() << Object->getSourceRange();
7121    PrintOverloadCandidates(CandidateSet, OCD_ViableCandidates, Args, NumArgs);
7122    break;
7123
7124  case OR_Deleted:
7125    Diag(Object->getSourceRange().getBegin(),
7126         diag::err_ovl_deleted_object_call)
7127      << Best->Function->isDeleted()
7128      << Object->getType() << Object->getSourceRange();
7129    PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, NumArgs);
7130    break;
7131  }
7132
7133  if (Best == CandidateSet.end()) {
7134    // We had an error; delete all of the subexpressions and return
7135    // the error.
7136    Object->Destroy(Context);
7137    for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
7138      Args[ArgIdx]->Destroy(Context);
7139    return true;
7140  }
7141
7142  if (Best->Function == 0) {
7143    // Since there is no function declaration, this is one of the
7144    // surrogate candidates. Dig out the conversion function.
7145    CXXConversionDecl *Conv
7146      = cast<CXXConversionDecl>(
7147                         Best->Conversions[0].UserDefined.ConversionFunction);
7148
7149    CheckMemberOperatorAccess(LParenLoc, Object, 0, Best->FoundDecl);
7150    DiagnoseUseOfDecl(Best->FoundDecl, LParenLoc);
7151
7152    // We selected one of the surrogate functions that converts the
7153    // object parameter to a function pointer. Perform the conversion
7154    // on the object argument, then let ActOnCallExpr finish the job.
7155
7156    // Create an implicit member expr to refer to the conversion operator.
7157    // and then call it.
7158    CXXMemberCallExpr *CE = BuildCXXMemberCallExpr(Object, Best->FoundDecl,
7159                                                   Conv);
7160
7161    return ActOnCallExpr(S, ExprArg(*this, CE), LParenLoc,
7162                         MultiExprArg(*this, (ExprTy**)Args, NumArgs),
7163                         CommaLocs, RParenLoc).result();
7164  }
7165
7166  CheckMemberOperatorAccess(LParenLoc, Object, 0, Best->FoundDecl);
7167  DiagnoseUseOfDecl(Best->FoundDecl, LParenLoc);
7168
7169  // We found an overloaded operator(). Build a CXXOperatorCallExpr
7170  // that calls this method, using Object for the implicit object
7171  // parameter and passing along the remaining arguments.
7172  CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
7173  const FunctionProtoType *Proto = Method->getType()->getAs<FunctionProtoType>();
7174
7175  unsigned NumArgsInProto = Proto->getNumArgs();
7176  unsigned NumArgsToCheck = NumArgs;
7177
7178  // Build the full argument list for the method call (the
7179  // implicit object parameter is placed at the beginning of the
7180  // list).
7181  Expr **MethodArgs;
7182  if (NumArgs < NumArgsInProto) {
7183    NumArgsToCheck = NumArgsInProto;
7184    MethodArgs = new Expr*[NumArgsInProto + 1];
7185  } else {
7186    MethodArgs = new Expr*[NumArgs + 1];
7187  }
7188  MethodArgs[0] = Object;
7189  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
7190    MethodArgs[ArgIdx + 1] = Args[ArgIdx];
7191
7192  Expr *NewFn = new (Context) DeclRefExpr(Method, Method->getType(),
7193                                          SourceLocation());
7194  UsualUnaryConversions(NewFn);
7195
7196  // Once we've built TheCall, all of the expressions are properly
7197  // owned.
7198  QualType ResultTy = Method->getResultType().getNonReferenceType();
7199  ExprOwningPtr<CXXOperatorCallExpr>
7200    TheCall(this, new (Context) CXXOperatorCallExpr(Context, OO_Call, NewFn,
7201                                                    MethodArgs, NumArgs + 1,
7202                                                    ResultTy, RParenLoc));
7203  delete [] MethodArgs;
7204
7205  if (CheckCallReturnType(Method->getResultType(), LParenLoc, TheCall.get(),
7206                          Method))
7207    return true;
7208
7209  // We may have default arguments. If so, we need to allocate more
7210  // slots in the call for them.
7211  if (NumArgs < NumArgsInProto)
7212    TheCall->setNumArgs(Context, NumArgsInProto + 1);
7213  else if (NumArgs > NumArgsInProto)
7214    NumArgsToCheck = NumArgsInProto;
7215
7216  bool IsError = false;
7217
7218  // Initialize the implicit object parameter.
7219  IsError |= PerformObjectArgumentInitialization(Object, /*Qualifier=*/0,
7220                                                 Best->FoundDecl, Method);
7221  TheCall->setArg(0, Object);
7222
7223
7224  // Check the argument types.
7225  for (unsigned i = 0; i != NumArgsToCheck; i++) {
7226    Expr *Arg;
7227    if (i < NumArgs) {
7228      Arg = Args[i];
7229
7230      // Pass the argument.
7231
7232      OwningExprResult InputInit
7233        = PerformCopyInitialization(InitializedEntity::InitializeParameter(
7234                                                    Method->getParamDecl(i)),
7235                                    SourceLocation(), Owned(Arg));
7236
7237      IsError |= InputInit.isInvalid();
7238      Arg = InputInit.takeAs<Expr>();
7239    } else {
7240      OwningExprResult DefArg
7241        = BuildCXXDefaultArgExpr(LParenLoc, Method, Method->getParamDecl(i));
7242      if (DefArg.isInvalid()) {
7243        IsError = true;
7244        break;
7245      }
7246
7247      Arg = DefArg.takeAs<Expr>();
7248    }
7249
7250    TheCall->setArg(i + 1, Arg);
7251  }
7252
7253  // If this is a variadic call, handle args passed through "...".
7254  if (Proto->isVariadic()) {
7255    // Promote the arguments (C99 6.5.2.2p7).
7256    for (unsigned i = NumArgsInProto; i != NumArgs; i++) {
7257      Expr *Arg = Args[i];
7258      IsError |= DefaultVariadicArgumentPromotion(Arg, VariadicMethod, 0);
7259      TheCall->setArg(i + 1, Arg);
7260    }
7261  }
7262
7263  if (IsError) return true;
7264
7265  if (CheckFunctionCall(Method, TheCall.get()))
7266    return true;
7267
7268  return MaybeBindToTemporary(TheCall.release()).result();
7269}
7270
7271/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->
7272///  (if one exists), where @c Base is an expression of class type and
7273/// @c Member is the name of the member we're trying to find.
7274Sema::OwningExprResult
7275Sema::BuildOverloadedArrowExpr(Scope *S, ExprArg BaseIn, SourceLocation OpLoc) {
7276  Expr *Base = static_cast<Expr *>(BaseIn.get());
7277  assert(Base->getType()->isRecordType() && "left-hand side must have class type");
7278
7279  SourceLocation Loc = Base->getExprLoc();
7280
7281  // C++ [over.ref]p1:
7282  //
7283  //   [...] An expression x->m is interpreted as (x.operator->())->m
7284  //   for a class object x of type T if T::operator->() exists and if
7285  //   the operator is selected as the best match function by the
7286  //   overload resolution mechanism (13.3).
7287  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(OO_Arrow);
7288  OverloadCandidateSet CandidateSet(Loc);
7289  const RecordType *BaseRecord = Base->getType()->getAs<RecordType>();
7290
7291  if (RequireCompleteType(Loc, Base->getType(),
7292                          PDiag(diag::err_typecheck_incomplete_tag)
7293                            << Base->getSourceRange()))
7294    return ExprError();
7295
7296  LookupResult R(*this, OpName, OpLoc, LookupOrdinaryName);
7297  LookupQualifiedName(R, BaseRecord->getDecl());
7298  R.suppressDiagnostics();
7299
7300  for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
7301       Oper != OperEnd; ++Oper) {
7302    AddMethodCandidate(Oper.getPair(), Base->getType(), 0, 0, CandidateSet,
7303                       /*SuppressUserConversions=*/false);
7304  }
7305
7306  // Perform overload resolution.
7307  OverloadCandidateSet::iterator Best;
7308  switch (BestViableFunction(CandidateSet, OpLoc, Best)) {
7309  case OR_Success:
7310    // Overload resolution succeeded; we'll build the call below.
7311    break;
7312
7313  case OR_No_Viable_Function:
7314    if (CandidateSet.empty())
7315      Diag(OpLoc, diag::err_typecheck_member_reference_arrow)
7316        << Base->getType() << Base->getSourceRange();
7317    else
7318      Diag(OpLoc, diag::err_ovl_no_viable_oper)
7319        << "operator->" << Base->getSourceRange();
7320    PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, &Base, 1);
7321    return ExprError();
7322
7323  case OR_Ambiguous:
7324    Diag(OpLoc,  diag::err_ovl_ambiguous_oper)
7325      << "->" << Base->getSourceRange();
7326    PrintOverloadCandidates(CandidateSet, OCD_ViableCandidates, &Base, 1);
7327    return ExprError();
7328
7329  case OR_Deleted:
7330    Diag(OpLoc,  diag::err_ovl_deleted_oper)
7331      << Best->Function->isDeleted()
7332      << "->" << Base->getSourceRange();
7333    PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, &Base, 1);
7334    return ExprError();
7335  }
7336
7337  CheckMemberOperatorAccess(OpLoc, Base, 0, Best->FoundDecl);
7338  DiagnoseUseOfDecl(Best->FoundDecl, OpLoc);
7339
7340  // Convert the object parameter.
7341  CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
7342  if (PerformObjectArgumentInitialization(Base, /*Qualifier=*/0,
7343                                          Best->FoundDecl, Method))
7344    return ExprError();
7345
7346  // No concerns about early exits now.
7347  BaseIn.release();
7348
7349  // Build the operator call.
7350  Expr *FnExpr = new (Context) DeclRefExpr(Method, Method->getType(),
7351                                           SourceLocation());
7352  UsualUnaryConversions(FnExpr);
7353
7354  QualType ResultTy = Method->getResultType().getNonReferenceType();
7355  ExprOwningPtr<CXXOperatorCallExpr>
7356    TheCall(this, new (Context) CXXOperatorCallExpr(Context, OO_Arrow, FnExpr,
7357                                                    &Base, 1, ResultTy, OpLoc));
7358
7359  if (CheckCallReturnType(Method->getResultType(), OpLoc, TheCall.get(),
7360                          Method))
7361          return ExprError();
7362  return move(TheCall);
7363}
7364
7365/// FixOverloadedFunctionReference - E is an expression that refers to
7366/// a C++ overloaded function (possibly with some parentheses and
7367/// perhaps a '&' around it). We have resolved the overloaded function
7368/// to the function declaration Fn, so patch up the expression E to
7369/// refer (possibly indirectly) to Fn. Returns the new expr.
7370Expr *Sema::FixOverloadedFunctionReference(Expr *E, DeclAccessPair Found,
7371                                           FunctionDecl *Fn) {
7372  if (ParenExpr *PE = dyn_cast<ParenExpr>(E)) {
7373    Expr *SubExpr = FixOverloadedFunctionReference(PE->getSubExpr(),
7374                                                   Found, Fn);
7375    if (SubExpr == PE->getSubExpr())
7376      return PE->Retain();
7377
7378    return new (Context) ParenExpr(PE->getLParen(), PE->getRParen(), SubExpr);
7379  }
7380
7381  if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) {
7382    Expr *SubExpr = FixOverloadedFunctionReference(ICE->getSubExpr(),
7383                                                   Found, Fn);
7384    assert(Context.hasSameType(ICE->getSubExpr()->getType(),
7385                               SubExpr->getType()) &&
7386           "Implicit cast type cannot be determined from overload");
7387    if (SubExpr == ICE->getSubExpr())
7388      return ICE->Retain();
7389
7390    return new (Context) ImplicitCastExpr(ICE->getType(),
7391                                          ICE->getCastKind(),
7392                                          SubExpr, CXXBaseSpecifierArray(),
7393                                          ICE->isLvalueCast());
7394  }
7395
7396  if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(E)) {
7397    assert(UnOp->getOpcode() == UnaryOperator::AddrOf &&
7398           "Can only take the address of an overloaded function");
7399    if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
7400      if (Method->isStatic()) {
7401        // Do nothing: static member functions aren't any different
7402        // from non-member functions.
7403      } else {
7404        // Fix the sub expression, which really has to be an
7405        // UnresolvedLookupExpr holding an overloaded member function
7406        // or template.
7407        Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(),
7408                                                       Found, Fn);
7409        if (SubExpr == UnOp->getSubExpr())
7410          return UnOp->Retain();
7411
7412        assert(isa<DeclRefExpr>(SubExpr)
7413               && "fixed to something other than a decl ref");
7414        assert(cast<DeclRefExpr>(SubExpr)->getQualifier()
7415               && "fixed to a member ref with no nested name qualifier");
7416
7417        // We have taken the address of a pointer to member
7418        // function. Perform the computation here so that we get the
7419        // appropriate pointer to member type.
7420        QualType ClassType
7421          = Context.getTypeDeclType(cast<RecordDecl>(Method->getDeclContext()));
7422        QualType MemPtrType
7423          = Context.getMemberPointerType(Fn->getType(), ClassType.getTypePtr());
7424
7425        return new (Context) UnaryOperator(SubExpr, UnaryOperator::AddrOf,
7426                                           MemPtrType, UnOp->getOperatorLoc());
7427      }
7428    }
7429    Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(),
7430                                                   Found, Fn);
7431    if (SubExpr == UnOp->getSubExpr())
7432      return UnOp->Retain();
7433
7434    return new (Context) UnaryOperator(SubExpr, UnaryOperator::AddrOf,
7435                                     Context.getPointerType(SubExpr->getType()),
7436                                       UnOp->getOperatorLoc());
7437  }
7438
7439  if (UnresolvedLookupExpr *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {
7440    // FIXME: avoid copy.
7441    TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
7442    if (ULE->hasExplicitTemplateArgs()) {
7443      ULE->copyTemplateArgumentsInto(TemplateArgsBuffer);
7444      TemplateArgs = &TemplateArgsBuffer;
7445    }
7446
7447    return DeclRefExpr::Create(Context,
7448                               ULE->getQualifier(),
7449                               ULE->getQualifierRange(),
7450                               Fn,
7451                               ULE->getNameLoc(),
7452                               Fn->getType(),
7453                               TemplateArgs);
7454  }
7455
7456  if (UnresolvedMemberExpr *MemExpr = dyn_cast<UnresolvedMemberExpr>(E)) {
7457    // FIXME: avoid copy.
7458    TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
7459    if (MemExpr->hasExplicitTemplateArgs()) {
7460      MemExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
7461      TemplateArgs = &TemplateArgsBuffer;
7462    }
7463
7464    Expr *Base;
7465
7466    // If we're filling in
7467    if (MemExpr->isImplicitAccess()) {
7468      if (cast<CXXMethodDecl>(Fn)->isStatic()) {
7469        return DeclRefExpr::Create(Context,
7470                                   MemExpr->getQualifier(),
7471                                   MemExpr->getQualifierRange(),
7472                                   Fn,
7473                                   MemExpr->getMemberLoc(),
7474                                   Fn->getType(),
7475                                   TemplateArgs);
7476      } else {
7477        SourceLocation Loc = MemExpr->getMemberLoc();
7478        if (MemExpr->getQualifier())
7479          Loc = MemExpr->getQualifierRange().getBegin();
7480        Base = new (Context) CXXThisExpr(Loc,
7481                                         MemExpr->getBaseType(),
7482                                         /*isImplicit=*/true);
7483      }
7484    } else
7485      Base = MemExpr->getBase()->Retain();
7486
7487    return MemberExpr::Create(Context, Base,
7488                              MemExpr->isArrow(),
7489                              MemExpr->getQualifier(),
7490                              MemExpr->getQualifierRange(),
7491                              Fn,
7492                              Found,
7493                              MemExpr->getMemberLoc(),
7494                              TemplateArgs,
7495                              Fn->getType());
7496  }
7497
7498  assert(false && "Invalid reference to overloaded function");
7499  return E->Retain();
7500}
7501
7502Sema::OwningExprResult Sema::FixOverloadedFunctionReference(OwningExprResult E,
7503                                                          DeclAccessPair Found,
7504                                                            FunctionDecl *Fn) {
7505  return Owned(FixOverloadedFunctionReference((Expr *)E.get(), Found, Fn));
7506}
7507
7508} // end namespace clang
7509