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