SemaOverload.cpp revision eed3e699b581ad9e17f8147f26b882d20d65a317
1642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata//===--- SemaOverload.cpp - C++ Overloading ---------------------*- C++ -*-===//
2642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata//
3642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata//                     The LLVM Compiler Infrastructure
4642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata//
5642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata// This file is distributed under the University of Illinois Open Source
6642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata// License. See LICENSE.TXT for details.
7642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata//
8642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata//===----------------------------------------------------------------------===//
9642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata//
10642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata// This file provides Sema routines for C++ overloading.
11642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata//
12642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata//===----------------------------------------------------------------------===//
13642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata
14642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata#include "Sema.h"
15642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata#include "clang/Basic/Diagnostic.h"
16642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata#include "clang/Lex/Preprocessor.h"
17642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata#include "clang/AST/ASTContext.h"
18642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata#include "clang/AST/CXXInheritance.h"
19642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata#include "clang/AST/Expr.h"
20642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata#include "clang/AST/ExprCXX.h"
21642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata#include "clang/AST/TypeOrdering.h"
22642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata#include "clang/Basic/PartialDiagnostic.h"
23642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata#include "llvm/ADT/SmallPtrSet.h"
24642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata#include "llvm/ADT/STLExtras.h"
25bac2da505ee174b7fb984b975c5938f88f0dbab2Petr Machata#include "llvm/Support/Compiler.h"
26bac2da505ee174b7fb984b975c5938f88f0dbab2Petr Machata#include <algorithm>
27ba1664b062414481d0f37d06bb01a19874c8d481Petr Machata#include <cstdio>
28ba1664b062414481d0f37d06bb01a19874c8d481Petr Machata
29ba1664b062414481d0f37d06bb01a19874c8d481Petr Machatanamespace clang {
306dfc544b6aa6703d2292be34470aebf874d78452Petr Machata
316dfc544b6aa6703d2292be34470aebf874d78452Petr Machata/// GetConversionCategory - Retrieve the implicit conversion
326dfc544b6aa6703d2292be34470aebf874d78452Petr Machata/// category corresponding to the given implicit conversion kind.
336dfc544b6aa6703d2292be34470aebf874d78452Petr MachataImplicitConversionCategory
346dfc544b6aa6703d2292be34470aebf874d78452Petr MachataGetConversionCategory(ImplicitConversionKind Kind) {
356dfc544b6aa6703d2292be34470aebf874d78452Petr Machata  static const ImplicitConversionCategory
36ba1664b062414481d0f37d06bb01a19874c8d481Petr Machata    Category[(int)ICK_Num_Conversion_Kinds] = {
37ba1664b062414481d0f37d06bb01a19874c8d481Petr Machata    ICC_Identity,
38642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICC_Lvalue_Transformation,
39642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICC_Lvalue_Transformation,
40642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICC_Lvalue_Transformation,
41642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICC_Qualification_Adjustment,
42642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICC_Promotion,
43642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICC_Promotion,
44642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICC_Promotion,
45642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICC_Conversion,
46642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICC_Conversion,
47642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICC_Conversion,
48642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICC_Conversion,
49642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICC_Conversion,
50642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICC_Conversion,
51642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICC_Conversion,
52642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICC_Conversion,
53642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICC_Conversion,
54642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICC_Conversion
55642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  };
56642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  return Category[(int)Kind];
57642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata}
58642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata
59642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata/// GetConversionRank - Retrieve the implicit conversion rank
60642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata/// corresponding to the given implicit conversion kind.
61642626096a694c6af279d25d2b1b2fba5b10ddfbPetr MachataImplicitConversionRank GetConversionRank(ImplicitConversionKind Kind) {
62642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  static const ImplicitConversionRank
63642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    Rank[(int)ICK_Num_Conversion_Kinds] = {
64642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICR_Exact_Match,
65642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICR_Exact_Match,
66642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICR_Exact_Match,
67ba1664b062414481d0f37d06bb01a19874c8d481Petr Machata    ICR_Exact_Match,
68642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICR_Exact_Match,
69642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICR_Promotion,
70642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICR_Promotion,
71642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICR_Promotion,
72642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICR_Conversion,
73929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata    ICR_Conversion,
74642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICR_Conversion,
75642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICR_Conversion,
76642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICR_Conversion,
77642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICR_Conversion,
78642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICR_Conversion,
79642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICR_Conversion,
80642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICR_Conversion,
81642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    ICR_Conversion
82642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  };
83642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  return Rank[(int)Kind];
84642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata}
85642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata
86642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata/// GetImplicitConversionName - Return the name of this kind of
87642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata/// implicit conversion.
88642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machataconst char* GetImplicitConversionName(ImplicitConversionKind Kind) {
89929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata  static const char* Name[(int)ICK_Num_Conversion_Kinds] = {
90642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    "No conversion",
91642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    "Lvalue-to-rvalue",
92642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    "Array-to-pointer",
93642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    "Function-to-pointer",
94642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    "Qualification",
95ba1664b062414481d0f37d06bb01a19874c8d481Petr Machata    "Integral promotion",
96bac2da505ee174b7fb984b975c5938f88f0dbab2Petr Machata    "Floating point promotion",
97642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    "Complex promotion",
98929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata    "Integral conversion",
99642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    "Floating conversion",
100642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    "Complex conversion",
101929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata    "Floating-integral conversion",
102642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    "Complex-real conversion",
103642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    "Pointer conversion",
104929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata    "Pointer-to-member conversion",
105642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    "Boolean conversion",
106642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    "Compatible-types conversion",
107642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    "Derived-to-base conversion"
108929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata  };
109642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  return Name[Kind];
110642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata}
111642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata
112929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata/// StandardConversionSequence - Set the standard conversion
113642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata/// sequence to the identity conversion.
114642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machatavoid StandardConversionSequence::setAsIdentityConversion() {
115929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata  First = ICK_Identity;
116642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  Second = ICK_Identity;
117642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  Third = ICK_Identity;
118929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata  Deprecated = false;
119642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  ReferenceBinding = false;
120642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  DirectBinding = false;
121642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  RRefBinding = false;
122642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  CopyConstructor = 0;
123642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata}
124642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata
125929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata/// getRank - Retrieve the rank of this standard conversion sequence
126642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata/// (C++ 13.3.3.1.1p3). The rank is the largest rank of each of the
127642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata/// implicit conversions.
128642626096a694c6af279d25d2b1b2fba5b10ddfbPetr MachataImplicitConversionRank StandardConversionSequence::getRank() const {
129642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  ImplicitConversionRank Rank = ICR_Exact_Match;
130642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  if  (GetConversionRank(First) > Rank)
131642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    Rank = GetConversionRank(First);
132642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  if  (GetConversionRank(Second) > Rank)
133642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    Rank = GetConversionRank(Second);
134642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  if  (GetConversionRank(Third) > Rank)
135642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    Rank = GetConversionRank(Third);
136642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  return Rank;
137642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata}
138642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata
139929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata/// isPointerConversionToBool - Determines whether this conversion is
140642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata/// a conversion of a pointer or pointer-to-member to bool. This is
141642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata/// used as part of the ranking of standard conversion sequences
142642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata/// (C++ 13.3.3.2p4).
143929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machatabool StandardConversionSequence::isPointerConversionToBool() const {
144642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  QualType FromType = QualType::getFromOpaquePtr(FromTypePtr);
145642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  QualType ToType = QualType::getFromOpaquePtr(ToTypePtr);
146642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata
147642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  // Note that FromType has not necessarily been transformed by the
148642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  // array-to-pointer or function-to-pointer implicit conversions, so
149929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata  // check for their presence as well as checking whether FromType is
150642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  // a pointer.
151642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  if (ToType->isBooleanType() &&
152642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata      (FromType->isPointerType() || FromType->isBlockPointerType() ||
153642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata       First == ICK_Array_To_Pointer || First == ICK_Function_To_Pointer))
154642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    return true;
155642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata
156642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  return false;
157642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata}
158642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata
159642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata/// isPointerConversionToVoidPointer - Determines whether this
160642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata/// conversion is a conversion of a pointer to a void pointer. This is
161642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata/// used as part of the ranking of standard conversion sequences (C++
162642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata/// 13.3.3.2p4).
163642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machatabool
164642626096a694c6af279d25d2b1b2fba5b10ddfbPetr MachataStandardConversionSequence::
165642626096a694c6af279d25d2b1b2fba5b10ddfbPetr MachataisPointerConversionToVoidPointer(ASTContext& Context) const {
166642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  QualType FromType = QualType::getFromOpaquePtr(FromTypePtr);
167642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  QualType ToType = QualType::getFromOpaquePtr(ToTypePtr);
168642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata
169642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  // Note that FromType has not necessarily been transformed by the
170642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  // array-to-pointer implicit conversion, so check for its presence
171642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  // and redo the conversion to get a pointer.
172642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  if (First == ICK_Array_To_Pointer)
173642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    FromType = Context.getArrayDecayedType(FromType);
174929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata
175642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  if (Second == ICK_Pointer_Conversion)
176642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    if (const PointerType* ToPtrType = ToType->getAs<PointerType>())
177642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata      return ToPtrType->getPointeeType()->isVoidType();
178642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata
179642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  return false;
180642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata}
181929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata
182642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata/// DebugPrint - Print this standard conversion sequence to standard
183311358a1cac22781ecffe697a808bd43eac73bcePetr Machata/// error. Useful for debugging overloading issues.
184311358a1cac22781ecffe697a808bd43eac73bcePetr Machatavoid StandardConversionSequence::DebugPrint() const {
185311358a1cac22781ecffe697a808bd43eac73bcePetr Machata  bool PrintedSomething = false;
186311358a1cac22781ecffe697a808bd43eac73bcePetr Machata  if (First != ICK_Identity) {
187311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    fprintf(stderr, "%s", GetImplicitConversionName(First));
188311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    PrintedSomething = true;
189642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  }
190ba1664b062414481d0f37d06bb01a19874c8d481Petr Machata
191ba1664b062414481d0f37d06bb01a19874c8d481Petr Machata  if (Second != ICK_Identity) {
192929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata    if (PrintedSomething) {
193642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata      fprintf(stderr, " -> ");
194642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    }
195642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    fprintf(stderr, "%s", GetImplicitConversionName(Second));
196642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata
197642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    if (CopyConstructor) {
198642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata      fprintf(stderr, " (by copy constructor)");
199642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    } else if (DirectBinding) {
200642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata      fprintf(stderr, " (direct reference binding)");
201929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata    } else if (ReferenceBinding) {
202642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata      fprintf(stderr, " (reference binding)");
203311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    }
204311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    PrintedSomething = true;
205311358a1cac22781ecffe697a808bd43eac73bcePetr Machata  }
206da69ed0785ff0a9790f8edadb73fe21013aa118bPetr Machata
207da69ed0785ff0a9790f8edadb73fe21013aa118bPetr Machata  if (Third != ICK_Identity) {
208929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata    if (PrintedSomething) {
209311358a1cac22781ecffe697a808bd43eac73bcePetr Machata      fprintf(stderr, " -> ");
210311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    }
211311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    fprintf(stderr, "%s", GetImplicitConversionName(Third));
212311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    PrintedSomething = true;
213311358a1cac22781ecffe697a808bd43eac73bcePetr Machata  }
214311358a1cac22781ecffe697a808bd43eac73bcePetr Machata
215311358a1cac22781ecffe697a808bd43eac73bcePetr Machata  if (!PrintedSomething) {
216311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    fprintf(stderr, "No conversions required");
217311358a1cac22781ecffe697a808bd43eac73bcePetr Machata  }
218311358a1cac22781ecffe697a808bd43eac73bcePetr Machata}
219311358a1cac22781ecffe697a808bd43eac73bcePetr Machata
220311358a1cac22781ecffe697a808bd43eac73bcePetr Machata/// DebugPrint - Print this user-defined conversion sequence to standard
221311358a1cac22781ecffe697a808bd43eac73bcePetr Machata/// error. Useful for debugging overloading issues.
222311358a1cac22781ecffe697a808bd43eac73bcePetr Machatavoid UserDefinedConversionSequence::DebugPrint() const {
223311358a1cac22781ecffe697a808bd43eac73bcePetr Machata  if (Before.First || Before.Second || Before.Third) {
224311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    Before.DebugPrint();
225311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    fprintf(stderr, " -> ");
226311358a1cac22781ecffe697a808bd43eac73bcePetr Machata  }
227642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  fprintf(stderr, "'%s'", ConversionFunction->getNameAsString().c_str());
228642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  if (After.First || After.Second || After.Third) {
229642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    fprintf(stderr, " -> ");
230311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    After.DebugPrint();
231311358a1cac22781ecffe697a808bd43eac73bcePetr Machata  }
232311358a1cac22781ecffe697a808bd43eac73bcePetr Machata}
233311358a1cac22781ecffe697a808bd43eac73bcePetr Machata
234311358a1cac22781ecffe697a808bd43eac73bcePetr Machata/// DebugPrint - Print this implicit conversion sequence to standard
235929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata/// error. Useful for debugging overloading issues.
236642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machatavoid ImplicitConversionSequence::DebugPrint() const {
237642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  switch (ConversionKind) {
238642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  case StandardConversion:
239311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    fprintf(stderr, "Standard conversion: ");
240311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    Standard.DebugPrint();
241311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    break;
242642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  case UserDefinedConversion:
243642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    fprintf(stderr, "User-defined conversion: ");
244642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    UserDefined.DebugPrint();
245642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    break;
246311358a1cac22781ecffe697a808bd43eac73bcePetr Machata  case EllipsisConversion:
247311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    fprintf(stderr, "Ellipsis conversion");
248311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    break;
249311358a1cac22781ecffe697a808bd43eac73bcePetr Machata  case BadConversion:
250311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    fprintf(stderr, "Bad conversion");
251642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    break;
252642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  }
253642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata
254642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata  fprintf(stderr, "\n");
255642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata}
256311358a1cac22781ecffe697a808bd43eac73bcePetr Machata
257311358a1cac22781ecffe697a808bd43eac73bcePetr Machata// IsOverload - Determine whether the given New declaration is an
258311358a1cac22781ecffe697a808bd43eac73bcePetr Machata// overload of the Old declaration. This routine returns false if New
259311358a1cac22781ecffe697a808bd43eac73bcePetr Machata// and Old cannot be overloaded, e.g., if they are functions with the
260311358a1cac22781ecffe697a808bd43eac73bcePetr Machata// same signature (C++ 1.3.10) or if the Old declaration isn't a
261311358a1cac22781ecffe697a808bd43eac73bcePetr Machata// function (or overload set). When it does return false and Old is an
262929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata// OverloadedFunctionDecl, MatchedDecl will be set to point to the
263929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata// FunctionDecl that New cannot be overloaded with.
264929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata//
265929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata// Example: Given the following input:
266642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata//
2670f6e6d9861ce790cb8b7d07aca28a5878d705359Petr Machata//   void f(int, float); // #1
2680f6e6d9861ce790cb8b7d07aca28a5878d705359Petr Machata//   void f(int, int); // #2
2690f6e6d9861ce790cb8b7d07aca28a5878d705359Petr Machata//   int f(int, int); // #3
2700f6e6d9861ce790cb8b7d07aca28a5878d705359Petr Machata//
271929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata// When we process #1, there is no previous declaration of "f",
272929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata// so IsOverload will not be used.
273929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata//
274929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata// When we process #2, Old is a FunctionDecl for #1.  By comparing the
2750f6e6d9861ce790cb8b7d07aca28a5878d705359Petr Machata// parameter types, we see that #1 and #2 are overloaded (since they
276b5920d12ceb3dec3d359d8b2972fd22a30c72a66Edgar E. Iglesias// have different signatures), so this routine returns false;
277b5920d12ceb3dec3d359d8b2972fd22a30c72a66Edgar E. Iglesias// MatchedDecl is unchanged.
278b5920d12ceb3dec3d359d8b2972fd22a30c72a66Edgar E. Iglesias//
279b5920d12ceb3dec3d359d8b2972fd22a30c72a66Edgar E. Iglesias// When we process #3, Old is an OverloadedFunctionDecl containing #1
280b5920d12ceb3dec3d359d8b2972fd22a30c72a66Edgar E. Iglesias// and #2. We compare the signatures of #3 to #1 (they're overloaded,
281b5920d12ceb3dec3d359d8b2972fd22a30c72a66Edgar E. Iglesias// so we do nothing) and then #3 to #2. Since the signatures of #3 and
282b5920d12ceb3dec3d359d8b2972fd22a30c72a66Edgar E. Iglesias// #2 are identical (return types of functions are not part of the
283b5920d12ceb3dec3d359d8b2972fd22a30c72a66Edgar E. Iglesias// signature), IsOverload returns false and MatchedDecl will be set to
284b5920d12ceb3dec3d359d8b2972fd22a30c72a66Edgar E. Iglesias// point to the FunctionDecl for #2.
285b5920d12ceb3dec3d359d8b2972fd22a30c72a66Edgar E. Iglesiasbool
286b5920d12ceb3dec3d359d8b2972fd22a30c72a66Edgar E. IglesiasSema::IsOverload(FunctionDecl *New, Decl* OldD,
287b5920d12ceb3dec3d359d8b2972fd22a30c72a66Edgar E. Iglesias                 OverloadedFunctionDecl::function_iterator& MatchedDecl) {
288b5920d12ceb3dec3d359d8b2972fd22a30c72a66Edgar E. Iglesias  if (OverloadedFunctionDecl* Ovl = dyn_cast<OverloadedFunctionDecl>(OldD)) {
289b5920d12ceb3dec3d359d8b2972fd22a30c72a66Edgar E. Iglesias    // Is this new function an overload of every function in the
290b5920d12ceb3dec3d359d8b2972fd22a30c72a66Edgar E. Iglesias    // overload set?
291311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    OverloadedFunctionDecl::function_iterator Func = Ovl->function_begin(),
292311358a1cac22781ecffe697a808bd43eac73bcePetr Machata                                           FuncEnd = Ovl->function_end();
293311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    for (; Func != FuncEnd; ++Func) {
294311358a1cac22781ecffe697a808bd43eac73bcePetr Machata      if (!IsOverload(New, *Func, MatchedDecl)) {
295311358a1cac22781ecffe697a808bd43eac73bcePetr Machata        MatchedDecl = Func;
296642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata        return false;
297311358a1cac22781ecffe697a808bd43eac73bcePetr Machata      }
298311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    }
299311358a1cac22781ecffe697a808bd43eac73bcePetr Machata
300311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    // This function overloads every function in the overload set.
301311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    return true;
302311358a1cac22781ecffe697a808bd43eac73bcePetr Machata  } else if (FunctionTemplateDecl *Old = dyn_cast<FunctionTemplateDecl>(OldD))
303311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    return IsOverload(New, Old->getTemplatedDecl(), MatchedDecl);
304311358a1cac22781ecffe697a808bd43eac73bcePetr Machata  else if (FunctionDecl* Old = dyn_cast<FunctionDecl>(OldD)) {
305311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    FunctionTemplateDecl *OldTemplate = Old->getDescribedFunctionTemplate();
306311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    FunctionTemplateDecl *NewTemplate = New->getDescribedFunctionTemplate();
307311358a1cac22781ecffe697a808bd43eac73bcePetr Machata
308311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    // C++ [temp.fct]p2:
309929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata    //   A function template can be overloaded with other function templates
310311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    //   and with normal (non-template) functions.
311311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    if ((OldTemplate == 0) != (NewTemplate == 0))
312311358a1cac22781ecffe697a808bd43eac73bcePetr Machata      return true;
313311358a1cac22781ecffe697a808bd43eac73bcePetr Machata
314311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    // Is the function New an overload of the function Old?
315311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    QualType OldQType = Context.getCanonicalType(Old->getType());
316929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata    QualType NewQType = Context.getCanonicalType(New->getType());
317642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata
3183a1806db0ecaa4364e51b4822d66d05f4acd87a9Edgar E. Iglesias    // Compare the signatures (C++ 1.3.10) of the two functions to
3193a1806db0ecaa4364e51b4822d66d05f4acd87a9Edgar E. Iglesias    // determine whether they are overloads. If we find any mismatch
320929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata    // in the signature, they are overloads.
3213a1806db0ecaa4364e51b4822d66d05f4acd87a9Edgar E. Iglesias
32211c3c3e28461886bb16c69c745b1fefa946c4d9fEdgar E. Iglesias    // If either of these functions is a K&R-style function (no
32311c3c3e28461886bb16c69c745b1fefa946c4d9fEdgar E. Iglesias    // prototype), then we consider them to have matching signatures.
32411c3c3e28461886bb16c69c745b1fefa946c4d9fEdgar E. Iglesias    if (isa<FunctionNoProtoType>(OldQType.getTypePtr()) ||
32511c3c3e28461886bb16c69c745b1fefa946c4d9fEdgar E. Iglesias        isa<FunctionNoProtoType>(NewQType.getTypePtr()))
32611c3c3e28461886bb16c69c745b1fefa946c4d9fEdgar E. Iglesias      return false;
32711c3c3e28461886bb16c69c745b1fefa946c4d9fEdgar E. Iglesias
32811c3c3e28461886bb16c69c745b1fefa946c4d9fEdgar E. Iglesias    FunctionProtoType* OldType = cast<FunctionProtoType>(OldQType);
32911c3c3e28461886bb16c69c745b1fefa946c4d9fEdgar E. Iglesias    FunctionProtoType* NewType = cast<FunctionProtoType>(NewQType);
330929bd57ca202fd2f2e8485ebf65d683e664f67b5Petr Machata
33111c3c3e28461886bb16c69c745b1fefa946c4d9fEdgar E. Iglesias    // The signature of a function includes the types of its
33211c3c3e28461886bb16c69c745b1fefa946c4d9fEdgar E. Iglesias    // parameters (C++ 1.3.10), which includes the presence or absence
333311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    // of the ellipsis; see C++ DR 357).
334311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    if (OldQType != NewQType &&
335311358a1cac22781ecffe697a808bd43eac73bcePetr Machata        (OldType->getNumArgs() != NewType->getNumArgs() ||
336311358a1cac22781ecffe697a808bd43eac73bcePetr Machata         OldType->isVariadic() != NewType->isVariadic() ||
337311358a1cac22781ecffe697a808bd43eac73bcePetr Machata         !std::equal(OldType->arg_type_begin(), OldType->arg_type_end(),
338311358a1cac22781ecffe697a808bd43eac73bcePetr Machata                     NewType->arg_type_begin())))
339311358a1cac22781ecffe697a808bd43eac73bcePetr Machata      return true;
340311358a1cac22781ecffe697a808bd43eac73bcePetr Machata
341311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    // C++ [temp.over.link]p4:
342311358a1cac22781ecffe697a808bd43eac73bcePetr Machata    //   The signature of a function template consists of its function
343642626096a694c6af279d25d2b1b2fba5b10ddfbPetr Machata    //   signature, its return type and its template parameter list. The names
344    //   of the template parameters are significant only for establishing the
345    //   relationship between the template parameters and the rest of the
346    //   signature.
347    //
348    // We check the return type and template parameter lists for function
349    // templates first; the remaining checks follow.
350    if (NewTemplate &&
351        (!TemplateParameterListsAreEqual(NewTemplate->getTemplateParameters(),
352                                         OldTemplate->getTemplateParameters(),
353                                         false, false, SourceLocation()) ||
354         OldType->getResultType() != NewType->getResultType()))
355      return true;
356
357    // If the function is a class member, its signature includes the
358    // cv-qualifiers (if any) on the function itself.
359    //
360    // As part of this, also check whether one of the member functions
361    // is static, in which case they are not overloads (C++
362    // 13.1p2). While not part of the definition of the signature,
363    // this check is important to determine whether these functions
364    // can be overloaded.
365    CXXMethodDecl* OldMethod = dyn_cast<CXXMethodDecl>(Old);
366    CXXMethodDecl* NewMethod = dyn_cast<CXXMethodDecl>(New);
367    if (OldMethod && NewMethod &&
368        !OldMethod->isStatic() && !NewMethod->isStatic() &&
369        OldMethod->getTypeQualifiers() != NewMethod->getTypeQualifiers())
370      return true;
371
372    // The signatures match; this is not an overload.
373    return false;
374  } else {
375    // (C++ 13p1):
376    //   Only function declarations can be overloaded; object and type
377    //   declarations cannot be overloaded.
378    return false;
379  }
380}
381
382/// TryImplicitConversion - Attempt to perform an implicit conversion
383/// from the given expression (Expr) to the given type (ToType). This
384/// function returns an implicit conversion sequence that can be used
385/// to perform the initialization. Given
386///
387///   void f(float f);
388///   void g(int i) { f(i); }
389///
390/// this routine would produce an implicit conversion sequence to
391/// describe the initialization of f from i, which will be a standard
392/// conversion sequence containing an lvalue-to-rvalue conversion (C++
393/// 4.1) followed by a floating-integral conversion (C++ 4.9).
394//
395/// Note that this routine only determines how the conversion can be
396/// performed; it does not actually perform the conversion. As such,
397/// it will not produce any diagnostics if no conversion is available,
398/// but will instead return an implicit conversion sequence of kind
399/// "BadConversion".
400///
401/// If @p SuppressUserConversions, then user-defined conversions are
402/// not permitted.
403/// If @p AllowExplicit, then explicit user-defined conversions are
404/// permitted.
405/// If @p ForceRValue, then overloading is performed as if From was an rvalue,
406/// no matter its actual lvalueness.
407/// If @p UserCast, the implicit conversion is being done for a user-specified
408/// cast.
409ImplicitConversionSequence
410Sema::TryImplicitConversion(Expr* From, QualType ToType,
411                            bool SuppressUserConversions,
412                            bool AllowExplicit, bool ForceRValue,
413                            bool InOverloadResolution,
414                            bool UserCast) {
415  ImplicitConversionSequence ICS;
416  OverloadCandidateSet Conversions;
417  OverloadingResult UserDefResult = OR_Success;
418  if (IsStandardConversion(From, ToType, InOverloadResolution, ICS.Standard))
419    ICS.ConversionKind = ImplicitConversionSequence::StandardConversion;
420  else if (getLangOptions().CPlusPlus &&
421           (UserDefResult = IsUserDefinedConversion(From, ToType,
422                                   ICS.UserDefined,
423                                   Conversions,
424                                   !SuppressUserConversions, AllowExplicit,
425				   ForceRValue, UserCast)) == OR_Success) {
426    ICS.ConversionKind = ImplicitConversionSequence::UserDefinedConversion;
427    // C++ [over.ics.user]p4:
428    //   A conversion of an expression of class type to the same class
429    //   type is given Exact Match rank, and a conversion of an
430    //   expression of class type to a base class of that type is
431    //   given Conversion rank, in spite of the fact that a copy
432    //   constructor (i.e., a user-defined conversion function) is
433    //   called for those cases.
434    if (CXXConstructorDecl *Constructor
435          = dyn_cast<CXXConstructorDecl>(ICS.UserDefined.ConversionFunction)) {
436      QualType FromCanon
437        = Context.getCanonicalType(From->getType().getUnqualifiedType());
438      QualType ToCanon = Context.getCanonicalType(ToType).getUnqualifiedType();
439      if (FromCanon == ToCanon || IsDerivedFrom(FromCanon, ToCanon)) {
440        // Turn this into a "standard" conversion sequence, so that it
441        // gets ranked with standard conversion sequences.
442        ICS.ConversionKind = ImplicitConversionSequence::StandardConversion;
443        ICS.Standard.setAsIdentityConversion();
444        ICS.Standard.FromTypePtr = From->getType().getAsOpaquePtr();
445        ICS.Standard.ToTypePtr = ToType.getAsOpaquePtr();
446        ICS.Standard.CopyConstructor = Constructor;
447        if (ToCanon != FromCanon)
448          ICS.Standard.Second = ICK_Derived_To_Base;
449      }
450    }
451
452    // C++ [over.best.ics]p4:
453    //   However, when considering the argument of a user-defined
454    //   conversion function that is a candidate by 13.3.1.3 when
455    //   invoked for the copying of the temporary in the second step
456    //   of a class copy-initialization, or by 13.3.1.4, 13.3.1.5, or
457    //   13.3.1.6 in all cases, only standard conversion sequences and
458    //   ellipsis conversion sequences are allowed.
459    if (SuppressUserConversions &&
460        ICS.ConversionKind == ImplicitConversionSequence::UserDefinedConversion)
461      ICS.ConversionKind = ImplicitConversionSequence::BadConversion;
462  } else {
463    ICS.ConversionKind = ImplicitConversionSequence::BadConversion;
464    if (UserDefResult == OR_Ambiguous) {
465      for (OverloadCandidateSet::iterator Cand = Conversions.begin();
466           Cand != Conversions.end(); ++Cand)
467        ICS.ConversionFunctionSet.push_back(Cand->Function);
468    }
469  }
470
471  return ICS;
472}
473
474/// IsStandardConversion - Determines whether there is a standard
475/// conversion sequence (C++ [conv], C++ [over.ics.scs]) from the
476/// expression From to the type ToType. Standard conversion sequences
477/// only consider non-class types; for conversions that involve class
478/// types, use TryImplicitConversion. If a conversion exists, SCS will
479/// contain the standard conversion sequence required to perform this
480/// conversion and this routine will return true. Otherwise, this
481/// routine will return false and the value of SCS is unspecified.
482bool
483Sema::IsStandardConversion(Expr* From, QualType ToType,
484                           bool InOverloadResolution,
485                           StandardConversionSequence &SCS) {
486  QualType FromType = From->getType();
487
488  // Standard conversions (C++ [conv])
489  SCS.setAsIdentityConversion();
490  SCS.Deprecated = false;
491  SCS.IncompatibleObjC = false;
492  SCS.FromTypePtr = FromType.getAsOpaquePtr();
493  SCS.CopyConstructor = 0;
494
495  // There are no standard conversions for class types in C++, so
496  // abort early. When overloading in C, however, we do permit
497  if (FromType->isRecordType() || ToType->isRecordType()) {
498    if (getLangOptions().CPlusPlus)
499      return false;
500
501    // When we're overloading in C, we allow, as standard conversions,
502  }
503
504  // The first conversion can be an lvalue-to-rvalue conversion,
505  // array-to-pointer conversion, or function-to-pointer conversion
506  // (C++ 4p1).
507
508  // Lvalue-to-rvalue conversion (C++ 4.1):
509  //   An lvalue (3.10) of a non-function, non-array type T can be
510  //   converted to an rvalue.
511  Expr::isLvalueResult argIsLvalue = From->isLvalue(Context);
512  if (argIsLvalue == Expr::LV_Valid &&
513      !FromType->isFunctionType() && !FromType->isArrayType() &&
514      Context.getCanonicalType(FromType) != Context.OverloadTy) {
515    SCS.First = ICK_Lvalue_To_Rvalue;
516
517    // If T is a non-class type, the type of the rvalue is the
518    // cv-unqualified version of T. Otherwise, the type of the rvalue
519    // is T (C++ 4.1p1). C++ can't get here with class types; in C, we
520    // just strip the qualifiers because they don't matter.
521
522    // FIXME: Doesn't see through to qualifiers behind a typedef!
523    FromType = FromType.getUnqualifiedType();
524  } else if (FromType->isArrayType()) {
525    // Array-to-pointer conversion (C++ 4.2)
526    SCS.First = ICK_Array_To_Pointer;
527
528    // An lvalue or rvalue of type "array of N T" or "array of unknown
529    // bound of T" can be converted to an rvalue of type "pointer to
530    // T" (C++ 4.2p1).
531    FromType = Context.getArrayDecayedType(FromType);
532
533    if (IsStringLiteralToNonConstPointerConversion(From, ToType)) {
534      // This conversion is deprecated. (C++ D.4).
535      SCS.Deprecated = true;
536
537      // For the purpose of ranking in overload resolution
538      // (13.3.3.1.1), this conversion is considered an
539      // array-to-pointer conversion followed by a qualification
540      // conversion (4.4). (C++ 4.2p2)
541      SCS.Second = ICK_Identity;
542      SCS.Third = ICK_Qualification;
543      SCS.ToTypePtr = ToType.getAsOpaquePtr();
544      return true;
545    }
546  } else if (FromType->isFunctionType() && argIsLvalue == Expr::LV_Valid) {
547    // Function-to-pointer conversion (C++ 4.3).
548    SCS.First = ICK_Function_To_Pointer;
549
550    // An lvalue of function type T can be converted to an rvalue of
551    // type "pointer to T." The result is a pointer to the
552    // function. (C++ 4.3p1).
553    FromType = Context.getPointerType(FromType);
554  } else if (FunctionDecl *Fn
555             = ResolveAddressOfOverloadedFunction(From, ToType, false)) {
556    // Address of overloaded function (C++ [over.over]).
557    SCS.First = ICK_Function_To_Pointer;
558
559    // We were able to resolve the address of the overloaded function,
560    // so we can convert to the type of that function.
561    FromType = Fn->getType();
562    if (ToType->isLValueReferenceType())
563      FromType = Context.getLValueReferenceType(FromType);
564    else if (ToType->isRValueReferenceType())
565      FromType = Context.getRValueReferenceType(FromType);
566    else if (ToType->isMemberPointerType()) {
567      // Resolve address only succeeds if both sides are member pointers,
568      // but it doesn't have to be the same class. See DR 247.
569      // Note that this means that the type of &Derived::fn can be
570      // Ret (Base::*)(Args) if the fn overload actually found is from the
571      // base class, even if it was brought into the derived class via a
572      // using declaration. The standard isn't clear on this issue at all.
573      CXXMethodDecl *M = cast<CXXMethodDecl>(Fn);
574      FromType = Context.getMemberPointerType(FromType,
575                    Context.getTypeDeclType(M->getParent()).getTypePtr());
576    } else
577      FromType = Context.getPointerType(FromType);
578  } else {
579    // We don't require any conversions for the first step.
580    SCS.First = ICK_Identity;
581  }
582
583  // The second conversion can be an integral promotion, floating
584  // point promotion, integral conversion, floating point conversion,
585  // floating-integral conversion, pointer conversion,
586  // pointer-to-member conversion, or boolean conversion (C++ 4p1).
587  // For overloading in C, this can also be a "compatible-type"
588  // conversion.
589  bool IncompatibleObjC = false;
590  if (Context.hasSameUnqualifiedType(FromType, ToType)) {
591    // The unqualified versions of the types are the same: there's no
592    // conversion to do.
593    SCS.Second = ICK_Identity;
594  } else if (IsIntegralPromotion(From, FromType, ToType)) {
595    // Integral promotion (C++ 4.5).
596    SCS.Second = ICK_Integral_Promotion;
597    FromType = ToType.getUnqualifiedType();
598  } else if (IsFloatingPointPromotion(FromType, ToType)) {
599    // Floating point promotion (C++ 4.6).
600    SCS.Second = ICK_Floating_Promotion;
601    FromType = ToType.getUnqualifiedType();
602  } else if (IsComplexPromotion(FromType, ToType)) {
603    // Complex promotion (Clang extension)
604    SCS.Second = ICK_Complex_Promotion;
605    FromType = ToType.getUnqualifiedType();
606  } else if ((FromType->isIntegralType() || FromType->isEnumeralType()) &&
607           (ToType->isIntegralType() && !ToType->isEnumeralType())) {
608    // Integral conversions (C++ 4.7).
609    // FIXME: isIntegralType shouldn't be true for enums in C++.
610    SCS.Second = ICK_Integral_Conversion;
611    FromType = ToType.getUnqualifiedType();
612  } else if (FromType->isFloatingType() && ToType->isFloatingType()) {
613    // Floating point conversions (C++ 4.8).
614    SCS.Second = ICK_Floating_Conversion;
615    FromType = ToType.getUnqualifiedType();
616  } else if (FromType->isComplexType() && ToType->isComplexType()) {
617    // Complex conversions (C99 6.3.1.6)
618    SCS.Second = ICK_Complex_Conversion;
619    FromType = ToType.getUnqualifiedType();
620  } else if ((FromType->isFloatingType() &&
621              ToType->isIntegralType() && (!ToType->isBooleanType() &&
622                                           !ToType->isEnumeralType())) ||
623             ((FromType->isIntegralType() || FromType->isEnumeralType()) &&
624              ToType->isFloatingType())) {
625    // Floating-integral conversions (C++ 4.9).
626    // FIXME: isIntegralType shouldn't be true for enums in C++.
627    SCS.Second = ICK_Floating_Integral;
628    FromType = ToType.getUnqualifiedType();
629  } else if ((FromType->isComplexType() && ToType->isArithmeticType()) ||
630             (ToType->isComplexType() && FromType->isArithmeticType())) {
631    // Complex-real conversions (C99 6.3.1.7)
632    SCS.Second = ICK_Complex_Real;
633    FromType = ToType.getUnqualifiedType();
634  } else if (IsPointerConversion(From, FromType, ToType, InOverloadResolution,
635                                 FromType, IncompatibleObjC)) {
636    // Pointer conversions (C++ 4.10).
637    SCS.Second = ICK_Pointer_Conversion;
638    SCS.IncompatibleObjC = IncompatibleObjC;
639  } else if (IsMemberPointerConversion(From, FromType, ToType,
640                                       InOverloadResolution, FromType)) {
641    // Pointer to member conversions (4.11).
642    SCS.Second = ICK_Pointer_Member;
643  } else if (ToType->isBooleanType() &&
644             (FromType->isArithmeticType() ||
645              FromType->isEnumeralType() ||
646              FromType->isPointerType() ||
647              FromType->isBlockPointerType() ||
648              FromType->isMemberPointerType() ||
649              FromType->isNullPtrType())) {
650    // Boolean conversions (C++ 4.12).
651    SCS.Second = ICK_Boolean_Conversion;
652    FromType = Context.BoolTy;
653  } else if (!getLangOptions().CPlusPlus &&
654             Context.typesAreCompatible(ToType, FromType)) {
655    // Compatible conversions (Clang extension for C function overloading)
656    SCS.Second = ICK_Compatible_Conversion;
657  } else {
658    // No second conversion required.
659    SCS.Second = ICK_Identity;
660  }
661
662  QualType CanonFrom;
663  QualType CanonTo;
664  // The third conversion can be a qualification conversion (C++ 4p1).
665  if (IsQualificationConversion(FromType, ToType)) {
666    SCS.Third = ICK_Qualification;
667    FromType = ToType;
668    CanonFrom = Context.getCanonicalType(FromType);
669    CanonTo = Context.getCanonicalType(ToType);
670  } else {
671    // No conversion required
672    SCS.Third = ICK_Identity;
673
674    // C++ [over.best.ics]p6:
675    //   [...] Any difference in top-level cv-qualification is
676    //   subsumed by the initialization itself and does not constitute
677    //   a conversion. [...]
678    CanonFrom = Context.getCanonicalType(FromType);
679    CanonTo = Context.getCanonicalType(ToType);
680    if (CanonFrom.getUnqualifiedType() == CanonTo.getUnqualifiedType() &&
681        CanonFrom.getCVRQualifiers() != CanonTo.getCVRQualifiers()) {
682      FromType = ToType;
683      CanonFrom = CanonTo;
684    }
685  }
686
687  // If we have not converted the argument type to the parameter type,
688  // this is a bad conversion sequence.
689  if (CanonFrom != CanonTo)
690    return false;
691
692  SCS.ToTypePtr = FromType.getAsOpaquePtr();
693  return true;
694}
695
696/// IsIntegralPromotion - Determines whether the conversion from the
697/// expression From (whose potentially-adjusted type is FromType) to
698/// ToType is an integral promotion (C++ 4.5). If so, returns true and
699/// sets PromotedType to the promoted type.
700bool Sema::IsIntegralPromotion(Expr *From, QualType FromType, QualType ToType) {
701  const BuiltinType *To = ToType->getAs<BuiltinType>();
702  // All integers are built-in.
703  if (!To) {
704    return false;
705  }
706
707  // An rvalue of type char, signed char, unsigned char, short int, or
708  // unsigned short int can be converted to an rvalue of type int if
709  // int can represent all the values of the source type; otherwise,
710  // the source rvalue can be converted to an rvalue of type unsigned
711  // int (C++ 4.5p1).
712  if (FromType->isPromotableIntegerType() && !FromType->isBooleanType()) {
713    if (// We can promote any signed, promotable integer type to an int
714        (FromType->isSignedIntegerType() ||
715         // We can promote any unsigned integer type whose size is
716         // less than int to an int.
717         (!FromType->isSignedIntegerType() &&
718          Context.getTypeSize(FromType) < Context.getTypeSize(ToType)))) {
719      return To->getKind() == BuiltinType::Int;
720    }
721
722    return To->getKind() == BuiltinType::UInt;
723  }
724
725  // An rvalue of type wchar_t (3.9.1) or an enumeration type (7.2)
726  // can be converted to an rvalue of the first of the following types
727  // that can represent all the values of its underlying type: int,
728  // unsigned int, long, or unsigned long (C++ 4.5p2).
729  if ((FromType->isEnumeralType() || FromType->isWideCharType())
730      && ToType->isIntegerType()) {
731    // Determine whether the type we're converting from is signed or
732    // unsigned.
733    bool FromIsSigned;
734    uint64_t FromSize = Context.getTypeSize(FromType);
735    if (const EnumType *FromEnumType = FromType->getAs<EnumType>()) {
736      QualType UnderlyingType = FromEnumType->getDecl()->getIntegerType();
737      FromIsSigned = UnderlyingType->isSignedIntegerType();
738    } else {
739      // FIXME: Is wchar_t signed or unsigned? We assume it's signed for now.
740      FromIsSigned = true;
741    }
742
743    // The types we'll try to promote to, in the appropriate
744    // order. Try each of these types.
745    QualType PromoteTypes[6] = {
746      Context.IntTy, Context.UnsignedIntTy,
747      Context.LongTy, Context.UnsignedLongTy ,
748      Context.LongLongTy, Context.UnsignedLongLongTy
749    };
750    for (int Idx = 0; Idx < 6; ++Idx) {
751      uint64_t ToSize = Context.getTypeSize(PromoteTypes[Idx]);
752      if (FromSize < ToSize ||
753          (FromSize == ToSize &&
754           FromIsSigned == PromoteTypes[Idx]->isSignedIntegerType())) {
755        // We found the type that we can promote to. If this is the
756        // type we wanted, we have a promotion. Otherwise, no
757        // promotion.
758        return Context.getCanonicalType(ToType).getUnqualifiedType()
759          == Context.getCanonicalType(PromoteTypes[Idx]).getUnqualifiedType();
760      }
761    }
762  }
763
764  // An rvalue for an integral bit-field (9.6) can be converted to an
765  // rvalue of type int if int can represent all the values of the
766  // bit-field; otherwise, it can be converted to unsigned int if
767  // unsigned int can represent all the values of the bit-field. If
768  // the bit-field is larger yet, no integral promotion applies to
769  // it. If the bit-field has an enumerated type, it is treated as any
770  // other value of that type for promotion purposes (C++ 4.5p3).
771  // FIXME: We should delay checking of bit-fields until we actually perform the
772  // conversion.
773  using llvm::APSInt;
774  if (From)
775    if (FieldDecl *MemberDecl = From->getBitField()) {
776      APSInt BitWidth;
777      if (FromType->isIntegralType() && !FromType->isEnumeralType() &&
778          MemberDecl->getBitWidth()->isIntegerConstantExpr(BitWidth, Context)) {
779        APSInt ToSize(BitWidth.getBitWidth(), BitWidth.isUnsigned());
780        ToSize = Context.getTypeSize(ToType);
781
782        // Are we promoting to an int from a bitfield that fits in an int?
783        if (BitWidth < ToSize ||
784            (FromType->isSignedIntegerType() && BitWidth <= ToSize)) {
785          return To->getKind() == BuiltinType::Int;
786        }
787
788        // Are we promoting to an unsigned int from an unsigned bitfield
789        // that fits into an unsigned int?
790        if (FromType->isUnsignedIntegerType() && BitWidth <= ToSize) {
791          return To->getKind() == BuiltinType::UInt;
792        }
793
794        return false;
795      }
796    }
797
798  // An rvalue of type bool can be converted to an rvalue of type int,
799  // with false becoming zero and true becoming one (C++ 4.5p4).
800  if (FromType->isBooleanType() && To->getKind() == BuiltinType::Int) {
801    return true;
802  }
803
804  return false;
805}
806
807/// IsFloatingPointPromotion - Determines whether the conversion from
808/// FromType to ToType is a floating point promotion (C++ 4.6). If so,
809/// returns true and sets PromotedType to the promoted type.
810bool Sema::IsFloatingPointPromotion(QualType FromType, QualType ToType) {
811  /// An rvalue of type float can be converted to an rvalue of type
812  /// double. (C++ 4.6p1).
813  if (const BuiltinType *FromBuiltin = FromType->getAs<BuiltinType>())
814    if (const BuiltinType *ToBuiltin = ToType->getAs<BuiltinType>()) {
815      if (FromBuiltin->getKind() == BuiltinType::Float &&
816          ToBuiltin->getKind() == BuiltinType::Double)
817        return true;
818
819      // C99 6.3.1.5p1:
820      //   When a float is promoted to double or long double, or a
821      //   double is promoted to long double [...].
822      if (!getLangOptions().CPlusPlus &&
823          (FromBuiltin->getKind() == BuiltinType::Float ||
824           FromBuiltin->getKind() == BuiltinType::Double) &&
825          (ToBuiltin->getKind() == BuiltinType::LongDouble))
826        return true;
827    }
828
829  return false;
830}
831
832/// \brief Determine if a conversion is a complex promotion.
833///
834/// A complex promotion is defined as a complex -> complex conversion
835/// where the conversion between the underlying real types is a
836/// floating-point or integral promotion.
837bool Sema::IsComplexPromotion(QualType FromType, QualType ToType) {
838  const ComplexType *FromComplex = FromType->getAs<ComplexType>();
839  if (!FromComplex)
840    return false;
841
842  const ComplexType *ToComplex = ToType->getAs<ComplexType>();
843  if (!ToComplex)
844    return false;
845
846  return IsFloatingPointPromotion(FromComplex->getElementType(),
847                                  ToComplex->getElementType()) ||
848    IsIntegralPromotion(0, FromComplex->getElementType(),
849                        ToComplex->getElementType());
850}
851
852/// BuildSimilarlyQualifiedPointerType - In a pointer conversion from
853/// the pointer type FromPtr to a pointer to type ToPointee, with the
854/// same type qualifiers as FromPtr has on its pointee type. ToType,
855/// if non-empty, will be a pointer to ToType that may or may not have
856/// the right set of qualifiers on its pointee.
857static QualType
858BuildSimilarlyQualifiedPointerType(const PointerType *FromPtr,
859                                   QualType ToPointee, QualType ToType,
860                                   ASTContext &Context) {
861  QualType CanonFromPointee = Context.getCanonicalType(FromPtr->getPointeeType());
862  QualType CanonToPointee = Context.getCanonicalType(ToPointee);
863  Qualifiers Quals = CanonFromPointee.getQualifiers();
864
865  // Exact qualifier match -> return the pointer type we're converting to.
866  if (CanonToPointee.getQualifiers() == Quals) {
867    // ToType is exactly what we need. Return it.
868    if (!ToType.isNull())
869      return ToType;
870
871    // Build a pointer to ToPointee. It has the right qualifiers
872    // already.
873    return Context.getPointerType(ToPointee);
874  }
875
876  // Just build a canonical type that has the right qualifiers.
877  return Context.getPointerType(
878         Context.getQualifiedType(CanonToPointee.getUnqualifiedType(), Quals));
879}
880
881static bool isNullPointerConstantForConversion(Expr *Expr,
882                                               bool InOverloadResolution,
883                                               ASTContext &Context) {
884  // Handle value-dependent integral null pointer constants correctly.
885  // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#903
886  if (Expr->isValueDependent() && !Expr->isTypeDependent() &&
887      Expr->getType()->isIntegralType())
888    return !InOverloadResolution;
889
890  return Expr->isNullPointerConstant(Context,
891                    InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
892                                        : Expr::NPC_ValueDependentIsNull);
893}
894
895/// IsPointerConversion - Determines whether the conversion of the
896/// expression From, which has the (possibly adjusted) type FromType,
897/// can be converted to the type ToType via a pointer conversion (C++
898/// 4.10). If so, returns true and places the converted type (that
899/// might differ from ToType in its cv-qualifiers at some level) into
900/// ConvertedType.
901///
902/// This routine also supports conversions to and from block pointers
903/// and conversions with Objective-C's 'id', 'id<protocols...>', and
904/// pointers to interfaces. FIXME: Once we've determined the
905/// appropriate overloading rules for Objective-C, we may want to
906/// split the Objective-C checks into a different routine; however,
907/// GCC seems to consider all of these conversions to be pointer
908/// conversions, so for now they live here. IncompatibleObjC will be
909/// set if the conversion is an allowed Objective-C conversion that
910/// should result in a warning.
911bool Sema::IsPointerConversion(Expr *From, QualType FromType, QualType ToType,
912                               bool InOverloadResolution,
913                               QualType& ConvertedType,
914                               bool &IncompatibleObjC) {
915  IncompatibleObjC = false;
916  if (isObjCPointerConversion(FromType, ToType, ConvertedType, IncompatibleObjC))
917    return true;
918
919  // Conversion from a null pointer constant to any Objective-C pointer type.
920  if (ToType->isObjCObjectPointerType() &&
921      isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
922    ConvertedType = ToType;
923    return true;
924  }
925
926  // Blocks: Block pointers can be converted to void*.
927  if (FromType->isBlockPointerType() && ToType->isPointerType() &&
928      ToType->getAs<PointerType>()->getPointeeType()->isVoidType()) {
929    ConvertedType = ToType;
930    return true;
931  }
932  // Blocks: A null pointer constant can be converted to a block
933  // pointer type.
934  if (ToType->isBlockPointerType() &&
935      isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
936    ConvertedType = ToType;
937    return true;
938  }
939
940  // If the left-hand-side is nullptr_t, the right side can be a null
941  // pointer constant.
942  if (ToType->isNullPtrType() &&
943      isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
944    ConvertedType = ToType;
945    return true;
946  }
947
948  const PointerType* ToTypePtr = ToType->getAs<PointerType>();
949  if (!ToTypePtr)
950    return false;
951
952  // A null pointer constant can be converted to a pointer type (C++ 4.10p1).
953  if (isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
954    ConvertedType = ToType;
955    return true;
956  }
957
958  // Beyond this point, both types need to be pointers.
959  const PointerType *FromTypePtr = FromType->getAs<PointerType>();
960  if (!FromTypePtr)
961    return false;
962
963  QualType FromPointeeType = FromTypePtr->getPointeeType();
964  QualType ToPointeeType = ToTypePtr->getPointeeType();
965
966  // An rvalue of type "pointer to cv T," where T is an object type,
967  // can be converted to an rvalue of type "pointer to cv void" (C++
968  // 4.10p2).
969  if (FromPointeeType->isObjectType() && ToPointeeType->isVoidType()) {
970    ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
971                                                       ToPointeeType,
972                                                       ToType, Context);
973    return true;
974  }
975
976  // When we're overloading in C, we allow a special kind of pointer
977  // conversion for compatible-but-not-identical pointee types.
978  if (!getLangOptions().CPlusPlus &&
979      Context.typesAreCompatible(FromPointeeType, ToPointeeType)) {
980    ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
981                                                       ToPointeeType,
982                                                       ToType, Context);
983    return true;
984  }
985
986  // C++ [conv.ptr]p3:
987  //
988  //   An rvalue of type "pointer to cv D," where D is a class type,
989  //   can be converted to an rvalue of type "pointer to cv B," where
990  //   B is a base class (clause 10) of D. If B is an inaccessible
991  //   (clause 11) or ambiguous (10.2) base class of D, a program that
992  //   necessitates this conversion is ill-formed. The result of the
993  //   conversion is a pointer to the base class sub-object of the
994  //   derived class object. The null pointer value is converted to
995  //   the null pointer value of the destination type.
996  //
997  // Note that we do not check for ambiguity or inaccessibility
998  // here. That is handled by CheckPointerConversion.
999  if (getLangOptions().CPlusPlus &&
1000      FromPointeeType->isRecordType() && ToPointeeType->isRecordType() &&
1001      IsDerivedFrom(FromPointeeType, ToPointeeType)) {
1002    ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
1003                                                       ToPointeeType,
1004                                                       ToType, Context);
1005    return true;
1006  }
1007
1008  return false;
1009}
1010
1011/// isObjCPointerConversion - Determines whether this is an
1012/// Objective-C pointer conversion. Subroutine of IsPointerConversion,
1013/// with the same arguments and return values.
1014bool Sema::isObjCPointerConversion(QualType FromType, QualType ToType,
1015                                   QualType& ConvertedType,
1016                                   bool &IncompatibleObjC) {
1017  if (!getLangOptions().ObjC1)
1018    return false;
1019
1020  // First, we handle all conversions on ObjC object pointer types.
1021  const ObjCObjectPointerType* ToObjCPtr = ToType->getAs<ObjCObjectPointerType>();
1022  const ObjCObjectPointerType *FromObjCPtr =
1023    FromType->getAs<ObjCObjectPointerType>();
1024
1025  if (ToObjCPtr && FromObjCPtr) {
1026    // Objective C++: We're able to convert between "id" or "Class" and a
1027    // pointer to any interface (in both directions).
1028    if (ToObjCPtr->isObjCBuiltinType() && FromObjCPtr->isObjCBuiltinType()) {
1029      ConvertedType = ToType;
1030      return true;
1031    }
1032    // Conversions with Objective-C's id<...>.
1033    if ((FromObjCPtr->isObjCQualifiedIdType() ||
1034         ToObjCPtr->isObjCQualifiedIdType()) &&
1035        Context.ObjCQualifiedIdTypesAreCompatible(ToType, FromType,
1036                                                  /*compare=*/false)) {
1037      ConvertedType = ToType;
1038      return true;
1039    }
1040    // Objective C++: We're able to convert from a pointer to an
1041    // interface to a pointer to a different interface.
1042    if (Context.canAssignObjCInterfaces(ToObjCPtr, FromObjCPtr)) {
1043      ConvertedType = ToType;
1044      return true;
1045    }
1046
1047    if (Context.canAssignObjCInterfaces(FromObjCPtr, ToObjCPtr)) {
1048      // Okay: this is some kind of implicit downcast of Objective-C
1049      // interfaces, which is permitted. However, we're going to
1050      // complain about it.
1051      IncompatibleObjC = true;
1052      ConvertedType = FromType;
1053      return true;
1054    }
1055  }
1056  // Beyond this point, both types need to be C pointers or block pointers.
1057  QualType ToPointeeType;
1058  if (const PointerType *ToCPtr = ToType->getAs<PointerType>())
1059    ToPointeeType = ToCPtr->getPointeeType();
1060  else if (const BlockPointerType *ToBlockPtr = ToType->getAs<BlockPointerType>())
1061    ToPointeeType = ToBlockPtr->getPointeeType();
1062  else
1063    return false;
1064
1065  QualType FromPointeeType;
1066  if (const PointerType *FromCPtr = FromType->getAs<PointerType>())
1067    FromPointeeType = FromCPtr->getPointeeType();
1068  else if (const BlockPointerType *FromBlockPtr = FromType->getAs<BlockPointerType>())
1069    FromPointeeType = FromBlockPtr->getPointeeType();
1070  else
1071    return false;
1072
1073  // If we have pointers to pointers, recursively check whether this
1074  // is an Objective-C conversion.
1075  if (FromPointeeType->isPointerType() && ToPointeeType->isPointerType() &&
1076      isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
1077                              IncompatibleObjC)) {
1078    // We always complain about this conversion.
1079    IncompatibleObjC = true;
1080    ConvertedType = ToType;
1081    return true;
1082  }
1083  // If we have pointers to functions or blocks, check whether the only
1084  // differences in the argument and result types are in Objective-C
1085  // pointer conversions. If so, we permit the conversion (but
1086  // complain about it).
1087  const FunctionProtoType *FromFunctionType
1088    = FromPointeeType->getAs<FunctionProtoType>();
1089  const FunctionProtoType *ToFunctionType
1090    = ToPointeeType->getAs<FunctionProtoType>();
1091  if (FromFunctionType && ToFunctionType) {
1092    // If the function types are exactly the same, this isn't an
1093    // Objective-C pointer conversion.
1094    if (Context.getCanonicalType(FromPointeeType)
1095          == Context.getCanonicalType(ToPointeeType))
1096      return false;
1097
1098    // Perform the quick checks that will tell us whether these
1099    // function types are obviously different.
1100    if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() ||
1101        FromFunctionType->isVariadic() != ToFunctionType->isVariadic() ||
1102        FromFunctionType->getTypeQuals() != ToFunctionType->getTypeQuals())
1103      return false;
1104
1105    bool HasObjCConversion = false;
1106    if (Context.getCanonicalType(FromFunctionType->getResultType())
1107          == Context.getCanonicalType(ToFunctionType->getResultType())) {
1108      // Okay, the types match exactly. Nothing to do.
1109    } else if (isObjCPointerConversion(FromFunctionType->getResultType(),
1110                                       ToFunctionType->getResultType(),
1111                                       ConvertedType, IncompatibleObjC)) {
1112      // Okay, we have an Objective-C pointer conversion.
1113      HasObjCConversion = true;
1114    } else {
1115      // Function types are too different. Abort.
1116      return false;
1117    }
1118
1119    // Check argument types.
1120    for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs();
1121         ArgIdx != NumArgs; ++ArgIdx) {
1122      QualType FromArgType = FromFunctionType->getArgType(ArgIdx);
1123      QualType ToArgType = ToFunctionType->getArgType(ArgIdx);
1124      if (Context.getCanonicalType(FromArgType)
1125            == Context.getCanonicalType(ToArgType)) {
1126        // Okay, the types match exactly. Nothing to do.
1127      } else if (isObjCPointerConversion(FromArgType, ToArgType,
1128                                         ConvertedType, IncompatibleObjC)) {
1129        // Okay, we have an Objective-C pointer conversion.
1130        HasObjCConversion = true;
1131      } else {
1132        // Argument types are too different. Abort.
1133        return false;
1134      }
1135    }
1136
1137    if (HasObjCConversion) {
1138      // We had an Objective-C conversion. Allow this pointer
1139      // conversion, but complain about it.
1140      ConvertedType = ToType;
1141      IncompatibleObjC = true;
1142      return true;
1143    }
1144  }
1145
1146  return false;
1147}
1148
1149/// CheckPointerConversion - Check the pointer conversion from the
1150/// expression From to the type ToType. This routine checks for
1151/// ambiguous or inaccessible derived-to-base pointer
1152/// conversions for which IsPointerConversion has already returned
1153/// true. It returns true and produces a diagnostic if there was an
1154/// error, or returns false otherwise.
1155bool Sema::CheckPointerConversion(Expr *From, QualType ToType,
1156                                  CastExpr::CastKind &Kind) {
1157  QualType FromType = From->getType();
1158
1159  if (const PointerType *FromPtrType = FromType->getAs<PointerType>())
1160    if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) {
1161      QualType FromPointeeType = FromPtrType->getPointeeType(),
1162               ToPointeeType   = ToPtrType->getPointeeType();
1163
1164      if (FromPointeeType->isRecordType() &&
1165          ToPointeeType->isRecordType()) {
1166        // We must have a derived-to-base conversion. Check an
1167        // ambiguous or inaccessible conversion.
1168        if (CheckDerivedToBaseConversion(FromPointeeType, ToPointeeType,
1169                                         From->getExprLoc(),
1170                                         From->getSourceRange()))
1171          return true;
1172
1173        // The conversion was successful.
1174        Kind = CastExpr::CK_DerivedToBase;
1175      }
1176    }
1177  if (const ObjCObjectPointerType *FromPtrType =
1178        FromType->getAs<ObjCObjectPointerType>())
1179    if (const ObjCObjectPointerType *ToPtrType =
1180          ToType->getAs<ObjCObjectPointerType>()) {
1181      // Objective-C++ conversions are always okay.
1182      // FIXME: We should have a different class of conversions for the
1183      // Objective-C++ implicit conversions.
1184      if (FromPtrType->isObjCBuiltinType() || ToPtrType->isObjCBuiltinType())
1185        return false;
1186
1187  }
1188  return false;
1189}
1190
1191/// IsMemberPointerConversion - Determines whether the conversion of the
1192/// expression From, which has the (possibly adjusted) type FromType, can be
1193/// converted to the type ToType via a member pointer conversion (C++ 4.11).
1194/// If so, returns true and places the converted type (that might differ from
1195/// ToType in its cv-qualifiers at some level) into ConvertedType.
1196bool Sema::IsMemberPointerConversion(Expr *From, QualType FromType,
1197                                     QualType ToType,
1198                                     bool InOverloadResolution,
1199                                     QualType &ConvertedType) {
1200  const MemberPointerType *ToTypePtr = ToType->getAs<MemberPointerType>();
1201  if (!ToTypePtr)
1202    return false;
1203
1204  // A null pointer constant can be converted to a member pointer (C++ 4.11p1)
1205  if (From->isNullPointerConstant(Context,
1206                    InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
1207                                        : Expr::NPC_ValueDependentIsNull)) {
1208    ConvertedType = ToType;
1209    return true;
1210  }
1211
1212  // Otherwise, both types have to be member pointers.
1213  const MemberPointerType *FromTypePtr = FromType->getAs<MemberPointerType>();
1214  if (!FromTypePtr)
1215    return false;
1216
1217  // A pointer to member of B can be converted to a pointer to member of D,
1218  // where D is derived from B (C++ 4.11p2).
1219  QualType FromClass(FromTypePtr->getClass(), 0);
1220  QualType ToClass(ToTypePtr->getClass(), 0);
1221  // FIXME: What happens when these are dependent? Is this function even called?
1222
1223  if (IsDerivedFrom(ToClass, FromClass)) {
1224    ConvertedType = Context.getMemberPointerType(FromTypePtr->getPointeeType(),
1225                                                 ToClass.getTypePtr());
1226    return true;
1227  }
1228
1229  return false;
1230}
1231
1232/// CheckMemberPointerConversion - Check the member pointer conversion from the
1233/// expression From to the type ToType. This routine checks for ambiguous or
1234/// virtual (FIXME: or inaccessible) base-to-derived member pointer conversions
1235/// for which IsMemberPointerConversion has already returned true. It returns
1236/// true and produces a diagnostic if there was an error, or returns false
1237/// otherwise.
1238bool Sema::CheckMemberPointerConversion(Expr *From, QualType ToType,
1239                                        CastExpr::CastKind &Kind) {
1240  QualType FromType = From->getType();
1241  const MemberPointerType *FromPtrType = FromType->getAs<MemberPointerType>();
1242  if (!FromPtrType) {
1243    // This must be a null pointer to member pointer conversion
1244    assert(From->isNullPointerConstant(Context,
1245                                       Expr::NPC_ValueDependentIsNull) &&
1246           "Expr must be null pointer constant!");
1247    Kind = CastExpr::CK_NullToMemberPointer;
1248    return false;
1249  }
1250
1251  const MemberPointerType *ToPtrType = ToType->getAs<MemberPointerType>();
1252  assert(ToPtrType && "No member pointer cast has a target type "
1253                      "that is not a member pointer.");
1254
1255  QualType FromClass = QualType(FromPtrType->getClass(), 0);
1256  QualType ToClass   = QualType(ToPtrType->getClass(), 0);
1257
1258  // FIXME: What about dependent types?
1259  assert(FromClass->isRecordType() && "Pointer into non-class.");
1260  assert(ToClass->isRecordType() && "Pointer into non-class.");
1261
1262  CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/false,
1263                     /*DetectVirtual=*/true);
1264  bool DerivationOkay = IsDerivedFrom(ToClass, FromClass, Paths);
1265  assert(DerivationOkay &&
1266         "Should not have been called if derivation isn't OK.");
1267  (void)DerivationOkay;
1268
1269  if (Paths.isAmbiguous(Context.getCanonicalType(FromClass).
1270                                  getUnqualifiedType())) {
1271    // Derivation is ambiguous. Redo the check to find the exact paths.
1272    Paths.clear();
1273    Paths.setRecordingPaths(true);
1274    bool StillOkay = IsDerivedFrom(ToClass, FromClass, Paths);
1275    assert(StillOkay && "Derivation changed due to quantum fluctuation.");
1276    (void)StillOkay;
1277
1278    std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths);
1279    Diag(From->getExprLoc(), diag::err_ambiguous_memptr_conv)
1280      << 0 << FromClass << ToClass << PathDisplayStr << From->getSourceRange();
1281    return true;
1282  }
1283
1284  if (const RecordType *VBase = Paths.getDetectedVirtual()) {
1285    Diag(From->getExprLoc(), diag::err_memptr_conv_via_virtual)
1286      << FromClass << ToClass << QualType(VBase, 0)
1287      << From->getSourceRange();
1288    return true;
1289  }
1290
1291  // Must be a base to derived member conversion.
1292  Kind = CastExpr::CK_BaseToDerivedMemberPointer;
1293  return false;
1294}
1295
1296/// IsQualificationConversion - Determines whether the conversion from
1297/// an rvalue of type FromType to ToType is a qualification conversion
1298/// (C++ 4.4).
1299bool
1300Sema::IsQualificationConversion(QualType FromType, QualType ToType) {
1301  FromType = Context.getCanonicalType(FromType);
1302  ToType = Context.getCanonicalType(ToType);
1303
1304  // If FromType and ToType are the same type, this is not a
1305  // qualification conversion.
1306  if (FromType == ToType)
1307    return false;
1308
1309  // (C++ 4.4p4):
1310  //   A conversion can add cv-qualifiers at levels other than the first
1311  //   in multi-level pointers, subject to the following rules: [...]
1312  bool PreviousToQualsIncludeConst = true;
1313  bool UnwrappedAnyPointer = false;
1314  while (UnwrapSimilarPointerTypes(FromType, ToType)) {
1315    // Within each iteration of the loop, we check the qualifiers to
1316    // determine if this still looks like a qualification
1317    // conversion. Then, if all is well, we unwrap one more level of
1318    // pointers or pointers-to-members and do it all again
1319    // until there are no more pointers or pointers-to-members left to
1320    // unwrap.
1321    UnwrappedAnyPointer = true;
1322
1323    //   -- for every j > 0, if const is in cv 1,j then const is in cv
1324    //      2,j, and similarly for volatile.
1325    if (!ToType.isAtLeastAsQualifiedAs(FromType))
1326      return false;
1327
1328    //   -- if the cv 1,j and cv 2,j are different, then const is in
1329    //      every cv for 0 < k < j.
1330    if (FromType.getCVRQualifiers() != ToType.getCVRQualifiers()
1331        && !PreviousToQualsIncludeConst)
1332      return false;
1333
1334    // Keep track of whether all prior cv-qualifiers in the "to" type
1335    // include const.
1336    PreviousToQualsIncludeConst
1337      = PreviousToQualsIncludeConst && ToType.isConstQualified();
1338  }
1339
1340  // We are left with FromType and ToType being the pointee types
1341  // after unwrapping the original FromType and ToType the same number
1342  // of types. If we unwrapped any pointers, and if FromType and
1343  // ToType have the same unqualified type (since we checked
1344  // qualifiers above), then this is a qualification conversion.
1345  return UnwrappedAnyPointer &&
1346    FromType.getUnqualifiedType() == ToType.getUnqualifiedType();
1347}
1348
1349/// \brief Given a function template or function, extract the function template
1350/// declaration (if any) and the underlying function declaration.
1351template<typename T>
1352static void GetFunctionAndTemplate(AnyFunctionDecl Orig, T *&Function,
1353                                   FunctionTemplateDecl *&FunctionTemplate) {
1354  FunctionTemplate = dyn_cast<FunctionTemplateDecl>(Orig);
1355  if (FunctionTemplate)
1356    Function = cast<T>(FunctionTemplate->getTemplatedDecl());
1357  else
1358    Function = cast<T>(Orig);
1359}
1360
1361/// Determines whether there is a user-defined conversion sequence
1362/// (C++ [over.ics.user]) that converts expression From to the type
1363/// ToType. If such a conversion exists, User will contain the
1364/// user-defined conversion sequence that performs such a conversion
1365/// and this routine will return true. Otherwise, this routine returns
1366/// false and User is unspecified.
1367///
1368/// \param AllowConversionFunctions true if the conversion should
1369/// consider conversion functions at all. If false, only constructors
1370/// will be considered.
1371///
1372/// \param AllowExplicit  true if the conversion should consider C++0x
1373/// "explicit" conversion functions as well as non-explicit conversion
1374/// functions (C++0x [class.conv.fct]p2).
1375///
1376/// \param ForceRValue  true if the expression should be treated as an rvalue
1377/// for overload resolution.
1378/// \param UserCast true if looking for user defined conversion for a static
1379/// cast.
1380Sema::OverloadingResult Sema::IsUserDefinedConversion(
1381                                   Expr *From, QualType ToType,
1382                                   UserDefinedConversionSequence& User,
1383                                   OverloadCandidateSet& CandidateSet,
1384                                   bool AllowConversionFunctions,
1385                                   bool AllowExplicit, bool ForceRValue,
1386                                   bool UserCast) {
1387  if (const RecordType *ToRecordType = ToType->getAs<RecordType>()) {
1388    if (CXXRecordDecl *ToRecordDecl
1389          = dyn_cast<CXXRecordDecl>(ToRecordType->getDecl())) {
1390      // C++ [over.match.ctor]p1:
1391      //   When objects of class type are direct-initialized (8.5), or
1392      //   copy-initialized from an expression of the same or a
1393      //   derived class type (8.5), overload resolution selects the
1394      //   constructor. [...] For copy-initialization, the candidate
1395      //   functions are all the converting constructors (12.3.1) of
1396      //   that class. The argument list is the expression-list within
1397      //   the parentheses of the initializer.
1398      DeclarationName ConstructorName
1399        = Context.DeclarationNames.getCXXConstructorName(
1400                          Context.getCanonicalType(ToType).getUnqualifiedType());
1401      DeclContext::lookup_iterator Con, ConEnd;
1402      for (llvm::tie(Con, ConEnd)
1403             = ToRecordDecl->lookup(ConstructorName);
1404           Con != ConEnd; ++Con) {
1405        // Find the constructor (which may be a template).
1406        CXXConstructorDecl *Constructor = 0;
1407        FunctionTemplateDecl *ConstructorTmpl
1408          = dyn_cast<FunctionTemplateDecl>(*Con);
1409        if (ConstructorTmpl)
1410          Constructor
1411            = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl());
1412        else
1413          Constructor = cast<CXXConstructorDecl>(*Con);
1414
1415        if (!Constructor->isInvalidDecl() &&
1416            Constructor->isConvertingConstructor(AllowExplicit)) {
1417          if (ConstructorTmpl)
1418            AddTemplateOverloadCandidate(ConstructorTmpl, false, 0, 0, &From,
1419                                         1, CandidateSet,
1420                                         /*SuppressUserConversions=*/!UserCast,
1421                                         ForceRValue);
1422          else
1423            // Allow one user-defined conversion when user specifies a
1424            // From->ToType conversion via an static cast (c-style, etc).
1425            AddOverloadCandidate(Constructor, &From, 1, CandidateSet,
1426                                 /*SuppressUserConversions=*/!UserCast,
1427                                 ForceRValue);
1428        }
1429      }
1430    }
1431  }
1432
1433  if (!AllowConversionFunctions) {
1434    // Don't allow any conversion functions to enter the overload set.
1435  } else if (RequireCompleteType(From->getLocStart(), From->getType(),
1436                                 PDiag(0)
1437                                   << From->getSourceRange())) {
1438    // No conversion functions from incomplete types.
1439  } else if (const RecordType *FromRecordType
1440               = From->getType()->getAs<RecordType>()) {
1441    if (CXXRecordDecl *FromRecordDecl
1442         = dyn_cast<CXXRecordDecl>(FromRecordType->getDecl())) {
1443      // Add all of the conversion functions as candidates.
1444      OverloadedFunctionDecl *Conversions
1445        = FromRecordDecl->getVisibleConversionFunctions();
1446      for (OverloadedFunctionDecl::function_iterator Func
1447             = Conversions->function_begin();
1448           Func != Conversions->function_end(); ++Func) {
1449        CXXConversionDecl *Conv;
1450        FunctionTemplateDecl *ConvTemplate;
1451        GetFunctionAndTemplate(*Func, Conv, ConvTemplate);
1452        if (ConvTemplate)
1453          Conv = dyn_cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
1454        else
1455          Conv = dyn_cast<CXXConversionDecl>(*Func);
1456
1457        if (AllowExplicit || !Conv->isExplicit()) {
1458          if (ConvTemplate)
1459            AddTemplateConversionCandidate(ConvTemplate, From, ToType,
1460                                           CandidateSet);
1461          else
1462            AddConversionCandidate(Conv, From, ToType, CandidateSet);
1463        }
1464      }
1465    }
1466  }
1467
1468  OverloadCandidateSet::iterator Best;
1469  switch (BestViableFunction(CandidateSet, From->getLocStart(), Best)) {
1470    case OR_Success:
1471      // Record the standard conversion we used and the conversion function.
1472      if (CXXConstructorDecl *Constructor
1473            = dyn_cast<CXXConstructorDecl>(Best->Function)) {
1474        // C++ [over.ics.user]p1:
1475        //   If the user-defined conversion is specified by a
1476        //   constructor (12.3.1), the initial standard conversion
1477        //   sequence converts the source type to the type required by
1478        //   the argument of the constructor.
1479        //
1480        // FIXME: What about ellipsis conversions?
1481        QualType ThisType = Constructor->getThisType(Context);
1482        User.Before = Best->Conversions[0].Standard;
1483        User.ConversionFunction = Constructor;
1484        User.After.setAsIdentityConversion();
1485        User.After.FromTypePtr
1486          = ThisType->getAs<PointerType>()->getPointeeType().getAsOpaquePtr();
1487        User.After.ToTypePtr = ToType.getAsOpaquePtr();
1488        return OR_Success;
1489      } else if (CXXConversionDecl *Conversion
1490                   = dyn_cast<CXXConversionDecl>(Best->Function)) {
1491        // C++ [over.ics.user]p1:
1492        //
1493        //   [...] If the user-defined conversion is specified by a
1494        //   conversion function (12.3.2), the initial standard
1495        //   conversion sequence converts the source type to the
1496        //   implicit object parameter of the conversion function.
1497        User.Before = Best->Conversions[0].Standard;
1498        User.ConversionFunction = Conversion;
1499
1500        // C++ [over.ics.user]p2:
1501        //   The second standard conversion sequence converts the
1502        //   result of the user-defined conversion to the target type
1503        //   for the sequence. Since an implicit conversion sequence
1504        //   is an initialization, the special rules for
1505        //   initialization by user-defined conversion apply when
1506        //   selecting the best user-defined conversion for a
1507        //   user-defined conversion sequence (see 13.3.3 and
1508        //   13.3.3.1).
1509        User.After = Best->FinalConversion;
1510        return OR_Success;
1511      } else {
1512        assert(false && "Not a constructor or conversion function?");
1513        return OR_No_Viable_Function;
1514      }
1515
1516    case OR_No_Viable_Function:
1517      return OR_No_Viable_Function;
1518    case OR_Deleted:
1519      // No conversion here! We're done.
1520      return OR_Deleted;
1521
1522    case OR_Ambiguous:
1523      return OR_Ambiguous;
1524    }
1525
1526  return OR_No_Viable_Function;
1527}
1528
1529bool
1530Sema::DiagnoseAmbiguousUserDefinedConversion(Expr *From, QualType ToType) {
1531  ImplicitConversionSequence ICS;
1532  OverloadCandidateSet CandidateSet;
1533  OverloadingResult OvResult =
1534    IsUserDefinedConversion(From, ToType, ICS.UserDefined,
1535                            CandidateSet, true, false, false);
1536  if (OvResult != OR_Ambiguous)
1537    return false;
1538  Diag(From->getSourceRange().getBegin(),
1539       diag::err_typecheck_ambiguous_condition)
1540  << From->getType() << ToType << From->getSourceRange();
1541    PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/false);
1542  return true;
1543}
1544
1545/// CompareImplicitConversionSequences - Compare two implicit
1546/// conversion sequences to determine whether one is better than the
1547/// other or if they are indistinguishable (C++ 13.3.3.2).
1548ImplicitConversionSequence::CompareKind
1549Sema::CompareImplicitConversionSequences(const ImplicitConversionSequence& ICS1,
1550                                         const ImplicitConversionSequence& ICS2)
1551{
1552  // (C++ 13.3.3.2p2): When comparing the basic forms of implicit
1553  // conversion sequences (as defined in 13.3.3.1)
1554  //   -- a standard conversion sequence (13.3.3.1.1) is a better
1555  //      conversion sequence than a user-defined conversion sequence or
1556  //      an ellipsis conversion sequence, and
1557  //   -- a user-defined conversion sequence (13.3.3.1.2) is a better
1558  //      conversion sequence than an ellipsis conversion sequence
1559  //      (13.3.3.1.3).
1560  //
1561  if (ICS1.ConversionKind < ICS2.ConversionKind)
1562    return ImplicitConversionSequence::Better;
1563  else if (ICS2.ConversionKind < ICS1.ConversionKind)
1564    return ImplicitConversionSequence::Worse;
1565
1566  // Two implicit conversion sequences of the same form are
1567  // indistinguishable conversion sequences unless one of the
1568  // following rules apply: (C++ 13.3.3.2p3):
1569  if (ICS1.ConversionKind == ImplicitConversionSequence::StandardConversion)
1570    return CompareStandardConversionSequences(ICS1.Standard, ICS2.Standard);
1571  else if (ICS1.ConversionKind ==
1572             ImplicitConversionSequence::UserDefinedConversion) {
1573    // User-defined conversion sequence U1 is a better conversion
1574    // sequence than another user-defined conversion sequence U2 if
1575    // they contain the same user-defined conversion function or
1576    // constructor and if the second standard conversion sequence of
1577    // U1 is better than the second standard conversion sequence of
1578    // U2 (C++ 13.3.3.2p3).
1579    if (ICS1.UserDefined.ConversionFunction ==
1580          ICS2.UserDefined.ConversionFunction)
1581      return CompareStandardConversionSequences(ICS1.UserDefined.After,
1582                                                ICS2.UserDefined.After);
1583  }
1584
1585  return ImplicitConversionSequence::Indistinguishable;
1586}
1587
1588/// CompareStandardConversionSequences - Compare two standard
1589/// conversion sequences to determine whether one is better than the
1590/// other or if they are indistinguishable (C++ 13.3.3.2p3).
1591ImplicitConversionSequence::CompareKind
1592Sema::CompareStandardConversionSequences(const StandardConversionSequence& SCS1,
1593                                         const StandardConversionSequence& SCS2)
1594{
1595  // Standard conversion sequence S1 is a better conversion sequence
1596  // than standard conversion sequence S2 if (C++ 13.3.3.2p3):
1597
1598  //  -- S1 is a proper subsequence of S2 (comparing the conversion
1599  //     sequences in the canonical form defined by 13.3.3.1.1,
1600  //     excluding any Lvalue Transformation; the identity conversion
1601  //     sequence is considered to be a subsequence of any
1602  //     non-identity conversion sequence) or, if not that,
1603  if (SCS1.Second == SCS2.Second && SCS1.Third == SCS2.Third)
1604    // Neither is a proper subsequence of the other. Do nothing.
1605    ;
1606  else if ((SCS1.Second == ICK_Identity && SCS1.Third == SCS2.Third) ||
1607           (SCS1.Third == ICK_Identity && SCS1.Second == SCS2.Second) ||
1608           (SCS1.Second == ICK_Identity &&
1609            SCS1.Third == ICK_Identity))
1610    // SCS1 is a proper subsequence of SCS2.
1611    return ImplicitConversionSequence::Better;
1612  else if ((SCS2.Second == ICK_Identity && SCS2.Third == SCS1.Third) ||
1613           (SCS2.Third == ICK_Identity && SCS2.Second == SCS1.Second) ||
1614           (SCS2.Second == ICK_Identity &&
1615            SCS2.Third == ICK_Identity))
1616    // SCS2 is a proper subsequence of SCS1.
1617    return ImplicitConversionSequence::Worse;
1618
1619  //  -- the rank of S1 is better than the rank of S2 (by the rules
1620  //     defined below), or, if not that,
1621  ImplicitConversionRank Rank1 = SCS1.getRank();
1622  ImplicitConversionRank Rank2 = SCS2.getRank();
1623  if (Rank1 < Rank2)
1624    return ImplicitConversionSequence::Better;
1625  else if (Rank2 < Rank1)
1626    return ImplicitConversionSequence::Worse;
1627
1628  // (C++ 13.3.3.2p4): Two conversion sequences with the same rank
1629  // are indistinguishable unless one of the following rules
1630  // applies:
1631
1632  //   A conversion that is not a conversion of a pointer, or
1633  //   pointer to member, to bool is better than another conversion
1634  //   that is such a conversion.
1635  if (SCS1.isPointerConversionToBool() != SCS2.isPointerConversionToBool())
1636    return SCS2.isPointerConversionToBool()
1637             ? ImplicitConversionSequence::Better
1638             : ImplicitConversionSequence::Worse;
1639
1640  // C++ [over.ics.rank]p4b2:
1641  //
1642  //   If class B is derived directly or indirectly from class A,
1643  //   conversion of B* to A* is better than conversion of B* to
1644  //   void*, and conversion of A* to void* is better than conversion
1645  //   of B* to void*.
1646  bool SCS1ConvertsToVoid
1647    = SCS1.isPointerConversionToVoidPointer(Context);
1648  bool SCS2ConvertsToVoid
1649    = SCS2.isPointerConversionToVoidPointer(Context);
1650  if (SCS1ConvertsToVoid != SCS2ConvertsToVoid) {
1651    // Exactly one of the conversion sequences is a conversion to
1652    // a void pointer; it's the worse conversion.
1653    return SCS2ConvertsToVoid ? ImplicitConversionSequence::Better
1654                              : ImplicitConversionSequence::Worse;
1655  } else if (!SCS1ConvertsToVoid && !SCS2ConvertsToVoid) {
1656    // Neither conversion sequence converts to a void pointer; compare
1657    // their derived-to-base conversions.
1658    if (ImplicitConversionSequence::CompareKind DerivedCK
1659          = CompareDerivedToBaseConversions(SCS1, SCS2))
1660      return DerivedCK;
1661  } else if (SCS1ConvertsToVoid && SCS2ConvertsToVoid) {
1662    // Both conversion sequences are conversions to void
1663    // pointers. Compare the source types to determine if there's an
1664    // inheritance relationship in their sources.
1665    QualType FromType1 = QualType::getFromOpaquePtr(SCS1.FromTypePtr);
1666    QualType FromType2 = QualType::getFromOpaquePtr(SCS2.FromTypePtr);
1667
1668    // Adjust the types we're converting from via the array-to-pointer
1669    // conversion, if we need to.
1670    if (SCS1.First == ICK_Array_To_Pointer)
1671      FromType1 = Context.getArrayDecayedType(FromType1);
1672    if (SCS2.First == ICK_Array_To_Pointer)
1673      FromType2 = Context.getArrayDecayedType(FromType2);
1674
1675    QualType FromPointee1
1676      = FromType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
1677    QualType FromPointee2
1678      = FromType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
1679
1680    if (IsDerivedFrom(FromPointee2, FromPointee1))
1681      return ImplicitConversionSequence::Better;
1682    else if (IsDerivedFrom(FromPointee1, FromPointee2))
1683      return ImplicitConversionSequence::Worse;
1684
1685    // Objective-C++: If one interface is more specific than the
1686    // other, it is the better one.
1687    const ObjCInterfaceType* FromIface1 = FromPointee1->getAs<ObjCInterfaceType>();
1688    const ObjCInterfaceType* FromIface2 = FromPointee2->getAs<ObjCInterfaceType>();
1689    if (FromIface1 && FromIface1) {
1690      if (Context.canAssignObjCInterfaces(FromIface2, FromIface1))
1691        return ImplicitConversionSequence::Better;
1692      else if (Context.canAssignObjCInterfaces(FromIface1, FromIface2))
1693        return ImplicitConversionSequence::Worse;
1694    }
1695  }
1696
1697  // Compare based on qualification conversions (C++ 13.3.3.2p3,
1698  // bullet 3).
1699  if (ImplicitConversionSequence::CompareKind QualCK
1700        = CompareQualificationConversions(SCS1, SCS2))
1701    return QualCK;
1702
1703  if (SCS1.ReferenceBinding && SCS2.ReferenceBinding) {
1704    // C++0x [over.ics.rank]p3b4:
1705    //   -- S1 and S2 are reference bindings (8.5.3) and neither refers to an
1706    //      implicit object parameter of a non-static member function declared
1707    //      without a ref-qualifier, and S1 binds an rvalue reference to an
1708    //      rvalue and S2 binds an lvalue reference.
1709    // FIXME: We don't know if we're dealing with the implicit object parameter,
1710    // or if the member function in this case has a ref qualifier.
1711    // (Of course, we don't have ref qualifiers yet.)
1712    if (SCS1.RRefBinding != SCS2.RRefBinding)
1713      return SCS1.RRefBinding ? ImplicitConversionSequence::Better
1714                              : ImplicitConversionSequence::Worse;
1715
1716    // C++ [over.ics.rank]p3b4:
1717    //   -- S1 and S2 are reference bindings (8.5.3), and the types to
1718    //      which the references refer are the same type except for
1719    //      top-level cv-qualifiers, and the type to which the reference
1720    //      initialized by S2 refers is more cv-qualified than the type
1721    //      to which the reference initialized by S1 refers.
1722    QualType T1 = QualType::getFromOpaquePtr(SCS1.ToTypePtr);
1723    QualType T2 = QualType::getFromOpaquePtr(SCS2.ToTypePtr);
1724    T1 = Context.getCanonicalType(T1);
1725    T2 = Context.getCanonicalType(T2);
1726    if (T1.getUnqualifiedType() == T2.getUnqualifiedType()) {
1727      if (T2.isMoreQualifiedThan(T1))
1728        return ImplicitConversionSequence::Better;
1729      else if (T1.isMoreQualifiedThan(T2))
1730        return ImplicitConversionSequence::Worse;
1731    }
1732  }
1733
1734  return ImplicitConversionSequence::Indistinguishable;
1735}
1736
1737/// CompareQualificationConversions - Compares two standard conversion
1738/// sequences to determine whether they can be ranked based on their
1739/// qualification conversions (C++ 13.3.3.2p3 bullet 3).
1740ImplicitConversionSequence::CompareKind
1741Sema::CompareQualificationConversions(const StandardConversionSequence& SCS1,
1742                                      const StandardConversionSequence& SCS2) {
1743  // C++ 13.3.3.2p3:
1744  //  -- S1 and S2 differ only in their qualification conversion and
1745  //     yield similar types T1 and T2 (C++ 4.4), respectively, and the
1746  //     cv-qualification signature of type T1 is a proper subset of
1747  //     the cv-qualification signature of type T2, and S1 is not the
1748  //     deprecated string literal array-to-pointer conversion (4.2).
1749  if (SCS1.First != SCS2.First || SCS1.Second != SCS2.Second ||
1750      SCS1.Third != SCS2.Third || SCS1.Third != ICK_Qualification)
1751    return ImplicitConversionSequence::Indistinguishable;
1752
1753  // FIXME: the example in the standard doesn't use a qualification
1754  // conversion (!)
1755  QualType T1 = QualType::getFromOpaquePtr(SCS1.ToTypePtr);
1756  QualType T2 = QualType::getFromOpaquePtr(SCS2.ToTypePtr);
1757  T1 = Context.getCanonicalType(T1);
1758  T2 = Context.getCanonicalType(T2);
1759
1760  // If the types are the same, we won't learn anything by unwrapped
1761  // them.
1762  if (T1.getUnqualifiedType() == T2.getUnqualifiedType())
1763    return ImplicitConversionSequence::Indistinguishable;
1764
1765  ImplicitConversionSequence::CompareKind Result
1766    = ImplicitConversionSequence::Indistinguishable;
1767  while (UnwrapSimilarPointerTypes(T1, T2)) {
1768    // Within each iteration of the loop, we check the qualifiers to
1769    // determine if this still looks like a qualification
1770    // conversion. Then, if all is well, we unwrap one more level of
1771    // pointers or pointers-to-members and do it all again
1772    // until there are no more pointers or pointers-to-members left
1773    // to unwrap. This essentially mimics what
1774    // IsQualificationConversion does, but here we're checking for a
1775    // strict subset of qualifiers.
1776    if (T1.getCVRQualifiers() == T2.getCVRQualifiers())
1777      // The qualifiers are the same, so this doesn't tell us anything
1778      // about how the sequences rank.
1779      ;
1780    else if (T2.isMoreQualifiedThan(T1)) {
1781      // T1 has fewer qualifiers, so it could be the better sequence.
1782      if (Result == ImplicitConversionSequence::Worse)
1783        // Neither has qualifiers that are a subset of the other's
1784        // qualifiers.
1785        return ImplicitConversionSequence::Indistinguishable;
1786
1787      Result = ImplicitConversionSequence::Better;
1788    } else if (T1.isMoreQualifiedThan(T2)) {
1789      // T2 has fewer qualifiers, so it could be the better sequence.
1790      if (Result == ImplicitConversionSequence::Better)
1791        // Neither has qualifiers that are a subset of the other's
1792        // qualifiers.
1793        return ImplicitConversionSequence::Indistinguishable;
1794
1795      Result = ImplicitConversionSequence::Worse;
1796    } else {
1797      // Qualifiers are disjoint.
1798      return ImplicitConversionSequence::Indistinguishable;
1799    }
1800
1801    // If the types after this point are equivalent, we're done.
1802    if (T1.getUnqualifiedType() == T2.getUnqualifiedType())
1803      break;
1804  }
1805
1806  // Check that the winning standard conversion sequence isn't using
1807  // the deprecated string literal array to pointer conversion.
1808  switch (Result) {
1809  case ImplicitConversionSequence::Better:
1810    if (SCS1.Deprecated)
1811      Result = ImplicitConversionSequence::Indistinguishable;
1812    break;
1813
1814  case ImplicitConversionSequence::Indistinguishable:
1815    break;
1816
1817  case ImplicitConversionSequence::Worse:
1818    if (SCS2.Deprecated)
1819      Result = ImplicitConversionSequence::Indistinguishable;
1820    break;
1821  }
1822
1823  return Result;
1824}
1825
1826/// CompareDerivedToBaseConversions - Compares two standard conversion
1827/// sequences to determine whether they can be ranked based on their
1828/// various kinds of derived-to-base conversions (C++
1829/// [over.ics.rank]p4b3).  As part of these checks, we also look at
1830/// conversions between Objective-C interface types.
1831ImplicitConversionSequence::CompareKind
1832Sema::CompareDerivedToBaseConversions(const StandardConversionSequence& SCS1,
1833                                      const StandardConversionSequence& SCS2) {
1834  QualType FromType1 = QualType::getFromOpaquePtr(SCS1.FromTypePtr);
1835  QualType ToType1 = QualType::getFromOpaquePtr(SCS1.ToTypePtr);
1836  QualType FromType2 = QualType::getFromOpaquePtr(SCS2.FromTypePtr);
1837  QualType ToType2 = QualType::getFromOpaquePtr(SCS2.ToTypePtr);
1838
1839  // Adjust the types we're converting from via the array-to-pointer
1840  // conversion, if we need to.
1841  if (SCS1.First == ICK_Array_To_Pointer)
1842    FromType1 = Context.getArrayDecayedType(FromType1);
1843  if (SCS2.First == ICK_Array_To_Pointer)
1844    FromType2 = Context.getArrayDecayedType(FromType2);
1845
1846  // Canonicalize all of the types.
1847  FromType1 = Context.getCanonicalType(FromType1);
1848  ToType1 = Context.getCanonicalType(ToType1);
1849  FromType2 = Context.getCanonicalType(FromType2);
1850  ToType2 = Context.getCanonicalType(ToType2);
1851
1852  // C++ [over.ics.rank]p4b3:
1853  //
1854  //   If class B is derived directly or indirectly from class A and
1855  //   class C is derived directly or indirectly from B,
1856  //
1857  // For Objective-C, we let A, B, and C also be Objective-C
1858  // interfaces.
1859
1860  // Compare based on pointer conversions.
1861  if (SCS1.Second == ICK_Pointer_Conversion &&
1862      SCS2.Second == ICK_Pointer_Conversion &&
1863      /*FIXME: Remove if Objective-C id conversions get their own rank*/
1864      FromType1->isPointerType() && FromType2->isPointerType() &&
1865      ToType1->isPointerType() && ToType2->isPointerType()) {
1866    QualType FromPointee1
1867      = FromType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
1868    QualType ToPointee1
1869      = ToType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
1870    QualType FromPointee2
1871      = FromType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
1872    QualType ToPointee2
1873      = ToType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
1874
1875    const ObjCInterfaceType* FromIface1 = FromPointee1->getAs<ObjCInterfaceType>();
1876    const ObjCInterfaceType* FromIface2 = FromPointee2->getAs<ObjCInterfaceType>();
1877    const ObjCInterfaceType* ToIface1 = ToPointee1->getAs<ObjCInterfaceType>();
1878    const ObjCInterfaceType* ToIface2 = ToPointee2->getAs<ObjCInterfaceType>();
1879
1880    //   -- conversion of C* to B* is better than conversion of C* to A*,
1881    if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
1882      if (IsDerivedFrom(ToPointee1, ToPointee2))
1883        return ImplicitConversionSequence::Better;
1884      else if (IsDerivedFrom(ToPointee2, ToPointee1))
1885        return ImplicitConversionSequence::Worse;
1886
1887      if (ToIface1 && ToIface2) {
1888        if (Context.canAssignObjCInterfaces(ToIface2, ToIface1))
1889          return ImplicitConversionSequence::Better;
1890        else if (Context.canAssignObjCInterfaces(ToIface1, ToIface2))
1891          return ImplicitConversionSequence::Worse;
1892      }
1893    }
1894
1895    //   -- conversion of B* to A* is better than conversion of C* to A*,
1896    if (FromPointee1 != FromPointee2 && ToPointee1 == ToPointee2) {
1897      if (IsDerivedFrom(FromPointee2, FromPointee1))
1898        return ImplicitConversionSequence::Better;
1899      else if (IsDerivedFrom(FromPointee1, FromPointee2))
1900        return ImplicitConversionSequence::Worse;
1901
1902      if (FromIface1 && FromIface2) {
1903        if (Context.canAssignObjCInterfaces(FromIface1, FromIface2))
1904          return ImplicitConversionSequence::Better;
1905        else if (Context.canAssignObjCInterfaces(FromIface2, FromIface1))
1906          return ImplicitConversionSequence::Worse;
1907      }
1908    }
1909  }
1910
1911  // Compare based on reference bindings.
1912  if (SCS1.ReferenceBinding && SCS2.ReferenceBinding &&
1913      SCS1.Second == ICK_Derived_To_Base) {
1914    //   -- binding of an expression of type C to a reference of type
1915    //      B& is better than binding an expression of type C to a
1916    //      reference of type A&,
1917    if (FromType1.getUnqualifiedType() == FromType2.getUnqualifiedType() &&
1918        ToType1.getUnqualifiedType() != ToType2.getUnqualifiedType()) {
1919      if (IsDerivedFrom(ToType1, ToType2))
1920        return ImplicitConversionSequence::Better;
1921      else if (IsDerivedFrom(ToType2, ToType1))
1922        return ImplicitConversionSequence::Worse;
1923    }
1924
1925    //   -- binding of an expression of type B to a reference of type
1926    //      A& is better than binding an expression of type C to a
1927    //      reference of type A&,
1928    if (FromType1.getUnqualifiedType() != FromType2.getUnqualifiedType() &&
1929        ToType1.getUnqualifiedType() == ToType2.getUnqualifiedType()) {
1930      if (IsDerivedFrom(FromType2, FromType1))
1931        return ImplicitConversionSequence::Better;
1932      else if (IsDerivedFrom(FromType1, FromType2))
1933        return ImplicitConversionSequence::Worse;
1934    }
1935  }
1936
1937
1938  // FIXME: conversion of A::* to B::* is better than conversion of
1939  // A::* to C::*,
1940
1941  // FIXME: conversion of B::* to C::* is better than conversion of
1942  // A::* to C::*, and
1943
1944  if (SCS1.CopyConstructor && SCS2.CopyConstructor &&
1945      SCS1.Second == ICK_Derived_To_Base) {
1946    //   -- conversion of C to B is better than conversion of C to A,
1947    if (FromType1.getUnqualifiedType() == FromType2.getUnqualifiedType() &&
1948        ToType1.getUnqualifiedType() != ToType2.getUnqualifiedType()) {
1949      if (IsDerivedFrom(ToType1, ToType2))
1950        return ImplicitConversionSequence::Better;
1951      else if (IsDerivedFrom(ToType2, ToType1))
1952        return ImplicitConversionSequence::Worse;
1953    }
1954
1955    //   -- conversion of B to A is better than conversion of C to A.
1956    if (FromType1.getUnqualifiedType() != FromType2.getUnqualifiedType() &&
1957        ToType1.getUnqualifiedType() == ToType2.getUnqualifiedType()) {
1958      if (IsDerivedFrom(FromType2, FromType1))
1959        return ImplicitConversionSequence::Better;
1960      else if (IsDerivedFrom(FromType1, FromType2))
1961        return ImplicitConversionSequence::Worse;
1962    }
1963  }
1964
1965  return ImplicitConversionSequence::Indistinguishable;
1966}
1967
1968/// TryCopyInitialization - Try to copy-initialize a value of type
1969/// ToType from the expression From. Return the implicit conversion
1970/// sequence required to pass this argument, which may be a bad
1971/// conversion sequence (meaning that the argument cannot be passed to
1972/// a parameter of this type). If @p SuppressUserConversions, then we
1973/// do not permit any user-defined conversion sequences. If @p ForceRValue,
1974/// then we treat @p From as an rvalue, even if it is an lvalue.
1975ImplicitConversionSequence
1976Sema::TryCopyInitialization(Expr *From, QualType ToType,
1977                            bool SuppressUserConversions, bool ForceRValue,
1978                            bool InOverloadResolution) {
1979  if (ToType->isReferenceType()) {
1980    ImplicitConversionSequence ICS;
1981    CheckReferenceInit(From, ToType,
1982                       /*FIXME:*/From->getLocStart(),
1983                       SuppressUserConversions,
1984                       /*AllowExplicit=*/false,
1985                       ForceRValue,
1986                       &ICS);
1987    return ICS;
1988  } else {
1989    return TryImplicitConversion(From, ToType,
1990                                 SuppressUserConversions,
1991                                 /*AllowExplicit=*/false,
1992                                 ForceRValue,
1993                                 InOverloadResolution);
1994  }
1995}
1996
1997/// PerformCopyInitialization - Copy-initialize an object of type @p ToType with
1998/// the expression @p From. Returns true (and emits a diagnostic) if there was
1999/// an error, returns false if the initialization succeeded. Elidable should
2000/// be true when the copy may be elided (C++ 12.8p15). Overload resolution works
2001/// differently in C++0x for this case.
2002bool Sema::PerformCopyInitialization(Expr *&From, QualType ToType,
2003                                     const char* Flavor, bool Elidable) {
2004  if (!getLangOptions().CPlusPlus) {
2005    // In C, argument passing is the same as performing an assignment.
2006    QualType FromType = From->getType();
2007
2008    AssignConvertType ConvTy =
2009      CheckSingleAssignmentConstraints(ToType, From);
2010    if (ConvTy != Compatible &&
2011        CheckTransparentUnionArgumentConstraints(ToType, From) == Compatible)
2012      ConvTy = Compatible;
2013
2014    return DiagnoseAssignmentResult(ConvTy, From->getLocStart(), ToType,
2015                                    FromType, From, Flavor);
2016  }
2017
2018  if (ToType->isReferenceType())
2019    return CheckReferenceInit(From, ToType,
2020                              /*FIXME:*/From->getLocStart(),
2021                              /*SuppressUserConversions=*/false,
2022                              /*AllowExplicit=*/false,
2023                              /*ForceRValue=*/false);
2024
2025  if (!PerformImplicitConversion(From, ToType, Flavor,
2026                                 /*AllowExplicit=*/false, Elidable))
2027    return false;
2028  if (!DiagnoseAmbiguousUserDefinedConversion(From, ToType))
2029    return Diag(From->getSourceRange().getBegin(),
2030                diag::err_typecheck_convert_incompatible)
2031      << ToType << From->getType() << Flavor << From->getSourceRange();
2032  return true;
2033}
2034
2035/// TryObjectArgumentInitialization - Try to initialize the object
2036/// parameter of the given member function (@c Method) from the
2037/// expression @p From.
2038ImplicitConversionSequence
2039Sema::TryObjectArgumentInitialization(Expr *From, CXXMethodDecl *Method) {
2040  QualType ClassType = Context.getTypeDeclType(Method->getParent());
2041  QualType ImplicitParamType
2042    = Context.getCVRQualifiedType(ClassType, Method->getTypeQualifiers());
2043
2044  // Set up the conversion sequence as a "bad" conversion, to allow us
2045  // to exit early.
2046  ImplicitConversionSequence ICS;
2047  ICS.Standard.setAsIdentityConversion();
2048  ICS.ConversionKind = ImplicitConversionSequence::BadConversion;
2049
2050  // We need to have an object of class type.
2051  QualType FromType = From->getType();
2052  if (const PointerType *PT = FromType->getAs<PointerType>())
2053    FromType = PT->getPointeeType();
2054
2055  assert(FromType->isRecordType());
2056
2057  // The implicit object parmeter is has the type "reference to cv X",
2058  // where X is the class of which the function is a member
2059  // (C++ [over.match.funcs]p4). However, when finding an implicit
2060  // conversion sequence for the argument, we are not allowed to
2061  // create temporaries or perform user-defined conversions
2062  // (C++ [over.match.funcs]p5). We perform a simplified version of
2063  // reference binding here, that allows class rvalues to bind to
2064  // non-constant references.
2065
2066  // First check the qualifiers. We don't care about lvalue-vs-rvalue
2067  // with the implicit object parameter (C++ [over.match.funcs]p5).
2068  QualType FromTypeCanon = Context.getCanonicalType(FromType);
2069  if (ImplicitParamType.getCVRQualifiers() != FromType.getCVRQualifiers() &&
2070      !ImplicitParamType.isAtLeastAsQualifiedAs(FromType))
2071    return ICS;
2072
2073  // Check that we have either the same type or a derived type. It
2074  // affects the conversion rank.
2075  QualType ClassTypeCanon = Context.getCanonicalType(ClassType);
2076  if (ClassTypeCanon == FromTypeCanon.getUnqualifiedType())
2077    ICS.Standard.Second = ICK_Identity;
2078  else if (IsDerivedFrom(FromType, ClassType))
2079    ICS.Standard.Second = ICK_Derived_To_Base;
2080  else
2081    return ICS;
2082
2083  // Success. Mark this as a reference binding.
2084  ICS.ConversionKind = ImplicitConversionSequence::StandardConversion;
2085  ICS.Standard.FromTypePtr = FromType.getAsOpaquePtr();
2086  ICS.Standard.ToTypePtr = ImplicitParamType.getAsOpaquePtr();
2087  ICS.Standard.ReferenceBinding = true;
2088  ICS.Standard.DirectBinding = true;
2089  ICS.Standard.RRefBinding = false;
2090  return ICS;
2091}
2092
2093/// PerformObjectArgumentInitialization - Perform initialization of
2094/// the implicit object parameter for the given Method with the given
2095/// expression.
2096bool
2097Sema::PerformObjectArgumentInitialization(Expr *&From, CXXMethodDecl *Method) {
2098  QualType FromRecordType, DestType;
2099  QualType ImplicitParamRecordType  =
2100    Method->getThisType(Context)->getAs<PointerType>()->getPointeeType();
2101
2102  if (const PointerType *PT = From->getType()->getAs<PointerType>()) {
2103    FromRecordType = PT->getPointeeType();
2104    DestType = Method->getThisType(Context);
2105  } else {
2106    FromRecordType = From->getType();
2107    DestType = ImplicitParamRecordType;
2108  }
2109
2110  ImplicitConversionSequence ICS
2111    = TryObjectArgumentInitialization(From, Method);
2112  if (ICS.ConversionKind == ImplicitConversionSequence::BadConversion)
2113    return Diag(From->getSourceRange().getBegin(),
2114                diag::err_implicit_object_parameter_init)
2115       << ImplicitParamRecordType << FromRecordType << From->getSourceRange();
2116
2117  if (ICS.Standard.Second == ICK_Derived_To_Base &&
2118      CheckDerivedToBaseConversion(FromRecordType,
2119                                   ImplicitParamRecordType,
2120                                   From->getSourceRange().getBegin(),
2121                                   From->getSourceRange()))
2122    return true;
2123
2124  ImpCastExprToType(From, DestType, CastExpr::CK_DerivedToBase,
2125                    /*isLvalue=*/true);
2126  return false;
2127}
2128
2129/// TryContextuallyConvertToBool - Attempt to contextually convert the
2130/// expression From to bool (C++0x [conv]p3).
2131ImplicitConversionSequence Sema::TryContextuallyConvertToBool(Expr *From) {
2132  return TryImplicitConversion(From, Context.BoolTy,
2133                               // FIXME: Are these flags correct?
2134                               /*SuppressUserConversions=*/false,
2135                               /*AllowExplicit=*/true,
2136                               /*ForceRValue=*/false,
2137                               /*InOverloadResolution=*/false);
2138}
2139
2140/// PerformContextuallyConvertToBool - Perform a contextual conversion
2141/// of the expression From to bool (C++0x [conv]p3).
2142bool Sema::PerformContextuallyConvertToBool(Expr *&From) {
2143  ImplicitConversionSequence ICS = TryContextuallyConvertToBool(From);
2144  if (!PerformImplicitConversion(From, Context.BoolTy, ICS, "converting"))
2145    return false;
2146
2147  if (!DiagnoseAmbiguousUserDefinedConversion(From, Context.BoolTy))
2148    return  Diag(From->getSourceRange().getBegin(),
2149                 diag::err_typecheck_bool_condition)
2150                  << From->getType() << From->getSourceRange();
2151  return true;
2152}
2153
2154/// AddOverloadCandidate - Adds the given function to the set of
2155/// candidate functions, using the given function call arguments.  If
2156/// @p SuppressUserConversions, then don't allow user-defined
2157/// conversions via constructors or conversion operators.
2158/// If @p ForceRValue, treat all arguments as rvalues. This is a slightly
2159/// hacky way to implement the overloading rules for elidable copy
2160/// initialization in C++0x (C++0x 12.8p15).
2161///
2162/// \para PartialOverloading true if we are performing "partial" overloading
2163/// based on an incomplete set of function arguments. This feature is used by
2164/// code completion.
2165void
2166Sema::AddOverloadCandidate(FunctionDecl *Function,
2167                           Expr **Args, unsigned NumArgs,
2168                           OverloadCandidateSet& CandidateSet,
2169                           bool SuppressUserConversions,
2170                           bool ForceRValue,
2171                           bool PartialOverloading) {
2172  const FunctionProtoType* Proto
2173    = dyn_cast<FunctionProtoType>(Function->getType()->getAs<FunctionType>());
2174  assert(Proto && "Functions without a prototype cannot be overloaded");
2175  assert(!isa<CXXConversionDecl>(Function) &&
2176         "Use AddConversionCandidate for conversion functions");
2177  assert(!Function->getDescribedFunctionTemplate() &&
2178         "Use AddTemplateOverloadCandidate for function templates");
2179
2180  if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Function)) {
2181    if (!isa<CXXConstructorDecl>(Method)) {
2182      // If we get here, it's because we're calling a member function
2183      // that is named without a member access expression (e.g.,
2184      // "this->f") that was either written explicitly or created
2185      // implicitly. This can happen with a qualified call to a member
2186      // function, e.g., X::f(). We use a NULL object as the implied
2187      // object argument (C++ [over.call.func]p3).
2188      AddMethodCandidate(Method, 0, Args, NumArgs, CandidateSet,
2189                         SuppressUserConversions, ForceRValue);
2190      return;
2191    }
2192    // We treat a constructor like a non-member function, since its object
2193    // argument doesn't participate in overload resolution.
2194  }
2195
2196  if (!CandidateSet.isNewCandidate(Function))
2197    return;
2198
2199  // Add this candidate
2200  CandidateSet.push_back(OverloadCandidate());
2201  OverloadCandidate& Candidate = CandidateSet.back();
2202  Candidate.Function = Function;
2203  Candidate.Viable = true;
2204  Candidate.IsSurrogate = false;
2205  Candidate.IgnoreObjectArgument = false;
2206
2207  unsigned NumArgsInProto = Proto->getNumArgs();
2208
2209  // (C++ 13.3.2p2): A candidate function having fewer than m
2210  // parameters is viable only if it has an ellipsis in its parameter
2211  // list (8.3.5).
2212  if ((NumArgs + (PartialOverloading && NumArgs)) > NumArgsInProto &&
2213      !Proto->isVariadic()) {
2214    Candidate.Viable = false;
2215    return;
2216  }
2217
2218  // (C++ 13.3.2p2): A candidate function having more than m parameters
2219  // is viable only if the (m+1)st parameter has a default argument
2220  // (8.3.6). For the purposes of overload resolution, the
2221  // parameter list is truncated on the right, so that there are
2222  // exactly m parameters.
2223  unsigned MinRequiredArgs = Function->getMinRequiredArguments();
2224  if (NumArgs < MinRequiredArgs && !PartialOverloading) {
2225    // Not enough arguments.
2226    Candidate.Viable = false;
2227    return;
2228  }
2229
2230  // Determine the implicit conversion sequences for each of the
2231  // arguments.
2232  Candidate.Conversions.resize(NumArgs);
2233  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
2234    if (ArgIdx < NumArgsInProto) {
2235      // (C++ 13.3.2p3): for F to be a viable function, there shall
2236      // exist for each argument an implicit conversion sequence
2237      // (13.3.3.1) that converts that argument to the corresponding
2238      // parameter of F.
2239      QualType ParamType = Proto->getArgType(ArgIdx);
2240      Candidate.Conversions[ArgIdx]
2241        = TryCopyInitialization(Args[ArgIdx], ParamType,
2242                                SuppressUserConversions, ForceRValue,
2243                                /*InOverloadResolution=*/true);
2244      if (Candidate.Conversions[ArgIdx].ConversionKind
2245            == ImplicitConversionSequence::BadConversion) {
2246      // 13.3.3.1-p10 If several different sequences of conversions exist that
2247      // each convert the argument to the parameter type, the implicit conversion
2248      // sequence associated with the parameter is defined to be the unique conversion
2249      // sequence designated the ambiguous conversion sequence. For the purpose of
2250      // ranking implicit conversion sequences as described in 13.3.3.2, the ambiguous
2251      // conversion sequence is treated as a user-defined sequence that is
2252      // indistinguishable from any other user-defined conversion sequence
2253        if (!Candidate.Conversions[ArgIdx].ConversionFunctionSet.empty()) {
2254          Candidate.Conversions[ArgIdx].ConversionKind =
2255            ImplicitConversionSequence::UserDefinedConversion;
2256          // Set the conversion function to one of them. As due to ambiguity,
2257          // they carry the same weight and is needed for overload resolution
2258          // later.
2259          Candidate.Conversions[ArgIdx].UserDefined.ConversionFunction =
2260            Candidate.Conversions[ArgIdx].ConversionFunctionSet[0];
2261        }
2262        else {
2263          Candidate.Viable = false;
2264          break;
2265        }
2266      }
2267    } else {
2268      // (C++ 13.3.2p2): For the purposes of overload resolution, any
2269      // argument for which there is no corresponding parameter is
2270      // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
2271      Candidate.Conversions[ArgIdx].ConversionKind
2272        = ImplicitConversionSequence::EllipsisConversion;
2273    }
2274  }
2275}
2276
2277/// \brief Add all of the function declarations in the given function set to
2278/// the overload canddiate set.
2279void Sema::AddFunctionCandidates(const FunctionSet &Functions,
2280                                 Expr **Args, unsigned NumArgs,
2281                                 OverloadCandidateSet& CandidateSet,
2282                                 bool SuppressUserConversions) {
2283  for (FunctionSet::const_iterator F = Functions.begin(),
2284                                FEnd = Functions.end();
2285       F != FEnd; ++F) {
2286    if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*F)) {
2287      if (isa<CXXMethodDecl>(FD) && !cast<CXXMethodDecl>(FD)->isStatic())
2288        AddMethodCandidate(cast<CXXMethodDecl>(FD),
2289                           Args[0], Args + 1, NumArgs - 1,
2290                           CandidateSet, SuppressUserConversions);
2291      else
2292        AddOverloadCandidate(FD, Args, NumArgs, CandidateSet,
2293                             SuppressUserConversions);
2294    } else {
2295      FunctionTemplateDecl *FunTmpl = cast<FunctionTemplateDecl>(*F);
2296      if (isa<CXXMethodDecl>(FunTmpl->getTemplatedDecl()) &&
2297          !cast<CXXMethodDecl>(FunTmpl->getTemplatedDecl())->isStatic())
2298        AddMethodTemplateCandidate(FunTmpl,
2299                                   /*FIXME: explicit args */false, 0, 0,
2300                                   Args[0], Args + 1, NumArgs - 1,
2301                                   CandidateSet,
2302                                   SuppressUserConversions);
2303      else
2304        AddTemplateOverloadCandidate(FunTmpl,
2305                                     /*FIXME: explicit args */false, 0, 0,
2306                                     Args, NumArgs, CandidateSet,
2307                                     SuppressUserConversions);
2308    }
2309  }
2310}
2311
2312/// AddMethodCandidate - Adds the given C++ member function to the set
2313/// of candidate functions, using the given function call arguments
2314/// and the object argument (@c Object). For example, in a call
2315/// @c o.f(a1,a2), @c Object will contain @c o and @c Args will contain
2316/// both @c a1 and @c a2. If @p SuppressUserConversions, then don't
2317/// allow user-defined conversions via constructors or conversion
2318/// operators. If @p ForceRValue, treat all arguments as rvalues. This is
2319/// a slightly hacky way to implement the overloading rules for elidable copy
2320/// initialization in C++0x (C++0x 12.8p15).
2321void
2322Sema::AddMethodCandidate(CXXMethodDecl *Method, Expr *Object,
2323                         Expr **Args, unsigned NumArgs,
2324                         OverloadCandidateSet& CandidateSet,
2325                         bool SuppressUserConversions, bool ForceRValue) {
2326  const FunctionProtoType* Proto
2327    = dyn_cast<FunctionProtoType>(Method->getType()->getAs<FunctionType>());
2328  assert(Proto && "Methods without a prototype cannot be overloaded");
2329  assert(!isa<CXXConversionDecl>(Method) &&
2330         "Use AddConversionCandidate for conversion functions");
2331  assert(!isa<CXXConstructorDecl>(Method) &&
2332         "Use AddOverloadCandidate for constructors");
2333
2334  if (!CandidateSet.isNewCandidate(Method))
2335    return;
2336
2337  // Add this candidate
2338  CandidateSet.push_back(OverloadCandidate());
2339  OverloadCandidate& Candidate = CandidateSet.back();
2340  Candidate.Function = Method;
2341  Candidate.IsSurrogate = false;
2342  Candidate.IgnoreObjectArgument = false;
2343
2344  unsigned NumArgsInProto = Proto->getNumArgs();
2345
2346  // (C++ 13.3.2p2): A candidate function having fewer than m
2347  // parameters is viable only if it has an ellipsis in its parameter
2348  // list (8.3.5).
2349  if (NumArgs > NumArgsInProto && !Proto->isVariadic()) {
2350    Candidate.Viable = false;
2351    return;
2352  }
2353
2354  // (C++ 13.3.2p2): A candidate function having more than m parameters
2355  // is viable only if the (m+1)st parameter has a default argument
2356  // (8.3.6). For the purposes of overload resolution, the
2357  // parameter list is truncated on the right, so that there are
2358  // exactly m parameters.
2359  unsigned MinRequiredArgs = Method->getMinRequiredArguments();
2360  if (NumArgs < MinRequiredArgs) {
2361    // Not enough arguments.
2362    Candidate.Viable = false;
2363    return;
2364  }
2365
2366  Candidate.Viable = true;
2367  Candidate.Conversions.resize(NumArgs + 1);
2368
2369  if (Method->isStatic() || !Object)
2370    // The implicit object argument is ignored.
2371    Candidate.IgnoreObjectArgument = true;
2372  else {
2373    // Determine the implicit conversion sequence for the object
2374    // parameter.
2375    Candidate.Conversions[0] = TryObjectArgumentInitialization(Object, Method);
2376    if (Candidate.Conversions[0].ConversionKind
2377          == ImplicitConversionSequence::BadConversion) {
2378      Candidate.Viable = false;
2379      return;
2380    }
2381  }
2382
2383  // Determine the implicit conversion sequences for each of the
2384  // arguments.
2385  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
2386    if (ArgIdx < NumArgsInProto) {
2387      // (C++ 13.3.2p3): for F to be a viable function, there shall
2388      // exist for each argument an implicit conversion sequence
2389      // (13.3.3.1) that converts that argument to the corresponding
2390      // parameter of F.
2391      QualType ParamType = Proto->getArgType(ArgIdx);
2392      Candidate.Conversions[ArgIdx + 1]
2393        = TryCopyInitialization(Args[ArgIdx], ParamType,
2394                                SuppressUserConversions, ForceRValue,
2395                                /*InOverloadResolution=*/true);
2396      if (Candidate.Conversions[ArgIdx + 1].ConversionKind
2397            == ImplicitConversionSequence::BadConversion) {
2398        Candidate.Viable = false;
2399        break;
2400      }
2401    } else {
2402      // (C++ 13.3.2p2): For the purposes of overload resolution, any
2403      // argument for which there is no corresponding parameter is
2404      // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
2405      Candidate.Conversions[ArgIdx + 1].ConversionKind
2406        = ImplicitConversionSequence::EllipsisConversion;
2407    }
2408  }
2409}
2410
2411/// \brief Add a C++ member function template as a candidate to the candidate
2412/// set, using template argument deduction to produce an appropriate member
2413/// function template specialization.
2414void
2415Sema::AddMethodTemplateCandidate(FunctionTemplateDecl *MethodTmpl,
2416                                 bool HasExplicitTemplateArgs,
2417                                 const TemplateArgument *ExplicitTemplateArgs,
2418                                 unsigned NumExplicitTemplateArgs,
2419                                 Expr *Object, Expr **Args, unsigned NumArgs,
2420                                 OverloadCandidateSet& CandidateSet,
2421                                 bool SuppressUserConversions,
2422                                 bool ForceRValue) {
2423  if (!CandidateSet.isNewCandidate(MethodTmpl))
2424    return;
2425
2426  // C++ [over.match.funcs]p7:
2427  //   In each case where a candidate is a function template, candidate
2428  //   function template specializations are generated using template argument
2429  //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
2430  //   candidate functions in the usual way.113) A given name can refer to one
2431  //   or more function templates and also to a set of overloaded non-template
2432  //   functions. In such a case, the candidate functions generated from each
2433  //   function template are combined with the set of non-template candidate
2434  //   functions.
2435  TemplateDeductionInfo Info(Context);
2436  FunctionDecl *Specialization = 0;
2437  if (TemplateDeductionResult Result
2438      = DeduceTemplateArguments(MethodTmpl, HasExplicitTemplateArgs,
2439                                ExplicitTemplateArgs, NumExplicitTemplateArgs,
2440                                Args, NumArgs, Specialization, Info)) {
2441        // FIXME: Record what happened with template argument deduction, so
2442        // that we can give the user a beautiful diagnostic.
2443        (void)Result;
2444        return;
2445      }
2446
2447  // Add the function template specialization produced by template argument
2448  // deduction as a candidate.
2449  assert(Specialization && "Missing member function template specialization?");
2450  assert(isa<CXXMethodDecl>(Specialization) &&
2451         "Specialization is not a member function?");
2452  AddMethodCandidate(cast<CXXMethodDecl>(Specialization), Object, Args, NumArgs,
2453                     CandidateSet, SuppressUserConversions, ForceRValue);
2454}
2455
2456/// \brief Add a C++ function template specialization as a candidate
2457/// in the candidate set, using template argument deduction to produce
2458/// an appropriate function template specialization.
2459void
2460Sema::AddTemplateOverloadCandidate(FunctionTemplateDecl *FunctionTemplate,
2461                                   bool HasExplicitTemplateArgs,
2462                                 const TemplateArgument *ExplicitTemplateArgs,
2463                                   unsigned NumExplicitTemplateArgs,
2464                                   Expr **Args, unsigned NumArgs,
2465                                   OverloadCandidateSet& CandidateSet,
2466                                   bool SuppressUserConversions,
2467                                   bool ForceRValue) {
2468  if (!CandidateSet.isNewCandidate(FunctionTemplate))
2469    return;
2470
2471  // C++ [over.match.funcs]p7:
2472  //   In each case where a candidate is a function template, candidate
2473  //   function template specializations are generated using template argument
2474  //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
2475  //   candidate functions in the usual way.113) A given name can refer to one
2476  //   or more function templates and also to a set of overloaded non-template
2477  //   functions. In such a case, the candidate functions generated from each
2478  //   function template are combined with the set of non-template candidate
2479  //   functions.
2480  TemplateDeductionInfo Info(Context);
2481  FunctionDecl *Specialization = 0;
2482  if (TemplateDeductionResult Result
2483        = DeduceTemplateArguments(FunctionTemplate, HasExplicitTemplateArgs,
2484                                  ExplicitTemplateArgs, NumExplicitTemplateArgs,
2485                                  Args, NumArgs, Specialization, Info)) {
2486    // FIXME: Record what happened with template argument deduction, so
2487    // that we can give the user a beautiful diagnostic.
2488    (void)Result;
2489    return;
2490  }
2491
2492  // Add the function template specialization produced by template argument
2493  // deduction as a candidate.
2494  assert(Specialization && "Missing function template specialization?");
2495  AddOverloadCandidate(Specialization, Args, NumArgs, CandidateSet,
2496                       SuppressUserConversions, ForceRValue);
2497}
2498
2499/// AddConversionCandidate - Add a C++ conversion function as a
2500/// candidate in the candidate set (C++ [over.match.conv],
2501/// C++ [over.match.copy]). From is the expression we're converting from,
2502/// and ToType is the type that we're eventually trying to convert to
2503/// (which may or may not be the same type as the type that the
2504/// conversion function produces).
2505void
2506Sema::AddConversionCandidate(CXXConversionDecl *Conversion,
2507                             Expr *From, QualType ToType,
2508                             OverloadCandidateSet& CandidateSet) {
2509  assert(!Conversion->getDescribedFunctionTemplate() &&
2510         "Conversion function templates use AddTemplateConversionCandidate");
2511
2512  if (!CandidateSet.isNewCandidate(Conversion))
2513    return;
2514
2515  // Add this candidate
2516  CandidateSet.push_back(OverloadCandidate());
2517  OverloadCandidate& Candidate = CandidateSet.back();
2518  Candidate.Function = Conversion;
2519  Candidate.IsSurrogate = false;
2520  Candidate.IgnoreObjectArgument = false;
2521  Candidate.FinalConversion.setAsIdentityConversion();
2522  Candidate.FinalConversion.FromTypePtr
2523    = Conversion->getConversionType().getAsOpaquePtr();
2524  Candidate.FinalConversion.ToTypePtr = ToType.getAsOpaquePtr();
2525
2526  // Determine the implicit conversion sequence for the implicit
2527  // object parameter.
2528  Candidate.Viable = true;
2529  Candidate.Conversions.resize(1);
2530  Candidate.Conversions[0] = TryObjectArgumentInitialization(From, Conversion);
2531  // Conversion functions to a different type in the base class is visible in
2532  // the derived class.  So, a derived to base conversion should not participate
2533  // in overload resolution.
2534  if (Candidate.Conversions[0].Standard.Second == ICK_Derived_To_Base)
2535    Candidate.Conversions[0].Standard.Second = ICK_Identity;
2536  if (Candidate.Conversions[0].ConversionKind
2537      == ImplicitConversionSequence::BadConversion) {
2538    Candidate.Viable = false;
2539    return;
2540  }
2541
2542  // To determine what the conversion from the result of calling the
2543  // conversion function to the type we're eventually trying to
2544  // convert to (ToType), we need to synthesize a call to the
2545  // conversion function and attempt copy initialization from it. This
2546  // makes sure that we get the right semantics with respect to
2547  // lvalues/rvalues and the type. Fortunately, we can allocate this
2548  // call on the stack and we don't need its arguments to be
2549  // well-formed.
2550  DeclRefExpr ConversionRef(Conversion, Conversion->getType(),
2551                            SourceLocation());
2552  ImplicitCastExpr ConversionFn(Context.getPointerType(Conversion->getType()),
2553                                CastExpr::CK_Unknown,
2554                                &ConversionRef, false);
2555
2556  // Note that it is safe to allocate CallExpr on the stack here because
2557  // there are 0 arguments (i.e., nothing is allocated using ASTContext's
2558  // allocator).
2559  CallExpr Call(Context, &ConversionFn, 0, 0,
2560                Conversion->getConversionType().getNonReferenceType(),
2561                SourceLocation());
2562  ImplicitConversionSequence ICS =
2563    TryCopyInitialization(&Call, ToType,
2564                          /*SuppressUserConversions=*/true,
2565                          /*ForceRValue=*/false,
2566                          /*InOverloadResolution=*/false);
2567
2568  switch (ICS.ConversionKind) {
2569  case ImplicitConversionSequence::StandardConversion:
2570    Candidate.FinalConversion = ICS.Standard;
2571    break;
2572
2573  case ImplicitConversionSequence::BadConversion:
2574    Candidate.Viable = false;
2575    break;
2576
2577  default:
2578    assert(false &&
2579           "Can only end up with a standard conversion sequence or failure");
2580  }
2581}
2582
2583/// \brief Adds a conversion function template specialization
2584/// candidate to the overload set, using template argument deduction
2585/// to deduce the template arguments of the conversion function
2586/// template from the type that we are converting to (C++
2587/// [temp.deduct.conv]).
2588void
2589Sema::AddTemplateConversionCandidate(FunctionTemplateDecl *FunctionTemplate,
2590                                     Expr *From, QualType ToType,
2591                                     OverloadCandidateSet &CandidateSet) {
2592  assert(isa<CXXConversionDecl>(FunctionTemplate->getTemplatedDecl()) &&
2593         "Only conversion function templates permitted here");
2594
2595  if (!CandidateSet.isNewCandidate(FunctionTemplate))
2596    return;
2597
2598  TemplateDeductionInfo Info(Context);
2599  CXXConversionDecl *Specialization = 0;
2600  if (TemplateDeductionResult Result
2601        = DeduceTemplateArguments(FunctionTemplate, ToType,
2602                                  Specialization, Info)) {
2603    // FIXME: Record what happened with template argument deduction, so
2604    // that we can give the user a beautiful diagnostic.
2605    (void)Result;
2606    return;
2607  }
2608
2609  // Add the conversion function template specialization produced by
2610  // template argument deduction as a candidate.
2611  assert(Specialization && "Missing function template specialization?");
2612  AddConversionCandidate(Specialization, From, ToType, CandidateSet);
2613}
2614
2615/// AddSurrogateCandidate - Adds a "surrogate" candidate function that
2616/// converts the given @c Object to a function pointer via the
2617/// conversion function @c Conversion, and then attempts to call it
2618/// with the given arguments (C++ [over.call.object]p2-4). Proto is
2619/// the type of function that we'll eventually be calling.
2620void Sema::AddSurrogateCandidate(CXXConversionDecl *Conversion,
2621                                 const FunctionProtoType *Proto,
2622                                 Expr *Object, Expr **Args, unsigned NumArgs,
2623                                 OverloadCandidateSet& CandidateSet) {
2624  if (!CandidateSet.isNewCandidate(Conversion))
2625    return;
2626
2627  CandidateSet.push_back(OverloadCandidate());
2628  OverloadCandidate& Candidate = CandidateSet.back();
2629  Candidate.Function = 0;
2630  Candidate.Surrogate = Conversion;
2631  Candidate.Viable = true;
2632  Candidate.IsSurrogate = true;
2633  Candidate.IgnoreObjectArgument = false;
2634  Candidate.Conversions.resize(NumArgs + 1);
2635
2636  // Determine the implicit conversion sequence for the implicit
2637  // object parameter.
2638  ImplicitConversionSequence ObjectInit
2639    = TryObjectArgumentInitialization(Object, Conversion);
2640  if (ObjectInit.ConversionKind == ImplicitConversionSequence::BadConversion) {
2641    Candidate.Viable = false;
2642    return;
2643  }
2644
2645  // The first conversion is actually a user-defined conversion whose
2646  // first conversion is ObjectInit's standard conversion (which is
2647  // effectively a reference binding). Record it as such.
2648  Candidate.Conversions[0].ConversionKind
2649    = ImplicitConversionSequence::UserDefinedConversion;
2650  Candidate.Conversions[0].UserDefined.Before = ObjectInit.Standard;
2651  Candidate.Conversions[0].UserDefined.ConversionFunction = Conversion;
2652  Candidate.Conversions[0].UserDefined.After
2653    = Candidate.Conversions[0].UserDefined.Before;
2654  Candidate.Conversions[0].UserDefined.After.setAsIdentityConversion();
2655
2656  // Find the
2657  unsigned NumArgsInProto = Proto->getNumArgs();
2658
2659  // (C++ 13.3.2p2): A candidate function having fewer than m
2660  // parameters is viable only if it has an ellipsis in its parameter
2661  // list (8.3.5).
2662  if (NumArgs > NumArgsInProto && !Proto->isVariadic()) {
2663    Candidate.Viable = false;
2664    return;
2665  }
2666
2667  // Function types don't have any default arguments, so just check if
2668  // we have enough arguments.
2669  if (NumArgs < NumArgsInProto) {
2670    // Not enough arguments.
2671    Candidate.Viable = false;
2672    return;
2673  }
2674
2675  // Determine the implicit conversion sequences for each of the
2676  // arguments.
2677  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
2678    if (ArgIdx < NumArgsInProto) {
2679      // (C++ 13.3.2p3): for F to be a viable function, there shall
2680      // exist for each argument an implicit conversion sequence
2681      // (13.3.3.1) that converts that argument to the corresponding
2682      // parameter of F.
2683      QualType ParamType = Proto->getArgType(ArgIdx);
2684      Candidate.Conversions[ArgIdx + 1]
2685        = TryCopyInitialization(Args[ArgIdx], ParamType,
2686                                /*SuppressUserConversions=*/false,
2687                                /*ForceRValue=*/false,
2688                                /*InOverloadResolution=*/false);
2689      if (Candidate.Conversions[ArgIdx + 1].ConversionKind
2690            == ImplicitConversionSequence::BadConversion) {
2691        Candidate.Viable = false;
2692        break;
2693      }
2694    } else {
2695      // (C++ 13.3.2p2): For the purposes of overload resolution, any
2696      // argument for which there is no corresponding parameter is
2697      // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
2698      Candidate.Conversions[ArgIdx + 1].ConversionKind
2699        = ImplicitConversionSequence::EllipsisConversion;
2700    }
2701  }
2702}
2703
2704// FIXME: This will eventually be removed, once we've migrated all of the
2705// operator overloading logic over to the scheme used by binary operators, which
2706// works for template instantiation.
2707void Sema::AddOperatorCandidates(OverloadedOperatorKind Op, Scope *S,
2708                                 SourceLocation OpLoc,
2709                                 Expr **Args, unsigned NumArgs,
2710                                 OverloadCandidateSet& CandidateSet,
2711                                 SourceRange OpRange) {
2712  FunctionSet Functions;
2713
2714  QualType T1 = Args[0]->getType();
2715  QualType T2;
2716  if (NumArgs > 1)
2717    T2 = Args[1]->getType();
2718
2719  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
2720  if (S)
2721    LookupOverloadedOperatorName(Op, S, T1, T2, Functions);
2722  ArgumentDependentLookup(OpName, Args, NumArgs, Functions);
2723  AddFunctionCandidates(Functions, Args, NumArgs, CandidateSet);
2724  AddMemberOperatorCandidates(Op, OpLoc, Args, NumArgs, CandidateSet, OpRange);
2725  AddBuiltinOperatorCandidates(Op, Args, NumArgs, CandidateSet);
2726}
2727
2728/// \brief Add overload candidates for overloaded operators that are
2729/// member functions.
2730///
2731/// Add the overloaded operator candidates that are member functions
2732/// for the operator Op that was used in an operator expression such
2733/// as "x Op y". , Args/NumArgs provides the operator arguments, and
2734/// CandidateSet will store the added overload candidates. (C++
2735/// [over.match.oper]).
2736void Sema::AddMemberOperatorCandidates(OverloadedOperatorKind Op,
2737                                       SourceLocation OpLoc,
2738                                       Expr **Args, unsigned NumArgs,
2739                                       OverloadCandidateSet& CandidateSet,
2740                                       SourceRange OpRange) {
2741  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
2742
2743  // C++ [over.match.oper]p3:
2744  //   For a unary operator @ with an operand of a type whose
2745  //   cv-unqualified version is T1, and for a binary operator @ with
2746  //   a left operand of a type whose cv-unqualified version is T1 and
2747  //   a right operand of a type whose cv-unqualified version is T2,
2748  //   three sets of candidate functions, designated member
2749  //   candidates, non-member candidates and built-in candidates, are
2750  //   constructed as follows:
2751  QualType T1 = Args[0]->getType();
2752  QualType T2;
2753  if (NumArgs > 1)
2754    T2 = Args[1]->getType();
2755
2756  //     -- If T1 is a class type, the set of member candidates is the
2757  //        result of the qualified lookup of T1::operator@
2758  //        (13.3.1.1.1); otherwise, the set of member candidates is
2759  //        empty.
2760  if (const RecordType *T1Rec = T1->getAs<RecordType>()) {
2761    // Complete the type if it can be completed. Otherwise, we're done.
2762    if (RequireCompleteType(OpLoc, T1, PDiag()))
2763      return;
2764
2765    LookupResult Operators;
2766    LookupQualifiedName(Operators, T1Rec->getDecl(), OpName,
2767                        LookupOrdinaryName, false);
2768    for (LookupResult::iterator Oper = Operators.begin(),
2769                             OperEnd = Operators.end();
2770         Oper != OperEnd;
2771         ++Oper)
2772      AddMethodCandidate(cast<CXXMethodDecl>(*Oper), Args[0],
2773                         Args+1, NumArgs - 1, CandidateSet,
2774                         /*SuppressUserConversions=*/false);
2775  }
2776}
2777
2778/// AddBuiltinCandidate - Add a candidate for a built-in
2779/// operator. ResultTy and ParamTys are the result and parameter types
2780/// of the built-in candidate, respectively. Args and NumArgs are the
2781/// arguments being passed to the candidate. IsAssignmentOperator
2782/// should be true when this built-in candidate is an assignment
2783/// operator. NumContextualBoolArguments is the number of arguments
2784/// (at the beginning of the argument list) that will be contextually
2785/// converted to bool.
2786void Sema::AddBuiltinCandidate(QualType ResultTy, QualType *ParamTys,
2787                               Expr **Args, unsigned NumArgs,
2788                               OverloadCandidateSet& CandidateSet,
2789                               bool IsAssignmentOperator,
2790                               unsigned NumContextualBoolArguments) {
2791  // Add this candidate
2792  CandidateSet.push_back(OverloadCandidate());
2793  OverloadCandidate& Candidate = CandidateSet.back();
2794  Candidate.Function = 0;
2795  Candidate.IsSurrogate = false;
2796  Candidate.IgnoreObjectArgument = false;
2797  Candidate.BuiltinTypes.ResultTy = ResultTy;
2798  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
2799    Candidate.BuiltinTypes.ParamTypes[ArgIdx] = ParamTys[ArgIdx];
2800
2801  // Determine the implicit conversion sequences for each of the
2802  // arguments.
2803  Candidate.Viable = true;
2804  Candidate.Conversions.resize(NumArgs);
2805  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
2806    // C++ [over.match.oper]p4:
2807    //   For the built-in assignment operators, conversions of the
2808    //   left operand are restricted as follows:
2809    //     -- no temporaries are introduced to hold the left operand, and
2810    //     -- no user-defined conversions are applied to the left
2811    //        operand to achieve a type match with the left-most
2812    //        parameter of a built-in candidate.
2813    //
2814    // We block these conversions by turning off user-defined
2815    // conversions, since that is the only way that initialization of
2816    // a reference to a non-class type can occur from something that
2817    // is not of the same type.
2818    if (ArgIdx < NumContextualBoolArguments) {
2819      assert(ParamTys[ArgIdx] == Context.BoolTy &&
2820             "Contextual conversion to bool requires bool type");
2821      Candidate.Conversions[ArgIdx] = TryContextuallyConvertToBool(Args[ArgIdx]);
2822    } else {
2823      Candidate.Conversions[ArgIdx]
2824        = TryCopyInitialization(Args[ArgIdx], ParamTys[ArgIdx],
2825                                ArgIdx == 0 && IsAssignmentOperator,
2826                                /*ForceRValue=*/false,
2827                                /*InOverloadResolution=*/false);
2828    }
2829    if (Candidate.Conversions[ArgIdx].ConversionKind
2830        == ImplicitConversionSequence::BadConversion) {
2831      Candidate.Viable = false;
2832      break;
2833    }
2834  }
2835}
2836
2837/// BuiltinCandidateTypeSet - A set of types that will be used for the
2838/// candidate operator functions for built-in operators (C++
2839/// [over.built]). The types are separated into pointer types and
2840/// enumeration types.
2841class BuiltinCandidateTypeSet  {
2842  /// TypeSet - A set of types.
2843  typedef llvm::SmallPtrSet<QualType, 8> TypeSet;
2844
2845  /// PointerTypes - The set of pointer types that will be used in the
2846  /// built-in candidates.
2847  TypeSet PointerTypes;
2848
2849  /// MemberPointerTypes - The set of member pointer types that will be
2850  /// used in the built-in candidates.
2851  TypeSet MemberPointerTypes;
2852
2853  /// EnumerationTypes - The set of enumeration types that will be
2854  /// used in the built-in candidates.
2855  TypeSet EnumerationTypes;
2856
2857  /// Sema - The semantic analysis instance where we are building the
2858  /// candidate type set.
2859  Sema &SemaRef;
2860
2861  /// Context - The AST context in which we will build the type sets.
2862  ASTContext &Context;
2863
2864  bool AddPointerWithMoreQualifiedTypeVariants(QualType Ty);
2865  bool AddMemberPointerWithMoreQualifiedTypeVariants(QualType Ty);
2866
2867public:
2868  /// iterator - Iterates through the types that are part of the set.
2869  typedef TypeSet::iterator iterator;
2870
2871  BuiltinCandidateTypeSet(Sema &SemaRef)
2872    : SemaRef(SemaRef), Context(SemaRef.Context) { }
2873
2874  void AddTypesConvertedFrom(QualType Ty, bool AllowUserConversions,
2875                             bool AllowExplicitConversions);
2876
2877  /// pointer_begin - First pointer type found;
2878  iterator pointer_begin() { return PointerTypes.begin(); }
2879
2880  /// pointer_end - Past the last pointer type found;
2881  iterator pointer_end() { return PointerTypes.end(); }
2882
2883  /// member_pointer_begin - First member pointer type found;
2884  iterator member_pointer_begin() { return MemberPointerTypes.begin(); }
2885
2886  /// member_pointer_end - Past the last member pointer type found;
2887  iterator member_pointer_end() { return MemberPointerTypes.end(); }
2888
2889  /// enumeration_begin - First enumeration type found;
2890  iterator enumeration_begin() { return EnumerationTypes.begin(); }
2891
2892  /// enumeration_end - Past the last enumeration type found;
2893  iterator enumeration_end() { return EnumerationTypes.end(); }
2894};
2895
2896/// AddPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty to
2897/// the set of pointer types along with any more-qualified variants of
2898/// that type. For example, if @p Ty is "int const *", this routine
2899/// will add "int const *", "int const volatile *", "int const
2900/// restrict *", and "int const volatile restrict *" to the set of
2901/// pointer types. Returns true if the add of @p Ty itself succeeded,
2902/// false otherwise.
2903///
2904/// FIXME: what to do about extended qualifiers?
2905bool
2906BuiltinCandidateTypeSet::AddPointerWithMoreQualifiedTypeVariants(QualType Ty) {
2907
2908  // Insert this type.
2909  if (!PointerTypes.insert(Ty))
2910    return false;
2911
2912  const PointerType *PointerTy = Ty->getAs<PointerType>();
2913  assert(PointerTy && "type was not a pointer type!");
2914
2915  QualType PointeeTy = PointerTy->getPointeeType();
2916  unsigned BaseCVR = PointeeTy.getCVRQualifiers();
2917
2918  // Iterate through all strict supersets of BaseCVR.
2919  for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
2920    if ((CVR | BaseCVR) != CVR) continue;
2921
2922    QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
2923    PointerTypes.insert(Context.getPointerType(QPointeeTy));
2924  }
2925
2926  return true;
2927}
2928
2929/// AddMemberPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty
2930/// to the set of pointer types along with any more-qualified variants of
2931/// that type. For example, if @p Ty is "int const *", this routine
2932/// will add "int const *", "int const volatile *", "int const
2933/// restrict *", and "int const volatile restrict *" to the set of
2934/// pointer types. Returns true if the add of @p Ty itself succeeded,
2935/// false otherwise.
2936///
2937/// FIXME: what to do about extended qualifiers?
2938bool
2939BuiltinCandidateTypeSet::AddMemberPointerWithMoreQualifiedTypeVariants(
2940    QualType Ty) {
2941  // Insert this type.
2942  if (!MemberPointerTypes.insert(Ty))
2943    return false;
2944
2945  const MemberPointerType *PointerTy = Ty->getAs<MemberPointerType>();
2946  assert(PointerTy && "type was not a member pointer type!");
2947
2948  QualType PointeeTy = PointerTy->getPointeeType();
2949  const Type *ClassTy = PointerTy->getClass();
2950
2951  // Iterate through all strict supersets of the pointee type's CVR
2952  // qualifiers.
2953  unsigned BaseCVR = PointeeTy.getCVRQualifiers();
2954  for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
2955    if ((CVR | BaseCVR) != CVR) continue;
2956
2957    QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
2958    MemberPointerTypes.insert(Context.getMemberPointerType(QPointeeTy, ClassTy));
2959  }
2960
2961  return true;
2962}
2963
2964/// AddTypesConvertedFrom - Add each of the types to which the type @p
2965/// Ty can be implicit converted to the given set of @p Types. We're
2966/// primarily interested in pointer types and enumeration types. We also
2967/// take member pointer types, for the conditional operator.
2968/// AllowUserConversions is true if we should look at the conversion
2969/// functions of a class type, and AllowExplicitConversions if we
2970/// should also include the explicit conversion functions of a class
2971/// type.
2972void
2973BuiltinCandidateTypeSet::AddTypesConvertedFrom(QualType Ty,
2974                                               bool AllowUserConversions,
2975                                               bool AllowExplicitConversions) {
2976  // Only deal with canonical types.
2977  Ty = Context.getCanonicalType(Ty);
2978
2979  // Look through reference types; they aren't part of the type of an
2980  // expression for the purposes of conversions.
2981  if (const ReferenceType *RefTy = Ty->getAs<ReferenceType>())
2982    Ty = RefTy->getPointeeType();
2983
2984  // We don't care about qualifiers on the type.
2985  Ty = Ty.getUnqualifiedType();
2986
2987  if (const PointerType *PointerTy = Ty->getAs<PointerType>()) {
2988    QualType PointeeTy = PointerTy->getPointeeType();
2989
2990    // Insert our type, and its more-qualified variants, into the set
2991    // of types.
2992    if (!AddPointerWithMoreQualifiedTypeVariants(Ty))
2993      return;
2994
2995    // Add 'cv void*' to our set of types.
2996    if (!Ty->isVoidType()) {
2997      QualType QualVoid
2998        = Context.getCVRQualifiedType(Context.VoidTy,
2999                                   PointeeTy.getCVRQualifiers());
3000      AddPointerWithMoreQualifiedTypeVariants(Context.getPointerType(QualVoid));
3001    }
3002
3003    // If this is a pointer to a class type, add pointers to its bases
3004    // (with the same level of cv-qualification as the original
3005    // derived class, of course).
3006    if (const RecordType *PointeeRec = PointeeTy->getAs<RecordType>()) {
3007      CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(PointeeRec->getDecl());
3008      for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin();
3009           Base != ClassDecl->bases_end(); ++Base) {
3010        QualType BaseTy = Context.getCanonicalType(Base->getType());
3011        BaseTy = Context.getCVRQualifiedType(BaseTy.getUnqualifiedType(),
3012                                          PointeeTy.getCVRQualifiers());
3013
3014        // Add the pointer type, recursively, so that we get all of
3015        // the indirect base classes, too.
3016        AddTypesConvertedFrom(Context.getPointerType(BaseTy), false, false);
3017      }
3018    }
3019  } else if (Ty->isMemberPointerType()) {
3020    // Member pointers are far easier, since the pointee can't be converted.
3021    if (!AddMemberPointerWithMoreQualifiedTypeVariants(Ty))
3022      return;
3023  } else if (Ty->isEnumeralType()) {
3024    EnumerationTypes.insert(Ty);
3025  } else if (AllowUserConversions) {
3026    if (const RecordType *TyRec = Ty->getAs<RecordType>()) {
3027      if (SemaRef.RequireCompleteType(SourceLocation(), Ty, 0)) {
3028        // No conversion functions in incomplete types.
3029        return;
3030      }
3031
3032      CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
3033      OverloadedFunctionDecl *Conversions
3034        = ClassDecl->getVisibleConversionFunctions();
3035      for (OverloadedFunctionDecl::function_iterator Func
3036             = Conversions->function_begin();
3037           Func != Conversions->function_end(); ++Func) {
3038        CXXConversionDecl *Conv;
3039        FunctionTemplateDecl *ConvTemplate;
3040        GetFunctionAndTemplate(*Func, Conv, ConvTemplate);
3041
3042        // Skip conversion function templates; they don't tell us anything
3043        // about which builtin types we can convert to.
3044        if (ConvTemplate)
3045          continue;
3046
3047        if (AllowExplicitConversions || !Conv->isExplicit())
3048          AddTypesConvertedFrom(Conv->getConversionType(), false, false);
3049      }
3050    }
3051  }
3052}
3053
3054/// \brief Helper function for AddBuiltinOperatorCandidates() that adds
3055/// the volatile- and non-volatile-qualified assignment operators for the
3056/// given type to the candidate set.
3057static void AddBuiltinAssignmentOperatorCandidates(Sema &S,
3058                                                   QualType T,
3059                                                   Expr **Args,
3060                                                   unsigned NumArgs,
3061                                    OverloadCandidateSet &CandidateSet) {
3062  QualType ParamTypes[2];
3063
3064  // T& operator=(T&, T)
3065  ParamTypes[0] = S.Context.getLValueReferenceType(T);
3066  ParamTypes[1] = T;
3067  S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
3068                        /*IsAssignmentOperator=*/true);
3069
3070  if (!S.Context.getCanonicalType(T).isVolatileQualified()) {
3071    // volatile T& operator=(volatile T&, T)
3072    ParamTypes[0]
3073      = S.Context.getLValueReferenceType(S.Context.getVolatileType(T));
3074    ParamTypes[1] = T;
3075    S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
3076                          /*IsAssignmentOperator=*/true);
3077  }
3078}
3079
3080/// AddBuiltinOperatorCandidates - Add the appropriate built-in
3081/// operator overloads to the candidate set (C++ [over.built]), based
3082/// on the operator @p Op and the arguments given. For example, if the
3083/// operator is a binary '+', this routine might add "int
3084/// operator+(int, int)" to cover integer addition.
3085void
3086Sema::AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,
3087                                   Expr **Args, unsigned NumArgs,
3088                                   OverloadCandidateSet& CandidateSet) {
3089  // The set of "promoted arithmetic types", which are the arithmetic
3090  // types are that preserved by promotion (C++ [over.built]p2). Note
3091  // that the first few of these types are the promoted integral
3092  // types; these types need to be first.
3093  // FIXME: What about complex?
3094  const unsigned FirstIntegralType = 0;
3095  const unsigned LastIntegralType = 13;
3096  const unsigned FirstPromotedIntegralType = 7,
3097                 LastPromotedIntegralType = 13;
3098  const unsigned FirstPromotedArithmeticType = 7,
3099                 LastPromotedArithmeticType = 16;
3100  const unsigned NumArithmeticTypes = 16;
3101  QualType ArithmeticTypes[NumArithmeticTypes] = {
3102    Context.BoolTy, Context.CharTy, Context.WCharTy,
3103// FIXME:   Context.Char16Ty, Context.Char32Ty,
3104    Context.SignedCharTy, Context.ShortTy,
3105    Context.UnsignedCharTy, Context.UnsignedShortTy,
3106    Context.IntTy, Context.LongTy, Context.LongLongTy,
3107    Context.UnsignedIntTy, Context.UnsignedLongTy, Context.UnsignedLongLongTy,
3108    Context.FloatTy, Context.DoubleTy, Context.LongDoubleTy
3109  };
3110
3111  // Find all of the types that the arguments can convert to, but only
3112  // if the operator we're looking at has built-in operator candidates
3113  // that make use of these types.
3114  BuiltinCandidateTypeSet CandidateTypes(*this);
3115  if (Op == OO_Less || Op == OO_Greater || Op == OO_LessEqual ||
3116      Op == OO_GreaterEqual || Op == OO_EqualEqual || Op == OO_ExclaimEqual ||
3117      Op == OO_Plus || (Op == OO_Minus && NumArgs == 2) || Op == OO_Equal ||
3118      Op == OO_PlusEqual || Op == OO_MinusEqual || Op == OO_Subscript ||
3119      Op == OO_ArrowStar || Op == OO_PlusPlus || Op == OO_MinusMinus ||
3120      (Op == OO_Star && NumArgs == 1) || Op == OO_Conditional) {
3121    for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
3122      CandidateTypes.AddTypesConvertedFrom(Args[ArgIdx]->getType(),
3123                                           true,
3124                                           (Op == OO_Exclaim ||
3125                                            Op == OO_AmpAmp ||
3126                                            Op == OO_PipePipe));
3127  }
3128
3129  bool isComparison = false;
3130  switch (Op) {
3131  case OO_None:
3132  case NUM_OVERLOADED_OPERATORS:
3133    assert(false && "Expected an overloaded operator");
3134    break;
3135
3136  case OO_Star: // '*' is either unary or binary
3137    if (NumArgs == 1)
3138      goto UnaryStar;
3139    else
3140      goto BinaryStar;
3141    break;
3142
3143  case OO_Plus: // '+' is either unary or binary
3144    if (NumArgs == 1)
3145      goto UnaryPlus;
3146    else
3147      goto BinaryPlus;
3148    break;
3149
3150  case OO_Minus: // '-' is either unary or binary
3151    if (NumArgs == 1)
3152      goto UnaryMinus;
3153    else
3154      goto BinaryMinus;
3155    break;
3156
3157  case OO_Amp: // '&' is either unary or binary
3158    if (NumArgs == 1)
3159      goto UnaryAmp;
3160    else
3161      goto BinaryAmp;
3162
3163  case OO_PlusPlus:
3164  case OO_MinusMinus:
3165    // C++ [over.built]p3:
3166    //
3167    //   For every pair (T, VQ), where T is an arithmetic type, and VQ
3168    //   is either volatile or empty, there exist candidate operator
3169    //   functions of the form
3170    //
3171    //       VQ T&      operator++(VQ T&);
3172    //       T          operator++(VQ T&, int);
3173    //
3174    // C++ [over.built]p4:
3175    //
3176    //   For every pair (T, VQ), where T is an arithmetic type other
3177    //   than bool, and VQ is either volatile or empty, there exist
3178    //   candidate operator functions of the form
3179    //
3180    //       VQ T&      operator--(VQ T&);
3181    //       T          operator--(VQ T&, int);
3182    for (unsigned Arith = (Op == OO_PlusPlus? 0 : 1);
3183         Arith < NumArithmeticTypes; ++Arith) {
3184      QualType ArithTy = ArithmeticTypes[Arith];
3185      QualType ParamTypes[2]
3186        = { Context.getLValueReferenceType(ArithTy), Context.IntTy };
3187
3188      // Non-volatile version.
3189      if (NumArgs == 1)
3190        AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
3191      else
3192        AddBuiltinCandidate(ArithTy, ParamTypes, Args, 2, CandidateSet);
3193
3194      // Volatile version
3195      ParamTypes[0]
3196        = Context.getLValueReferenceType(Context.getVolatileType(ArithTy));
3197      if (NumArgs == 1)
3198        AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
3199      else
3200        AddBuiltinCandidate(ArithTy, ParamTypes, Args, 2, CandidateSet);
3201    }
3202
3203    // C++ [over.built]p5:
3204    //
3205    //   For every pair (T, VQ), where T is a cv-qualified or
3206    //   cv-unqualified object type, and VQ is either volatile or
3207    //   empty, there exist candidate operator functions of the form
3208    //
3209    //       T*VQ&      operator++(T*VQ&);
3210    //       T*VQ&      operator--(T*VQ&);
3211    //       T*         operator++(T*VQ&, int);
3212    //       T*         operator--(T*VQ&, int);
3213    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin();
3214         Ptr != CandidateTypes.pointer_end(); ++Ptr) {
3215      // Skip pointer types that aren't pointers to object types.
3216      if (!(*Ptr)->getAs<PointerType>()->getPointeeType()->isObjectType())
3217        continue;
3218
3219      QualType ParamTypes[2] = {
3220        Context.getLValueReferenceType(*Ptr), Context.IntTy
3221      };
3222
3223      // Without volatile
3224      if (NumArgs == 1)
3225        AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
3226      else
3227        AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
3228
3229      if (!Context.getCanonicalType(*Ptr).isVolatileQualified()) {
3230        // With volatile
3231        ParamTypes[0]
3232          = Context.getLValueReferenceType(Context.getVolatileType(*Ptr));
3233        if (NumArgs == 1)
3234          AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
3235        else
3236          AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
3237      }
3238    }
3239    break;
3240
3241  UnaryStar:
3242    // C++ [over.built]p6:
3243    //   For every cv-qualified or cv-unqualified object type T, there
3244    //   exist candidate operator functions of the form
3245    //
3246    //       T&         operator*(T*);
3247    //
3248    // C++ [over.built]p7:
3249    //   For every function type T, there exist candidate operator
3250    //   functions of the form
3251    //       T&         operator*(T*);
3252    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin();
3253         Ptr != CandidateTypes.pointer_end(); ++Ptr) {
3254      QualType ParamTy = *Ptr;
3255      QualType PointeeTy = ParamTy->getAs<PointerType>()->getPointeeType();
3256      AddBuiltinCandidate(Context.getLValueReferenceType(PointeeTy),
3257                          &ParamTy, Args, 1, CandidateSet);
3258    }
3259    break;
3260
3261  UnaryPlus:
3262    // C++ [over.built]p8:
3263    //   For every type T, there exist candidate operator functions of
3264    //   the form
3265    //
3266    //       T*         operator+(T*);
3267    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin();
3268         Ptr != CandidateTypes.pointer_end(); ++Ptr) {
3269      QualType ParamTy = *Ptr;
3270      AddBuiltinCandidate(ParamTy, &ParamTy, Args, 1, CandidateSet);
3271    }
3272
3273    // Fall through
3274
3275  UnaryMinus:
3276    // C++ [over.built]p9:
3277    //  For every promoted arithmetic type T, there exist candidate
3278    //  operator functions of the form
3279    //
3280    //       T         operator+(T);
3281    //       T         operator-(T);
3282    for (unsigned Arith = FirstPromotedArithmeticType;
3283         Arith < LastPromotedArithmeticType; ++Arith) {
3284      QualType ArithTy = ArithmeticTypes[Arith];
3285      AddBuiltinCandidate(ArithTy, &ArithTy, Args, 1, CandidateSet);
3286    }
3287    break;
3288
3289  case OO_Tilde:
3290    // C++ [over.built]p10:
3291    //   For every promoted integral type T, there exist candidate
3292    //   operator functions of the form
3293    //
3294    //        T         operator~(T);
3295    for (unsigned Int = FirstPromotedIntegralType;
3296         Int < LastPromotedIntegralType; ++Int) {
3297      QualType IntTy = ArithmeticTypes[Int];
3298      AddBuiltinCandidate(IntTy, &IntTy, Args, 1, CandidateSet);
3299    }
3300    break;
3301
3302  case OO_New:
3303  case OO_Delete:
3304  case OO_Array_New:
3305  case OO_Array_Delete:
3306  case OO_Call:
3307    assert(false && "Special operators don't use AddBuiltinOperatorCandidates");
3308    break;
3309
3310  case OO_Comma:
3311  UnaryAmp:
3312  case OO_Arrow:
3313    // C++ [over.match.oper]p3:
3314    //   -- For the operator ',', the unary operator '&', or the
3315    //      operator '->', the built-in candidates set is empty.
3316    break;
3317
3318  case OO_EqualEqual:
3319  case OO_ExclaimEqual:
3320    // C++ [over.match.oper]p16:
3321    //   For every pointer to member type T, there exist candidate operator
3322    //   functions of the form
3323    //
3324    //        bool operator==(T,T);
3325    //        bool operator!=(T,T);
3326    for (BuiltinCandidateTypeSet::iterator
3327           MemPtr = CandidateTypes.member_pointer_begin(),
3328           MemPtrEnd = CandidateTypes.member_pointer_end();
3329         MemPtr != MemPtrEnd;
3330         ++MemPtr) {
3331      QualType ParamTypes[2] = { *MemPtr, *MemPtr };
3332      AddBuiltinCandidate(Context.BoolTy, ParamTypes, Args, 2, CandidateSet);
3333    }
3334
3335    // Fall through
3336
3337  case OO_Less:
3338  case OO_Greater:
3339  case OO_LessEqual:
3340  case OO_GreaterEqual:
3341    // C++ [over.built]p15:
3342    //
3343    //   For every pointer or enumeration type T, there exist
3344    //   candidate operator functions of the form
3345    //
3346    //        bool       operator<(T, T);
3347    //        bool       operator>(T, T);
3348    //        bool       operator<=(T, T);
3349    //        bool       operator>=(T, T);
3350    //        bool       operator==(T, T);
3351    //        bool       operator!=(T, T);
3352    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin();
3353         Ptr != CandidateTypes.pointer_end(); ++Ptr) {
3354      QualType ParamTypes[2] = { *Ptr, *Ptr };
3355      AddBuiltinCandidate(Context.BoolTy, ParamTypes, Args, 2, CandidateSet);
3356    }
3357    for (BuiltinCandidateTypeSet::iterator Enum
3358           = CandidateTypes.enumeration_begin();
3359         Enum != CandidateTypes.enumeration_end(); ++Enum) {
3360      QualType ParamTypes[2] = { *Enum, *Enum };
3361      AddBuiltinCandidate(Context.BoolTy, ParamTypes, Args, 2, CandidateSet);
3362    }
3363
3364    // Fall through.
3365    isComparison = true;
3366
3367  BinaryPlus:
3368  BinaryMinus:
3369    if (!isComparison) {
3370      // We didn't fall through, so we must have OO_Plus or OO_Minus.
3371
3372      // C++ [over.built]p13:
3373      //
3374      //   For every cv-qualified or cv-unqualified object type T
3375      //   there exist candidate operator functions of the form
3376      //
3377      //      T*         operator+(T*, ptrdiff_t);
3378      //      T&         operator[](T*, ptrdiff_t);    [BELOW]
3379      //      T*         operator-(T*, ptrdiff_t);
3380      //      T*         operator+(ptrdiff_t, T*);
3381      //      T&         operator[](ptrdiff_t, T*);    [BELOW]
3382      //
3383      // C++ [over.built]p14:
3384      //
3385      //   For every T, where T is a pointer to object type, there
3386      //   exist candidate operator functions of the form
3387      //
3388      //      ptrdiff_t  operator-(T, T);
3389      for (BuiltinCandidateTypeSet::iterator Ptr
3390             = CandidateTypes.pointer_begin();
3391           Ptr != CandidateTypes.pointer_end(); ++Ptr) {
3392        QualType ParamTypes[2] = { *Ptr, Context.getPointerDiffType() };
3393
3394        // operator+(T*, ptrdiff_t) or operator-(T*, ptrdiff_t)
3395        AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
3396
3397        if (Op == OO_Plus) {
3398          // T* operator+(ptrdiff_t, T*);
3399          ParamTypes[0] = ParamTypes[1];
3400          ParamTypes[1] = *Ptr;
3401          AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
3402        } else {
3403          // ptrdiff_t operator-(T, T);
3404          ParamTypes[1] = *Ptr;
3405          AddBuiltinCandidate(Context.getPointerDiffType(), ParamTypes,
3406                              Args, 2, CandidateSet);
3407        }
3408      }
3409    }
3410    // Fall through
3411
3412  case OO_Slash:
3413  BinaryStar:
3414  Conditional:
3415    // C++ [over.built]p12:
3416    //
3417    //   For every pair of promoted arithmetic types L and R, there
3418    //   exist candidate operator functions of the form
3419    //
3420    //        LR         operator*(L, R);
3421    //        LR         operator/(L, R);
3422    //        LR         operator+(L, R);
3423    //        LR         operator-(L, R);
3424    //        bool       operator<(L, R);
3425    //        bool       operator>(L, R);
3426    //        bool       operator<=(L, R);
3427    //        bool       operator>=(L, R);
3428    //        bool       operator==(L, R);
3429    //        bool       operator!=(L, R);
3430    //
3431    //   where LR is the result of the usual arithmetic conversions
3432    //   between types L and R.
3433    //
3434    // C++ [over.built]p24:
3435    //
3436    //   For every pair of promoted arithmetic types L and R, there exist
3437    //   candidate operator functions of the form
3438    //
3439    //        LR       operator?(bool, L, R);
3440    //
3441    //   where LR is the result of the usual arithmetic conversions
3442    //   between types L and R.
3443    // Our candidates ignore the first parameter.
3444    for (unsigned Left = FirstPromotedArithmeticType;
3445         Left < LastPromotedArithmeticType; ++Left) {
3446      for (unsigned Right = FirstPromotedArithmeticType;
3447           Right < LastPromotedArithmeticType; ++Right) {
3448        QualType LandR[2] = { ArithmeticTypes[Left], ArithmeticTypes[Right] };
3449        QualType Result
3450          = isComparison
3451          ? Context.BoolTy
3452          : Context.UsualArithmeticConversionsType(LandR[0], LandR[1]);
3453        AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
3454      }
3455    }
3456    break;
3457
3458  case OO_Percent:
3459  BinaryAmp:
3460  case OO_Caret:
3461  case OO_Pipe:
3462  case OO_LessLess:
3463  case OO_GreaterGreater:
3464    // C++ [over.built]p17:
3465    //
3466    //   For every pair of promoted integral types L and R, there
3467    //   exist candidate operator functions of the form
3468    //
3469    //      LR         operator%(L, R);
3470    //      LR         operator&(L, R);
3471    //      LR         operator^(L, R);
3472    //      LR         operator|(L, R);
3473    //      L          operator<<(L, R);
3474    //      L          operator>>(L, R);
3475    //
3476    //   where LR is the result of the usual arithmetic conversions
3477    //   between types L and R.
3478    for (unsigned Left = FirstPromotedIntegralType;
3479         Left < LastPromotedIntegralType; ++Left) {
3480      for (unsigned Right = FirstPromotedIntegralType;
3481           Right < LastPromotedIntegralType; ++Right) {
3482        QualType LandR[2] = { ArithmeticTypes[Left], ArithmeticTypes[Right] };
3483        QualType Result = (Op == OO_LessLess || Op == OO_GreaterGreater)
3484            ? LandR[0]
3485            : Context.UsualArithmeticConversionsType(LandR[0], LandR[1]);
3486        AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
3487      }
3488    }
3489    break;
3490
3491  case OO_Equal:
3492    // C++ [over.built]p20:
3493    //
3494    //   For every pair (T, VQ), where T is an enumeration or
3495    //   pointer to member type and VQ is either volatile or
3496    //   empty, there exist candidate operator functions of the form
3497    //
3498    //        VQ T&      operator=(VQ T&, T);
3499    for (BuiltinCandidateTypeSet::iterator
3500           Enum = CandidateTypes.enumeration_begin(),
3501           EnumEnd = CandidateTypes.enumeration_end();
3502         Enum != EnumEnd; ++Enum)
3503      AddBuiltinAssignmentOperatorCandidates(*this, *Enum, Args, 2,
3504                                             CandidateSet);
3505    for (BuiltinCandidateTypeSet::iterator
3506           MemPtr = CandidateTypes.member_pointer_begin(),
3507         MemPtrEnd = CandidateTypes.member_pointer_end();
3508         MemPtr != MemPtrEnd; ++MemPtr)
3509      AddBuiltinAssignmentOperatorCandidates(*this, *MemPtr, Args, 2,
3510                                             CandidateSet);
3511      // Fall through.
3512
3513  case OO_PlusEqual:
3514  case OO_MinusEqual:
3515    // C++ [over.built]p19:
3516    //
3517    //   For every pair (T, VQ), where T is any type and VQ is either
3518    //   volatile or empty, there exist candidate operator functions
3519    //   of the form
3520    //
3521    //        T*VQ&      operator=(T*VQ&, T*);
3522    //
3523    // C++ [over.built]p21:
3524    //
3525    //   For every pair (T, VQ), where T is a cv-qualified or
3526    //   cv-unqualified object type and VQ is either volatile or
3527    //   empty, there exist candidate operator functions of the form
3528    //
3529    //        T*VQ&      operator+=(T*VQ&, ptrdiff_t);
3530    //        T*VQ&      operator-=(T*VQ&, ptrdiff_t);
3531    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin();
3532         Ptr != CandidateTypes.pointer_end(); ++Ptr) {
3533      QualType ParamTypes[2];
3534      ParamTypes[1] = (Op == OO_Equal)? *Ptr : Context.getPointerDiffType();
3535
3536      // non-volatile version
3537      ParamTypes[0] = Context.getLValueReferenceType(*Ptr);
3538      AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
3539                          /*IsAssigmentOperator=*/Op == OO_Equal);
3540
3541      if (!Context.getCanonicalType(*Ptr).isVolatileQualified()) {
3542        // volatile version
3543        ParamTypes[0]
3544          = Context.getLValueReferenceType(Context.getVolatileType(*Ptr));
3545        AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
3546                            /*IsAssigmentOperator=*/Op == OO_Equal);
3547      }
3548    }
3549    // Fall through.
3550
3551  case OO_StarEqual:
3552  case OO_SlashEqual:
3553    // C++ [over.built]p18:
3554    //
3555    //   For every triple (L, VQ, R), where L is an arithmetic type,
3556    //   VQ is either volatile or empty, and R is a promoted
3557    //   arithmetic type, there exist candidate operator functions of
3558    //   the form
3559    //
3560    //        VQ L&      operator=(VQ L&, R);
3561    //        VQ L&      operator*=(VQ L&, R);
3562    //        VQ L&      operator/=(VQ L&, R);
3563    //        VQ L&      operator+=(VQ L&, R);
3564    //        VQ L&      operator-=(VQ L&, R);
3565    for (unsigned Left = 0; Left < NumArithmeticTypes; ++Left) {
3566      for (unsigned Right = FirstPromotedArithmeticType;
3567           Right < LastPromotedArithmeticType; ++Right) {
3568        QualType ParamTypes[2];
3569        ParamTypes[1] = ArithmeticTypes[Right];
3570
3571        // Add this built-in operator as a candidate (VQ is empty).
3572        ParamTypes[0] = Context.getLValueReferenceType(ArithmeticTypes[Left]);
3573        AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
3574                            /*IsAssigmentOperator=*/Op == OO_Equal);
3575
3576        // Add this built-in operator as a candidate (VQ is 'volatile').
3577        ParamTypes[0] = Context.getVolatileType(ArithmeticTypes[Left]);
3578        ParamTypes[0] = Context.getLValueReferenceType(ParamTypes[0]);
3579        AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
3580                            /*IsAssigmentOperator=*/Op == OO_Equal);
3581      }
3582    }
3583    break;
3584
3585  case OO_PercentEqual:
3586  case OO_LessLessEqual:
3587  case OO_GreaterGreaterEqual:
3588  case OO_AmpEqual:
3589  case OO_CaretEqual:
3590  case OO_PipeEqual:
3591    // C++ [over.built]p22:
3592    //
3593    //   For every triple (L, VQ, R), where L is an integral type, VQ
3594    //   is either volatile or empty, and R is a promoted integral
3595    //   type, there exist candidate operator functions of the form
3596    //
3597    //        VQ L&       operator%=(VQ L&, R);
3598    //        VQ L&       operator<<=(VQ L&, R);
3599    //        VQ L&       operator>>=(VQ L&, R);
3600    //        VQ L&       operator&=(VQ L&, R);
3601    //        VQ L&       operator^=(VQ L&, R);
3602    //        VQ L&       operator|=(VQ L&, R);
3603    for (unsigned Left = FirstIntegralType; Left < LastIntegralType; ++Left) {
3604      for (unsigned Right = FirstPromotedIntegralType;
3605           Right < LastPromotedIntegralType; ++Right) {
3606        QualType ParamTypes[2];
3607        ParamTypes[1] = ArithmeticTypes[Right];
3608
3609        // Add this built-in operator as a candidate (VQ is empty).
3610        ParamTypes[0] = Context.getLValueReferenceType(ArithmeticTypes[Left]);
3611        AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet);
3612
3613        // Add this built-in operator as a candidate (VQ is 'volatile').
3614        ParamTypes[0] = ArithmeticTypes[Left];
3615        ParamTypes[0] = Context.getVolatileType(ParamTypes[0]);
3616        ParamTypes[0] = Context.getLValueReferenceType(ParamTypes[0]);
3617        AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet);
3618      }
3619    }
3620    break;
3621
3622  case OO_Exclaim: {
3623    // C++ [over.operator]p23:
3624    //
3625    //   There also exist candidate operator functions of the form
3626    //
3627    //        bool        operator!(bool);
3628    //        bool        operator&&(bool, bool);     [BELOW]
3629    //        bool        operator||(bool, bool);     [BELOW]
3630    QualType ParamTy = Context.BoolTy;
3631    AddBuiltinCandidate(ParamTy, &ParamTy, Args, 1, CandidateSet,
3632                        /*IsAssignmentOperator=*/false,
3633                        /*NumContextualBoolArguments=*/1);
3634    break;
3635  }
3636
3637  case OO_AmpAmp:
3638  case OO_PipePipe: {
3639    // C++ [over.operator]p23:
3640    //
3641    //   There also exist candidate operator functions of the form
3642    //
3643    //        bool        operator!(bool);            [ABOVE]
3644    //        bool        operator&&(bool, bool);
3645    //        bool        operator||(bool, bool);
3646    QualType ParamTypes[2] = { Context.BoolTy, Context.BoolTy };
3647    AddBuiltinCandidate(Context.BoolTy, ParamTypes, Args, 2, CandidateSet,
3648                        /*IsAssignmentOperator=*/false,
3649                        /*NumContextualBoolArguments=*/2);
3650    break;
3651  }
3652
3653  case OO_Subscript:
3654    // C++ [over.built]p13:
3655    //
3656    //   For every cv-qualified or cv-unqualified object type T there
3657    //   exist candidate operator functions of the form
3658    //
3659    //        T*         operator+(T*, ptrdiff_t);     [ABOVE]
3660    //        T&         operator[](T*, ptrdiff_t);
3661    //        T*         operator-(T*, ptrdiff_t);     [ABOVE]
3662    //        T*         operator+(ptrdiff_t, T*);     [ABOVE]
3663    //        T&         operator[](ptrdiff_t, T*);
3664    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin();
3665         Ptr != CandidateTypes.pointer_end(); ++Ptr) {
3666      QualType ParamTypes[2] = { *Ptr, Context.getPointerDiffType() };
3667      QualType PointeeType = (*Ptr)->getAs<PointerType>()->getPointeeType();
3668      QualType ResultTy = Context.getLValueReferenceType(PointeeType);
3669
3670      // T& operator[](T*, ptrdiff_t)
3671      AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
3672
3673      // T& operator[](ptrdiff_t, T*);
3674      ParamTypes[0] = ParamTypes[1];
3675      ParamTypes[1] = *Ptr;
3676      AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
3677    }
3678    break;
3679
3680  case OO_ArrowStar:
3681    // C++ [over.built]p11:
3682    //    For every quintuple (C1, C2, T, CV1, CV2), where C2 is a class type,
3683    //    C1 is the same type as C2 or is a derived class of C2, T is an object
3684    //    type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
3685    //    there exist candidate operator functions of the form
3686    //    CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
3687    //    where CV12 is the union of CV1 and CV2.
3688    {
3689      for (BuiltinCandidateTypeSet::iterator Ptr =
3690             CandidateTypes.pointer_begin();
3691           Ptr != CandidateTypes.pointer_end(); ++Ptr) {
3692        QualType C1Ty = (*Ptr);
3693        QualType C1;
3694        QualifierCollector Q1;
3695        if (const PointerType *PointerTy = C1Ty->getAs<PointerType>()) {
3696          C1 = QualType(Q1.strip(PointerTy->getPointeeType()), 0);
3697          if (!isa<RecordType>(C1))
3698            continue;
3699        }
3700        for (BuiltinCandidateTypeSet::iterator
3701             MemPtr = CandidateTypes.member_pointer_begin(),
3702             MemPtrEnd = CandidateTypes.member_pointer_end();
3703             MemPtr != MemPtrEnd; ++MemPtr) {
3704          const MemberPointerType *mptr = cast<MemberPointerType>(*MemPtr);
3705          QualType C2 = QualType(mptr->getClass(), 0);
3706          C2 = C2.getUnqualifiedType();
3707          if (C1 != C2 && !IsDerivedFrom(C1, C2))
3708            break;
3709          QualType ParamTypes[2] = { *Ptr, *MemPtr };
3710          // build CV12 T&
3711          QualType T = mptr->getPointeeType();
3712          T = Q1.apply(T);
3713          QualType ResultTy = Context.getLValueReferenceType(T);
3714          AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
3715        }
3716      }
3717    }
3718    break;
3719
3720  case OO_Conditional:
3721    // Note that we don't consider the first argument, since it has been
3722    // contextually converted to bool long ago. The candidates below are
3723    // therefore added as binary.
3724    //
3725    // C++ [over.built]p24:
3726    //   For every type T, where T is a pointer or pointer-to-member type,
3727    //   there exist candidate operator functions of the form
3728    //
3729    //        T        operator?(bool, T, T);
3730    //
3731    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin(),
3732         E = CandidateTypes.pointer_end(); Ptr != E; ++Ptr) {
3733      QualType ParamTypes[2] = { *Ptr, *Ptr };
3734      AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
3735    }
3736    for (BuiltinCandidateTypeSet::iterator Ptr =
3737           CandidateTypes.member_pointer_begin(),
3738         E = CandidateTypes.member_pointer_end(); Ptr != E; ++Ptr) {
3739      QualType ParamTypes[2] = { *Ptr, *Ptr };
3740      AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
3741    }
3742    goto Conditional;
3743  }
3744}
3745
3746/// \brief Add function candidates found via argument-dependent lookup
3747/// to the set of overloading candidates.
3748///
3749/// This routine performs argument-dependent name lookup based on the
3750/// given function name (which may also be an operator name) and adds
3751/// all of the overload candidates found by ADL to the overload
3752/// candidate set (C++ [basic.lookup.argdep]).
3753void
3754Sema::AddArgumentDependentLookupCandidates(DeclarationName Name,
3755                                           Expr **Args, unsigned NumArgs,
3756                                           bool HasExplicitTemplateArgs,
3757                                const TemplateArgument *ExplicitTemplateArgs,
3758                                           unsigned NumExplicitTemplateArgs,
3759                                           OverloadCandidateSet& CandidateSet,
3760                                           bool PartialOverloading) {
3761  FunctionSet Functions;
3762
3763  // FIXME: Should we be trafficking in canonical function decls throughout?
3764
3765  // Record all of the function candidates that we've already
3766  // added to the overload set, so that we don't add those same
3767  // candidates a second time.
3768  for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(),
3769                                   CandEnd = CandidateSet.end();
3770       Cand != CandEnd; ++Cand)
3771    if (Cand->Function) {
3772      Functions.insert(Cand->Function);
3773      if (FunctionTemplateDecl *FunTmpl = Cand->Function->getPrimaryTemplate())
3774        Functions.insert(FunTmpl);
3775    }
3776
3777  // FIXME: Pass in the explicit template arguments?
3778  ArgumentDependentLookup(Name, Args, NumArgs, Functions);
3779
3780  // Erase all of the candidates we already knew about.
3781  // FIXME: This is suboptimal. Is there a better way?
3782  for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(),
3783                                   CandEnd = CandidateSet.end();
3784       Cand != CandEnd; ++Cand)
3785    if (Cand->Function) {
3786      Functions.erase(Cand->Function);
3787      if (FunctionTemplateDecl *FunTmpl = Cand->Function->getPrimaryTemplate())
3788        Functions.erase(FunTmpl);
3789    }
3790
3791  // For each of the ADL candidates we found, add it to the overload
3792  // set.
3793  for (FunctionSet::iterator Func = Functions.begin(),
3794                          FuncEnd = Functions.end();
3795       Func != FuncEnd; ++Func) {
3796    if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*Func)) {
3797      if (HasExplicitTemplateArgs)
3798        continue;
3799
3800      AddOverloadCandidate(FD, Args, NumArgs, CandidateSet,
3801                           false, false, PartialOverloading);
3802    } else
3803      AddTemplateOverloadCandidate(cast<FunctionTemplateDecl>(*Func),
3804                                   HasExplicitTemplateArgs,
3805                                   ExplicitTemplateArgs,
3806                                   NumExplicitTemplateArgs,
3807                                   Args, NumArgs, CandidateSet);
3808  }
3809}
3810
3811/// isBetterOverloadCandidate - Determines whether the first overload
3812/// candidate is a better candidate than the second (C++ 13.3.3p1).
3813bool
3814Sema::isBetterOverloadCandidate(const OverloadCandidate& Cand1,
3815                                const OverloadCandidate& Cand2) {
3816  // Define viable functions to be better candidates than non-viable
3817  // functions.
3818  if (!Cand2.Viable)
3819    return Cand1.Viable;
3820  else if (!Cand1.Viable)
3821    return false;
3822
3823  // C++ [over.match.best]p1:
3824  //
3825  //   -- if F is a static member function, ICS1(F) is defined such
3826  //      that ICS1(F) is neither better nor worse than ICS1(G) for
3827  //      any function G, and, symmetrically, ICS1(G) is neither
3828  //      better nor worse than ICS1(F).
3829  unsigned StartArg = 0;
3830  if (Cand1.IgnoreObjectArgument || Cand2.IgnoreObjectArgument)
3831    StartArg = 1;
3832
3833  // C++ [over.match.best]p1:
3834  //   A viable function F1 is defined to be a better function than another
3835  //   viable function F2 if for all arguments i, ICSi(F1) is not a worse
3836  //   conversion sequence than ICSi(F2), and then...
3837  unsigned NumArgs = Cand1.Conversions.size();
3838  assert(Cand2.Conversions.size() == NumArgs && "Overload candidate mismatch");
3839  bool HasBetterConversion = false;
3840  for (unsigned ArgIdx = StartArg; ArgIdx < NumArgs; ++ArgIdx) {
3841    switch (CompareImplicitConversionSequences(Cand1.Conversions[ArgIdx],
3842                                               Cand2.Conversions[ArgIdx])) {
3843    case ImplicitConversionSequence::Better:
3844      // Cand1 has a better conversion sequence.
3845      HasBetterConversion = true;
3846      break;
3847
3848    case ImplicitConversionSequence::Worse:
3849      // Cand1 can't be better than Cand2.
3850      return false;
3851
3852    case ImplicitConversionSequence::Indistinguishable:
3853      // Do nothing.
3854      break;
3855    }
3856  }
3857
3858  //    -- for some argument j, ICSj(F1) is a better conversion sequence than
3859  //       ICSj(F2), or, if not that,
3860  if (HasBetterConversion)
3861    return true;
3862
3863  //     - F1 is a non-template function and F2 is a function template
3864  //       specialization, or, if not that,
3865  if (Cand1.Function && !Cand1.Function->getPrimaryTemplate() &&
3866      Cand2.Function && Cand2.Function->getPrimaryTemplate())
3867    return true;
3868
3869  //   -- F1 and F2 are function template specializations, and the function
3870  //      template for F1 is more specialized than the template for F2
3871  //      according to the partial ordering rules described in 14.5.5.2, or,
3872  //      if not that,
3873  if (Cand1.Function && Cand1.Function->getPrimaryTemplate() &&
3874      Cand2.Function && Cand2.Function->getPrimaryTemplate())
3875    if (FunctionTemplateDecl *BetterTemplate
3876          = getMoreSpecializedTemplate(Cand1.Function->getPrimaryTemplate(),
3877                                       Cand2.Function->getPrimaryTemplate(),
3878                       isa<CXXConversionDecl>(Cand1.Function)? TPOC_Conversion
3879                                                             : TPOC_Call))
3880      return BetterTemplate == Cand1.Function->getPrimaryTemplate();
3881
3882  //   -- the context is an initialization by user-defined conversion
3883  //      (see 8.5, 13.3.1.5) and the standard conversion sequence
3884  //      from the return type of F1 to the destination type (i.e.,
3885  //      the type of the entity being initialized) is a better
3886  //      conversion sequence than the standard conversion sequence
3887  //      from the return type of F2 to the destination type.
3888  if (Cand1.Function && Cand2.Function &&
3889      isa<CXXConversionDecl>(Cand1.Function) &&
3890      isa<CXXConversionDecl>(Cand2.Function)) {
3891    switch (CompareStandardConversionSequences(Cand1.FinalConversion,
3892                                               Cand2.FinalConversion)) {
3893    case ImplicitConversionSequence::Better:
3894      // Cand1 has a better conversion sequence.
3895      return true;
3896
3897    case ImplicitConversionSequence::Worse:
3898      // Cand1 can't be better than Cand2.
3899      return false;
3900
3901    case ImplicitConversionSequence::Indistinguishable:
3902      // Do nothing
3903      break;
3904    }
3905  }
3906
3907  return false;
3908}
3909
3910/// \brief Computes the best viable function (C++ 13.3.3)
3911/// within an overload candidate set.
3912///
3913/// \param CandidateSet the set of candidate functions.
3914///
3915/// \param Loc the location of the function name (or operator symbol) for
3916/// which overload resolution occurs.
3917///
3918/// \param Best f overload resolution was successful or found a deleted
3919/// function, Best points to the candidate function found.
3920///
3921/// \returns The result of overload resolution.
3922Sema::OverloadingResult
3923Sema::BestViableFunction(OverloadCandidateSet& CandidateSet,
3924                         SourceLocation Loc,
3925                         OverloadCandidateSet::iterator& Best) {
3926  // Find the best viable function.
3927  Best = CandidateSet.end();
3928  for (OverloadCandidateSet::iterator Cand = CandidateSet.begin();
3929       Cand != CandidateSet.end(); ++Cand) {
3930    if (Cand->Viable) {
3931      if (Best == CandidateSet.end() || isBetterOverloadCandidate(*Cand, *Best))
3932        Best = Cand;
3933    }
3934  }
3935
3936  // If we didn't find any viable functions, abort.
3937  if (Best == CandidateSet.end())
3938    return OR_No_Viable_Function;
3939
3940  // Make sure that this function is better than every other viable
3941  // function. If not, we have an ambiguity.
3942  for (OverloadCandidateSet::iterator Cand = CandidateSet.begin();
3943       Cand != CandidateSet.end(); ++Cand) {
3944    if (Cand->Viable &&
3945        Cand != Best &&
3946        !isBetterOverloadCandidate(*Best, *Cand)) {
3947      Best = CandidateSet.end();
3948      return OR_Ambiguous;
3949    }
3950  }
3951
3952  // Best is the best viable function.
3953  if (Best->Function &&
3954      (Best->Function->isDeleted() ||
3955       Best->Function->getAttr<UnavailableAttr>()))
3956    return OR_Deleted;
3957
3958  // C++ [basic.def.odr]p2:
3959  //   An overloaded function is used if it is selected by overload resolution
3960  //   when referred to from a potentially-evaluated expression. [Note: this
3961  //   covers calls to named functions (5.2.2), operator overloading
3962  //   (clause 13), user-defined conversions (12.3.2), allocation function for
3963  //   placement new (5.3.4), as well as non-default initialization (8.5).
3964  if (Best->Function)
3965    MarkDeclarationReferenced(Loc, Best->Function);
3966  return OR_Success;
3967}
3968
3969/// PrintOverloadCandidates - When overload resolution fails, prints
3970/// diagnostic messages containing the candidates in the candidate
3971/// set. If OnlyViable is true, only viable candidates will be printed.
3972void
3973Sema::PrintOverloadCandidates(OverloadCandidateSet& CandidateSet,
3974                              bool OnlyViable,
3975                              BinaryOperator::Opcode Opc,
3976                              SourceLocation OpLoc) {
3977  OverloadCandidateSet::iterator Cand = CandidateSet.begin(),
3978                             LastCand = CandidateSet.end();
3979  for (; Cand != LastCand; ++Cand) {
3980    if (Cand->Viable || !OnlyViable) {
3981      if (Cand->Function) {
3982        if (Cand->Function->isDeleted() ||
3983            Cand->Function->getAttr<UnavailableAttr>()) {
3984          // Deleted or "unavailable" function.
3985          Diag(Cand->Function->getLocation(), diag::err_ovl_candidate_deleted)
3986            << Cand->Function->isDeleted();
3987        } else if (FunctionTemplateDecl *FunTmpl
3988                     = Cand->Function->getPrimaryTemplate()) {
3989          // Function template specialization
3990          // FIXME: Give a better reason!
3991          Diag(Cand->Function->getLocation(), diag::err_ovl_template_candidate)
3992            << getTemplateArgumentBindingsText(FunTmpl->getTemplateParameters(),
3993                              *Cand->Function->getTemplateSpecializationArgs());
3994        } else {
3995          // Normal function
3996          bool errReported = false;
3997          if (!Cand->Viable && Cand->Conversions.size() > 0) {
3998            for (int i = Cand->Conversions.size()-1; i >= 0; i--) {
3999              const ImplicitConversionSequence &Conversion =
4000                                                        Cand->Conversions[i];
4001              if ((Conversion.ConversionKind !=
4002                   ImplicitConversionSequence::BadConversion) ||
4003                  Conversion.ConversionFunctionSet.size() == 0)
4004                continue;
4005              Diag(Cand->Function->getLocation(),
4006                   diag::err_ovl_candidate_not_viable) << (i+1);
4007              errReported = true;
4008              for (int j = Conversion.ConversionFunctionSet.size()-1;
4009                   j >= 0; j--) {
4010                FunctionDecl *Func = Conversion.ConversionFunctionSet[j];
4011                Diag(Func->getLocation(), diag::err_ovl_candidate);
4012              }
4013            }
4014          }
4015          if (!errReported)
4016            Diag(Cand->Function->getLocation(), diag::err_ovl_candidate);
4017        }
4018      } else if (Cand->IsSurrogate) {
4019        // Desugar the type of the surrogate down to a function type,
4020        // retaining as many typedefs as possible while still showing
4021        // the function type (and, therefore, its parameter types).
4022        QualType FnType = Cand->Surrogate->getConversionType();
4023        bool isLValueReference = false;
4024        bool isRValueReference = false;
4025        bool isPointer = false;
4026        if (const LValueReferenceType *FnTypeRef =
4027              FnType->getAs<LValueReferenceType>()) {
4028          FnType = FnTypeRef->getPointeeType();
4029          isLValueReference = true;
4030        } else if (const RValueReferenceType *FnTypeRef =
4031                     FnType->getAs<RValueReferenceType>()) {
4032          FnType = FnTypeRef->getPointeeType();
4033          isRValueReference = true;
4034        }
4035        if (const PointerType *FnTypePtr = FnType->getAs<PointerType>()) {
4036          FnType = FnTypePtr->getPointeeType();
4037          isPointer = true;
4038        }
4039        // Desugar down to a function type.
4040        FnType = QualType(FnType->getAs<FunctionType>(), 0);
4041        // Reconstruct the pointer/reference as appropriate.
4042        if (isPointer) FnType = Context.getPointerType(FnType);
4043        if (isRValueReference) FnType = Context.getRValueReferenceType(FnType);
4044        if (isLValueReference) FnType = Context.getLValueReferenceType(FnType);
4045
4046        Diag(Cand->Surrogate->getLocation(), diag::err_ovl_surrogate_cand)
4047          << FnType;
4048      } else if (OnlyViable) {
4049        assert(Cand->Conversions.size() == 2 &&
4050               "builtin-binary-operator-not-binary");
4051        Diag(OpLoc, diag::err_ovl_builtin_candidate)
4052          << Cand->BuiltinTypes.ParamTypes[0]
4053          << Cand->BuiltinTypes.ParamTypes[1]
4054          << BinaryOperator::getOpcodeStr(Opc);
4055      }
4056    }
4057  }
4058}
4059
4060/// ResolveAddressOfOverloadedFunction - Try to resolve the address of
4061/// an overloaded function (C++ [over.over]), where @p From is an
4062/// expression with overloaded function type and @p ToType is the type
4063/// we're trying to resolve to. For example:
4064///
4065/// @code
4066/// int f(double);
4067/// int f(int);
4068///
4069/// int (*pfd)(double) = f; // selects f(double)
4070/// @endcode
4071///
4072/// This routine returns the resulting FunctionDecl if it could be
4073/// resolved, and NULL otherwise. When @p Complain is true, this
4074/// routine will emit diagnostics if there is an error.
4075FunctionDecl *
4076Sema::ResolveAddressOfOverloadedFunction(Expr *From, QualType ToType,
4077                                         bool Complain) {
4078  QualType FunctionType = ToType;
4079  bool IsMember = false;
4080  if (const PointerType *ToTypePtr = ToType->getAs<PointerType>())
4081    FunctionType = ToTypePtr->getPointeeType();
4082  else if (const ReferenceType *ToTypeRef = ToType->getAs<ReferenceType>())
4083    FunctionType = ToTypeRef->getPointeeType();
4084  else if (const MemberPointerType *MemTypePtr =
4085                    ToType->getAs<MemberPointerType>()) {
4086    FunctionType = MemTypePtr->getPointeeType();
4087    IsMember = true;
4088  }
4089
4090  // We only look at pointers or references to functions.
4091  FunctionType = Context.getCanonicalType(FunctionType).getUnqualifiedType();
4092  if (!FunctionType->isFunctionType())
4093    return 0;
4094
4095  // Find the actual overloaded function declaration.
4096  OverloadedFunctionDecl *Ovl = 0;
4097
4098  // C++ [over.over]p1:
4099  //   [...] [Note: any redundant set of parentheses surrounding the
4100  //   overloaded function name is ignored (5.1). ]
4101  Expr *OvlExpr = From->IgnoreParens();
4102
4103  // C++ [over.over]p1:
4104  //   [...] The overloaded function name can be preceded by the &
4105  //   operator.
4106  if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(OvlExpr)) {
4107    if (UnOp->getOpcode() == UnaryOperator::AddrOf)
4108      OvlExpr = UnOp->getSubExpr()->IgnoreParens();
4109  }
4110
4111  // Try to dig out the overloaded function.
4112  FunctionTemplateDecl *FunctionTemplate = 0;
4113  if (DeclRefExpr *DR = dyn_cast<DeclRefExpr>(OvlExpr)) {
4114    Ovl = dyn_cast<OverloadedFunctionDecl>(DR->getDecl());
4115    FunctionTemplate = dyn_cast<FunctionTemplateDecl>(DR->getDecl());
4116  } else if (MemberExpr *ME = dyn_cast<MemberExpr>(OvlExpr)) {
4117    Ovl = dyn_cast<OverloadedFunctionDecl>(ME->getMemberDecl());
4118    FunctionTemplate = dyn_cast<FunctionTemplateDecl>(ME->getMemberDecl());
4119    // FIXME: Explicit template arguments
4120  }
4121  // FIXME: TemplateIdRefExpr?
4122
4123  // If there's no overloaded function declaration or function template,
4124  // we're done.
4125  if (!Ovl && !FunctionTemplate)
4126    return 0;
4127
4128  OverloadIterator Fun;
4129  if (Ovl)
4130    Fun = Ovl;
4131  else
4132    Fun = FunctionTemplate;
4133
4134  // Look through all of the overloaded functions, searching for one
4135  // whose type matches exactly.
4136  llvm::SmallPtrSet<FunctionDecl *, 4> Matches;
4137  bool FoundNonTemplateFunction = false;
4138  for (OverloadIterator FunEnd; Fun != FunEnd; ++Fun) {
4139    // C++ [over.over]p3:
4140    //   Non-member functions and static member functions match
4141    //   targets of type "pointer-to-function" or "reference-to-function."
4142    //   Nonstatic member functions match targets of
4143    //   type "pointer-to-member-function."
4144    // Note that according to DR 247, the containing class does not matter.
4145
4146    if (FunctionTemplateDecl *FunctionTemplate
4147          = dyn_cast<FunctionTemplateDecl>(*Fun)) {
4148      if (CXXMethodDecl *Method
4149            = dyn_cast<CXXMethodDecl>(FunctionTemplate->getTemplatedDecl())) {
4150        // Skip non-static function templates when converting to pointer, and
4151        // static when converting to member pointer.
4152        if (Method->isStatic() == IsMember)
4153          continue;
4154      } else if (IsMember)
4155        continue;
4156
4157      // C++ [over.over]p2:
4158      //   If the name is a function template, template argument deduction is
4159      //   done (14.8.2.2), and if the argument deduction succeeds, the
4160      //   resulting template argument list is used to generate a single
4161      //   function template specialization, which is added to the set of
4162      //   overloaded functions considered.
4163      // FIXME: We don't really want to build the specialization here, do we?
4164      FunctionDecl *Specialization = 0;
4165      TemplateDeductionInfo Info(Context);
4166      if (TemplateDeductionResult Result
4167            = DeduceTemplateArguments(FunctionTemplate, /*FIXME*/false,
4168                                      /*FIXME:*/0, /*FIXME:*/0,
4169                                      FunctionType, Specialization, Info)) {
4170        // FIXME: make a note of the failed deduction for diagnostics.
4171        (void)Result;
4172      } else {
4173        // FIXME: If the match isn't exact, shouldn't we just drop this as
4174        // a candidate? Find a testcase before changing the code.
4175        assert(FunctionType
4176                 == Context.getCanonicalType(Specialization->getType()));
4177        Matches.insert(
4178                cast<FunctionDecl>(Specialization->getCanonicalDecl()));
4179      }
4180    }
4181
4182    if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(*Fun)) {
4183      // Skip non-static functions when converting to pointer, and static
4184      // when converting to member pointer.
4185      if (Method->isStatic() == IsMember)
4186        continue;
4187    } else if (IsMember)
4188      continue;
4189
4190    if (FunctionDecl *FunDecl = dyn_cast<FunctionDecl>(*Fun)) {
4191      if (FunctionType == Context.getCanonicalType(FunDecl->getType())) {
4192        Matches.insert(cast<FunctionDecl>(Fun->getCanonicalDecl()));
4193        FoundNonTemplateFunction = true;
4194      }
4195    }
4196  }
4197
4198  // If there were 0 or 1 matches, we're done.
4199  if (Matches.empty())
4200    return 0;
4201  else if (Matches.size() == 1)
4202    return *Matches.begin();
4203
4204  // C++ [over.over]p4:
4205  //   If more than one function is selected, [...]
4206  typedef llvm::SmallPtrSet<FunctionDecl *, 4>::iterator MatchIter;
4207  if (!FoundNonTemplateFunction) {
4208    //   [...] and any given function template specialization F1 is
4209    //   eliminated if the set contains a second function template
4210    //   specialization whose function template is more specialized
4211    //   than the function template of F1 according to the partial
4212    //   ordering rules of 14.5.5.2.
4213
4214    // The algorithm specified above is quadratic. We instead use a
4215    // two-pass algorithm (similar to the one used to identify the
4216    // best viable function in an overload set) that identifies the
4217    // best function template (if it exists).
4218    llvm::SmallVector<FunctionDecl *, 8> TemplateMatches(Matches.begin(),
4219                                                         Matches.end());
4220    return getMostSpecialized(TemplateMatches.data(), TemplateMatches.size(),
4221                              TPOC_Other, From->getLocStart(),
4222                              PDiag(),
4223                              PDiag(diag::err_addr_ovl_ambiguous)
4224                              << TemplateMatches[0]->getDeclName(),
4225                              PDiag(diag::err_ovl_template_candidate));
4226  }
4227
4228  //   [...] any function template specializations in the set are
4229  //   eliminated if the set also contains a non-template function, [...]
4230  llvm::SmallVector<FunctionDecl *, 4> RemainingMatches;
4231  for (MatchIter M = Matches.begin(), MEnd = Matches.end(); M != MEnd; ++M)
4232    if ((*M)->getPrimaryTemplate() == 0)
4233      RemainingMatches.push_back(*M);
4234
4235  // [...] After such eliminations, if any, there shall remain exactly one
4236  // selected function.
4237  if (RemainingMatches.size() == 1)
4238    return RemainingMatches.front();
4239
4240  // FIXME: We should probably return the same thing that BestViableFunction
4241  // returns (even if we issue the diagnostics here).
4242  Diag(From->getLocStart(), diag::err_addr_ovl_ambiguous)
4243    << RemainingMatches[0]->getDeclName();
4244  for (unsigned I = 0, N = RemainingMatches.size(); I != N; ++I)
4245    Diag(RemainingMatches[I]->getLocation(), diag::err_ovl_candidate);
4246  return 0;
4247}
4248
4249/// \brief Add a single candidate to the overload set.
4250static void AddOverloadedCallCandidate(Sema &S,
4251                                       AnyFunctionDecl Callee,
4252                                       bool &ArgumentDependentLookup,
4253                                       bool HasExplicitTemplateArgs,
4254                                 const TemplateArgument *ExplicitTemplateArgs,
4255                                       unsigned NumExplicitTemplateArgs,
4256                                       Expr **Args, unsigned NumArgs,
4257                                       OverloadCandidateSet &CandidateSet,
4258                                       bool PartialOverloading) {
4259  if (FunctionDecl *Func = dyn_cast<FunctionDecl>(Callee)) {
4260    assert(!HasExplicitTemplateArgs && "Explicit template arguments?");
4261    S.AddOverloadCandidate(Func, Args, NumArgs, CandidateSet, false, false,
4262                           PartialOverloading);
4263
4264    if (Func->getDeclContext()->isRecord() ||
4265        Func->getDeclContext()->isFunctionOrMethod())
4266      ArgumentDependentLookup = false;
4267    return;
4268  }
4269
4270  FunctionTemplateDecl *FuncTemplate = cast<FunctionTemplateDecl>(Callee);
4271  S.AddTemplateOverloadCandidate(FuncTemplate, HasExplicitTemplateArgs,
4272                                 ExplicitTemplateArgs,
4273                                 NumExplicitTemplateArgs,
4274                                 Args, NumArgs, CandidateSet);
4275
4276  if (FuncTemplate->getDeclContext()->isRecord())
4277    ArgumentDependentLookup = false;
4278}
4279
4280/// \brief Add the overload candidates named by callee and/or found by argument
4281/// dependent lookup to the given overload set.
4282void Sema::AddOverloadedCallCandidates(NamedDecl *Callee,
4283                                       DeclarationName &UnqualifiedName,
4284                                       bool &ArgumentDependentLookup,
4285                                       bool HasExplicitTemplateArgs,
4286                                  const TemplateArgument *ExplicitTemplateArgs,
4287                                       unsigned NumExplicitTemplateArgs,
4288                                       Expr **Args, unsigned NumArgs,
4289                                       OverloadCandidateSet &CandidateSet,
4290                                       bool PartialOverloading) {
4291  // Add the functions denoted by Callee to the set of candidate
4292  // functions. While we're doing so, track whether argument-dependent
4293  // lookup still applies, per:
4294  //
4295  // C++0x [basic.lookup.argdep]p3:
4296  //   Let X be the lookup set produced by unqualified lookup (3.4.1)
4297  //   and let Y be the lookup set produced by argument dependent
4298  //   lookup (defined as follows). If X contains
4299  //
4300  //     -- a declaration of a class member, or
4301  //
4302  //     -- a block-scope function declaration that is not a
4303  //        using-declaration (FIXME: check for using declaration), or
4304  //
4305  //     -- a declaration that is neither a function or a function
4306  //        template
4307  //
4308  //   then Y is empty.
4309  if (!Callee) {
4310    // Nothing to do.
4311  } else if (OverloadedFunctionDecl *Ovl
4312               = dyn_cast<OverloadedFunctionDecl>(Callee)) {
4313    for (OverloadedFunctionDecl::function_iterator Func = Ovl->function_begin(),
4314                                                FuncEnd = Ovl->function_end();
4315         Func != FuncEnd; ++Func)
4316      AddOverloadedCallCandidate(*this, *Func, ArgumentDependentLookup,
4317                                 HasExplicitTemplateArgs,
4318                                 ExplicitTemplateArgs, NumExplicitTemplateArgs,
4319                                 Args, NumArgs, CandidateSet,
4320                                 PartialOverloading);
4321  } else if (isa<FunctionDecl>(Callee) || isa<FunctionTemplateDecl>(Callee))
4322    AddOverloadedCallCandidate(*this,
4323                               AnyFunctionDecl::getFromNamedDecl(Callee),
4324                               ArgumentDependentLookup,
4325                               HasExplicitTemplateArgs,
4326                               ExplicitTemplateArgs, NumExplicitTemplateArgs,
4327                               Args, NumArgs, CandidateSet,
4328                               PartialOverloading);
4329  // FIXME: assert isa<FunctionDecl> || isa<FunctionTemplateDecl> rather than
4330  // checking dynamically.
4331
4332  if (Callee)
4333    UnqualifiedName = Callee->getDeclName();
4334
4335  if (ArgumentDependentLookup)
4336    AddArgumentDependentLookupCandidates(UnqualifiedName, Args, NumArgs,
4337                                         HasExplicitTemplateArgs,
4338                                         ExplicitTemplateArgs,
4339                                         NumExplicitTemplateArgs,
4340                                         CandidateSet,
4341                                         PartialOverloading);
4342}
4343
4344/// ResolveOverloadedCallFn - Given the call expression that calls Fn
4345/// (which eventually refers to the declaration Func) and the call
4346/// arguments Args/NumArgs, attempt to resolve the function call down
4347/// to a specific function. If overload resolution succeeds, returns
4348/// the function declaration produced by overload
4349/// resolution. Otherwise, emits diagnostics, deletes all of the
4350/// arguments and Fn, and returns NULL.
4351FunctionDecl *Sema::ResolveOverloadedCallFn(Expr *Fn, NamedDecl *Callee,
4352                                            DeclarationName UnqualifiedName,
4353                                            bool HasExplicitTemplateArgs,
4354                                 const TemplateArgument *ExplicitTemplateArgs,
4355                                            unsigned NumExplicitTemplateArgs,
4356                                            SourceLocation LParenLoc,
4357                                            Expr **Args, unsigned NumArgs,
4358                                            SourceLocation *CommaLocs,
4359                                            SourceLocation RParenLoc,
4360                                            bool &ArgumentDependentLookup) {
4361  OverloadCandidateSet CandidateSet;
4362
4363  // Add the functions denoted by Callee to the set of candidate
4364  // functions.
4365  AddOverloadedCallCandidates(Callee, UnqualifiedName, ArgumentDependentLookup,
4366                              HasExplicitTemplateArgs, ExplicitTemplateArgs,
4367                              NumExplicitTemplateArgs, Args, NumArgs,
4368                              CandidateSet);
4369  OverloadCandidateSet::iterator Best;
4370  switch (BestViableFunction(CandidateSet, Fn->getLocStart(), Best)) {
4371  case OR_Success:
4372    return Best->Function;
4373
4374  case OR_No_Viable_Function:
4375    Diag(Fn->getSourceRange().getBegin(),
4376         diag::err_ovl_no_viable_function_in_call)
4377      << UnqualifiedName << Fn->getSourceRange();
4378    PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/false);
4379    break;
4380
4381  case OR_Ambiguous:
4382    Diag(Fn->getSourceRange().getBegin(), diag::err_ovl_ambiguous_call)
4383      << UnqualifiedName << Fn->getSourceRange();
4384    PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/true);
4385    break;
4386
4387  case OR_Deleted:
4388    Diag(Fn->getSourceRange().getBegin(), diag::err_ovl_deleted_call)
4389      << Best->Function->isDeleted()
4390      << UnqualifiedName
4391      << Fn->getSourceRange();
4392    PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/true);
4393    break;
4394  }
4395
4396  // Overload resolution failed. Destroy all of the subexpressions and
4397  // return NULL.
4398  Fn->Destroy(Context);
4399  for (unsigned Arg = 0; Arg < NumArgs; ++Arg)
4400    Args[Arg]->Destroy(Context);
4401  return 0;
4402}
4403
4404/// \brief Create a unary operation that may resolve to an overloaded
4405/// operator.
4406///
4407/// \param OpLoc The location of the operator itself (e.g., '*').
4408///
4409/// \param OpcIn The UnaryOperator::Opcode that describes this
4410/// operator.
4411///
4412/// \param Functions The set of non-member functions that will be
4413/// considered by overload resolution. The caller needs to build this
4414/// set based on the context using, e.g.,
4415/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
4416/// set should not contain any member functions; those will be added
4417/// by CreateOverloadedUnaryOp().
4418///
4419/// \param input The input argument.
4420Sema::OwningExprResult Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc,
4421                                                     unsigned OpcIn,
4422                                                     FunctionSet &Functions,
4423                                                     ExprArg input) {
4424  UnaryOperator::Opcode Opc = static_cast<UnaryOperator::Opcode>(OpcIn);
4425  Expr *Input = (Expr *)input.get();
4426
4427  OverloadedOperatorKind Op = UnaryOperator::getOverloadedOperator(Opc);
4428  assert(Op != OO_None && "Invalid opcode for overloaded unary operator");
4429  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
4430
4431  Expr *Args[2] = { Input, 0 };
4432  unsigned NumArgs = 1;
4433
4434  // For post-increment and post-decrement, add the implicit '0' as
4435  // the second argument, so that we know this is a post-increment or
4436  // post-decrement.
4437  if (Opc == UnaryOperator::PostInc || Opc == UnaryOperator::PostDec) {
4438    llvm::APSInt Zero(Context.getTypeSize(Context.IntTy), false);
4439    Args[1] = new (Context) IntegerLiteral(Zero, Context.IntTy,
4440                                           SourceLocation());
4441    NumArgs = 2;
4442  }
4443
4444  if (Input->isTypeDependent()) {
4445    OverloadedFunctionDecl *Overloads
4446      = OverloadedFunctionDecl::Create(Context, CurContext, OpName);
4447    for (FunctionSet::iterator Func = Functions.begin(),
4448                            FuncEnd = Functions.end();
4449         Func != FuncEnd; ++Func)
4450      Overloads->addOverload(*Func);
4451
4452    DeclRefExpr *Fn = new (Context) DeclRefExpr(Overloads, Context.OverloadTy,
4453                                                OpLoc, false, false);
4454
4455    input.release();
4456    return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn,
4457                                                   &Args[0], NumArgs,
4458                                                   Context.DependentTy,
4459                                                   OpLoc));
4460  }
4461
4462  // Build an empty overload set.
4463  OverloadCandidateSet CandidateSet;
4464
4465  // Add the candidates from the given function set.
4466  AddFunctionCandidates(Functions, &Args[0], NumArgs, CandidateSet, false);
4467
4468  // Add operator candidates that are member functions.
4469  AddMemberOperatorCandidates(Op, OpLoc, &Args[0], NumArgs, CandidateSet);
4470
4471  // Add builtin operator candidates.
4472  AddBuiltinOperatorCandidates(Op, &Args[0], NumArgs, CandidateSet);
4473
4474  // Perform overload resolution.
4475  OverloadCandidateSet::iterator Best;
4476  switch (BestViableFunction(CandidateSet, OpLoc, Best)) {
4477  case OR_Success: {
4478    // We found a built-in operator or an overloaded operator.
4479    FunctionDecl *FnDecl = Best->Function;
4480
4481    if (FnDecl) {
4482      // We matched an overloaded operator. Build a call to that
4483      // operator.
4484
4485      // Convert the arguments.
4486      if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
4487        if (PerformObjectArgumentInitialization(Input, Method))
4488          return ExprError();
4489      } else {
4490        // Convert the arguments.
4491        if (PerformCopyInitialization(Input,
4492                                      FnDecl->getParamDecl(0)->getType(),
4493                                      "passing"))
4494          return ExprError();
4495      }
4496
4497      // Determine the result type
4498      QualType ResultTy
4499        = FnDecl->getType()->getAs<FunctionType>()->getResultType();
4500      ResultTy = ResultTy.getNonReferenceType();
4501
4502      // Build the actual expression node.
4503      Expr *FnExpr = new (Context) DeclRefExpr(FnDecl, FnDecl->getType(),
4504                                               SourceLocation());
4505      UsualUnaryConversions(FnExpr);
4506
4507      input.release();
4508
4509      Expr *CE = new (Context) CXXOperatorCallExpr(Context, Op, FnExpr,
4510                                                   &Input, 1, ResultTy, OpLoc);
4511      return MaybeBindToTemporary(CE);
4512    } else {
4513      // We matched a built-in operator. Convert the arguments, then
4514      // break out so that we will build the appropriate built-in
4515      // operator node.
4516        if (PerformImplicitConversion(Input, Best->BuiltinTypes.ParamTypes[0],
4517                                      Best->Conversions[0], "passing"))
4518          return ExprError();
4519
4520        break;
4521      }
4522    }
4523
4524    case OR_No_Viable_Function:
4525      // No viable function; fall through to handling this as a
4526      // built-in operator, which will produce an error message for us.
4527      break;
4528
4529    case OR_Ambiguous:
4530      Diag(OpLoc,  diag::err_ovl_ambiguous_oper)
4531          << UnaryOperator::getOpcodeStr(Opc)
4532          << Input->getSourceRange();
4533      PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/true);
4534      return ExprError();
4535
4536    case OR_Deleted:
4537      Diag(OpLoc, diag::err_ovl_deleted_oper)
4538        << Best->Function->isDeleted()
4539        << UnaryOperator::getOpcodeStr(Opc)
4540        << Input->getSourceRange();
4541      PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/true);
4542      return ExprError();
4543    }
4544
4545  // Either we found no viable overloaded operator or we matched a
4546  // built-in operator. In either case, fall through to trying to
4547  // build a built-in operation.
4548  input.release();
4549  return CreateBuiltinUnaryOp(OpLoc, Opc, Owned(Input));
4550}
4551
4552/// \brief Create a binary operation that may resolve to an overloaded
4553/// operator.
4554///
4555/// \param OpLoc The location of the operator itself (e.g., '+').
4556///
4557/// \param OpcIn The BinaryOperator::Opcode that describes this
4558/// operator.
4559///
4560/// \param Functions The set of non-member functions that will be
4561/// considered by overload resolution. The caller needs to build this
4562/// set based on the context using, e.g.,
4563/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
4564/// set should not contain any member functions; those will be added
4565/// by CreateOverloadedBinOp().
4566///
4567/// \param LHS Left-hand argument.
4568/// \param RHS Right-hand argument.
4569Sema::OwningExprResult
4570Sema::CreateOverloadedBinOp(SourceLocation OpLoc,
4571                            unsigned OpcIn,
4572                            FunctionSet &Functions,
4573                            Expr *LHS, Expr *RHS) {
4574  Expr *Args[2] = { LHS, RHS };
4575  LHS=RHS=0; //Please use only Args instead of LHS/RHS couple
4576
4577  BinaryOperator::Opcode Opc = static_cast<BinaryOperator::Opcode>(OpcIn);
4578  OverloadedOperatorKind Op = BinaryOperator::getOverloadedOperator(Opc);
4579  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
4580
4581  // If either side is type-dependent, create an appropriate dependent
4582  // expression.
4583  if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
4584    // .* cannot be overloaded.
4585    if (Opc == BinaryOperator::PtrMemD)
4586      return Owned(new (Context) BinaryOperator(Args[0], Args[1], Opc,
4587                                                Context.DependentTy, OpLoc));
4588
4589    OverloadedFunctionDecl *Overloads
4590      = OverloadedFunctionDecl::Create(Context, CurContext, OpName);
4591    for (FunctionSet::iterator Func = Functions.begin(),
4592                            FuncEnd = Functions.end();
4593         Func != FuncEnd; ++Func)
4594      Overloads->addOverload(*Func);
4595
4596    DeclRefExpr *Fn = new (Context) DeclRefExpr(Overloads, Context.OverloadTy,
4597                                                OpLoc, false, false);
4598
4599    return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn,
4600                                                   Args, 2,
4601                                                   Context.DependentTy,
4602                                                   OpLoc));
4603  }
4604
4605  // If this is the .* operator, which is not overloadable, just
4606  // create a built-in binary operator.
4607  if (Opc == BinaryOperator::PtrMemD)
4608    return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
4609
4610  // If this is one of the assignment operators, we only perform
4611  // overload resolution if the left-hand side is a class or
4612  // enumeration type (C++ [expr.ass]p3).
4613  if (Opc >= BinaryOperator::Assign && Opc <= BinaryOperator::OrAssign &&
4614      !Args[0]->getType()->isOverloadableType())
4615    return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
4616
4617  // Build an empty overload set.
4618  OverloadCandidateSet CandidateSet;
4619
4620  // Add the candidates from the given function set.
4621  AddFunctionCandidates(Functions, Args, 2, CandidateSet, false);
4622
4623  // Add operator candidates that are member functions.
4624  AddMemberOperatorCandidates(Op, OpLoc, Args, 2, CandidateSet);
4625
4626  // Add builtin operator candidates.
4627  AddBuiltinOperatorCandidates(Op, Args, 2, CandidateSet);
4628
4629  // Perform overload resolution.
4630  OverloadCandidateSet::iterator Best;
4631  switch (BestViableFunction(CandidateSet, OpLoc, Best)) {
4632    case OR_Success: {
4633      // We found a built-in operator or an overloaded operator.
4634      FunctionDecl *FnDecl = Best->Function;
4635
4636      if (FnDecl) {
4637        // We matched an overloaded operator. Build a call to that
4638        // operator.
4639
4640        // Convert the arguments.
4641        if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
4642          if (PerformObjectArgumentInitialization(Args[0], Method) ||
4643              PerformCopyInitialization(Args[1], FnDecl->getParamDecl(0)->getType(),
4644                                        "passing"))
4645            return ExprError();
4646        } else {
4647          // Convert the arguments.
4648          if (PerformCopyInitialization(Args[0], FnDecl->getParamDecl(0)->getType(),
4649                                        "passing") ||
4650              PerformCopyInitialization(Args[1], FnDecl->getParamDecl(1)->getType(),
4651                                        "passing"))
4652            return ExprError();
4653        }
4654
4655        // Determine the result type
4656        QualType ResultTy
4657          = FnDecl->getType()->getAs<FunctionType>()->getResultType();
4658        ResultTy = ResultTy.getNonReferenceType();
4659
4660        // Build the actual expression node.
4661        Expr *FnExpr = new (Context) DeclRefExpr(FnDecl, FnDecl->getType(),
4662                                                 OpLoc);
4663        UsualUnaryConversions(FnExpr);
4664
4665        Expr *CE = new (Context) CXXOperatorCallExpr(Context, Op, FnExpr,
4666                                                     Args, 2, ResultTy, OpLoc);
4667        return MaybeBindToTemporary(CE);
4668      } else {
4669        // We matched a built-in operator. Convert the arguments, then
4670        // break out so that we will build the appropriate built-in
4671        // operator node.
4672        if (PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
4673                                      Best->Conversions[0], "passing") ||
4674            PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
4675                                      Best->Conversions[1], "passing"))
4676          return ExprError();
4677
4678        break;
4679      }
4680    }
4681
4682    case OR_No_Viable_Function: {
4683      // C++ [over.match.oper]p9:
4684      //   If the operator is the operator , [...] and there are no
4685      //   viable functions, then the operator is assumed to be the
4686      //   built-in operator and interpreted according to clause 5.
4687      if (Opc == BinaryOperator::Comma)
4688        break;
4689
4690      // For class as left operand for assignment or compound assigment operator
4691      // do not fall through to handling in built-in, but report that no overloaded
4692      // assignment operator found
4693      OwningExprResult Result = ExprError();
4694      if (Args[0]->getType()->isRecordType() &&
4695          Opc >= BinaryOperator::Assign && Opc <= BinaryOperator::OrAssign) {
4696        Diag(OpLoc,  diag::err_ovl_no_viable_oper)
4697             << BinaryOperator::getOpcodeStr(Opc)
4698             << Args[0]->getSourceRange() << Args[1]->getSourceRange();
4699      } else {
4700        // No viable function; try to create a built-in operation, which will
4701        // produce an error. Then, show the non-viable candidates.
4702        Result = CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
4703      }
4704      assert(Result.isInvalid() &&
4705             "C++ binary operator overloading is missing candidates!");
4706      if (Result.isInvalid())
4707        PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/false);
4708      return move(Result);
4709    }
4710
4711    case OR_Ambiguous:
4712      Diag(OpLoc,  diag::err_ovl_ambiguous_oper)
4713          << BinaryOperator::getOpcodeStr(Opc)
4714          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
4715      PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/true, Opc, OpLoc);
4716      return ExprError();
4717
4718    case OR_Deleted:
4719      Diag(OpLoc, diag::err_ovl_deleted_oper)
4720        << Best->Function->isDeleted()
4721        << BinaryOperator::getOpcodeStr(Opc)
4722        << Args[0]->getSourceRange() << Args[1]->getSourceRange();
4723      PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/true);
4724      return ExprError();
4725    }
4726
4727  // We matched a built-in operator; build it.
4728  return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
4729}
4730
4731/// BuildCallToMemberFunction - Build a call to a member
4732/// function. MemExpr is the expression that refers to the member
4733/// function (and includes the object parameter), Args/NumArgs are the
4734/// arguments to the function call (not including the object
4735/// parameter). The caller needs to validate that the member
4736/// expression refers to a member function or an overloaded member
4737/// function.
4738Sema::ExprResult
4739Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE,
4740                                SourceLocation LParenLoc, Expr **Args,
4741                                unsigned NumArgs, SourceLocation *CommaLocs,
4742                                SourceLocation RParenLoc) {
4743  // Dig out the member expression. This holds both the object
4744  // argument and the member function we're referring to.
4745  MemberExpr *MemExpr = 0;
4746  if (ParenExpr *ParenE = dyn_cast<ParenExpr>(MemExprE))
4747    MemExpr = dyn_cast<MemberExpr>(ParenE->getSubExpr());
4748  else
4749    MemExpr = dyn_cast<MemberExpr>(MemExprE);
4750  assert(MemExpr && "Building member call without member expression");
4751
4752  // Extract the object argument.
4753  Expr *ObjectArg = MemExpr->getBase();
4754
4755  CXXMethodDecl *Method = 0;
4756  if (isa<OverloadedFunctionDecl>(MemExpr->getMemberDecl()) ||
4757      isa<FunctionTemplateDecl>(MemExpr->getMemberDecl())) {
4758    // Add overload candidates
4759    OverloadCandidateSet CandidateSet;
4760    DeclarationName DeclName = MemExpr->getMemberDecl()->getDeclName();
4761
4762    for (OverloadIterator Func(MemExpr->getMemberDecl()), FuncEnd;
4763         Func != FuncEnd; ++Func) {
4764      if ((Method = dyn_cast<CXXMethodDecl>(*Func)))
4765        AddMethodCandidate(Method, ObjectArg, Args, NumArgs, CandidateSet,
4766                           /*SuppressUserConversions=*/false);
4767      else
4768        AddMethodTemplateCandidate(cast<FunctionTemplateDecl>(*Func),
4769                                   MemExpr->hasExplicitTemplateArgumentList(),
4770                                   MemExpr->getTemplateArgs(),
4771                                   MemExpr->getNumTemplateArgs(),
4772                                   ObjectArg, Args, NumArgs,
4773                                   CandidateSet,
4774                                   /*SuppressUsedConversions=*/false);
4775    }
4776
4777    OverloadCandidateSet::iterator Best;
4778    switch (BestViableFunction(CandidateSet, MemExpr->getLocStart(), Best)) {
4779    case OR_Success:
4780      Method = cast<CXXMethodDecl>(Best->Function);
4781      break;
4782
4783    case OR_No_Viable_Function:
4784      Diag(MemExpr->getSourceRange().getBegin(),
4785           diag::err_ovl_no_viable_member_function_in_call)
4786        << DeclName << MemExprE->getSourceRange();
4787      PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/false);
4788      // FIXME: Leaking incoming expressions!
4789      return true;
4790
4791    case OR_Ambiguous:
4792      Diag(MemExpr->getSourceRange().getBegin(),
4793           diag::err_ovl_ambiguous_member_call)
4794        << DeclName << MemExprE->getSourceRange();
4795      PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/false);
4796      // FIXME: Leaking incoming expressions!
4797      return true;
4798
4799    case OR_Deleted:
4800      Diag(MemExpr->getSourceRange().getBegin(),
4801           diag::err_ovl_deleted_member_call)
4802        << Best->Function->isDeleted()
4803        << DeclName << MemExprE->getSourceRange();
4804      PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/false);
4805      // FIXME: Leaking incoming expressions!
4806      return true;
4807    }
4808
4809    FixOverloadedFunctionReference(MemExpr, Method);
4810  } else {
4811    Method = dyn_cast<CXXMethodDecl>(MemExpr->getMemberDecl());
4812  }
4813
4814  assert(Method && "Member call to something that isn't a method?");
4815  ExprOwningPtr<CXXMemberCallExpr>
4816    TheCall(this, new (Context) CXXMemberCallExpr(Context, MemExpr, Args,
4817                                                  NumArgs,
4818                                  Method->getResultType().getNonReferenceType(),
4819                                  RParenLoc));
4820
4821  // Check for a valid return type.
4822  if (CheckCallReturnType(Method->getResultType(), MemExpr->getMemberLoc(),
4823                          TheCall.get(), Method))
4824    return true;
4825
4826  // Convert the object argument (for a non-static member function call).
4827  if (!Method->isStatic() &&
4828      PerformObjectArgumentInitialization(ObjectArg, Method))
4829    return true;
4830  MemExpr->setBase(ObjectArg);
4831
4832  // Convert the rest of the arguments
4833  const FunctionProtoType *Proto = cast<FunctionProtoType>(Method->getType());
4834  if (ConvertArgumentsForCall(&*TheCall, MemExpr, Method, Proto, Args, NumArgs,
4835                              RParenLoc))
4836    return true;
4837
4838  if (CheckFunctionCall(Method, TheCall.get()))
4839    return true;
4840
4841  return MaybeBindToTemporary(TheCall.release()).release();
4842}
4843
4844/// BuildCallToObjectOfClassType - Build a call to an object of class
4845/// type (C++ [over.call.object]), which can end up invoking an
4846/// overloaded function call operator (@c operator()) or performing a
4847/// user-defined conversion on the object argument.
4848Sema::ExprResult
4849Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Object,
4850                                   SourceLocation LParenLoc,
4851                                   Expr **Args, unsigned NumArgs,
4852                                   SourceLocation *CommaLocs,
4853                                   SourceLocation RParenLoc) {
4854  assert(Object->getType()->isRecordType() && "Requires object type argument");
4855  const RecordType *Record = Object->getType()->getAs<RecordType>();
4856
4857  // C++ [over.call.object]p1:
4858  //  If the primary-expression E in the function call syntax
4859  //  evaluates to a class object of type "cv T", then the set of
4860  //  candidate functions includes at least the function call
4861  //  operators of T. The function call operators of T are obtained by
4862  //  ordinary lookup of the name operator() in the context of
4863  //  (E).operator().
4864  OverloadCandidateSet CandidateSet;
4865  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(OO_Call);
4866  DeclContext::lookup_const_iterator Oper, OperEnd;
4867  for (llvm::tie(Oper, OperEnd) = Record->getDecl()->lookup(OpName);
4868       Oper != OperEnd; ++Oper)
4869    AddMethodCandidate(cast<CXXMethodDecl>(*Oper), Object, Args, NumArgs,
4870                       CandidateSet, /*SuppressUserConversions=*/false);
4871
4872  // C++ [over.call.object]p2:
4873  //   In addition, for each conversion function declared in T of the
4874  //   form
4875  //
4876  //        operator conversion-type-id () cv-qualifier;
4877  //
4878  //   where cv-qualifier is the same cv-qualification as, or a
4879  //   greater cv-qualification than, cv, and where conversion-type-id
4880  //   denotes the type "pointer to function of (P1,...,Pn) returning
4881  //   R", or the type "reference to pointer to function of
4882  //   (P1,...,Pn) returning R", or the type "reference to function
4883  //   of (P1,...,Pn) returning R", a surrogate call function [...]
4884  //   is also considered as a candidate function. Similarly,
4885  //   surrogate call functions are added to the set of candidate
4886  //   functions for each conversion function declared in an
4887  //   accessible base class provided the function is not hidden
4888  //   within T by another intervening declaration.
4889
4890  if (!RequireCompleteType(SourceLocation(), Object->getType(), 0)) {
4891    // FIXME: Look in base classes for more conversion operators!
4892    OverloadedFunctionDecl *Conversions
4893      = cast<CXXRecordDecl>(Record->getDecl())->getConversionFunctions();
4894    for (OverloadedFunctionDecl::function_iterator
4895           Func = Conversions->function_begin(),
4896           FuncEnd = Conversions->function_end();
4897         Func != FuncEnd; ++Func) {
4898      CXXConversionDecl *Conv;
4899      FunctionTemplateDecl *ConvTemplate;
4900      GetFunctionAndTemplate(*Func, Conv, ConvTemplate);
4901
4902      // Skip over templated conversion functions; they aren't
4903      // surrogates.
4904      if (ConvTemplate)
4905        continue;
4906
4907      // Strip the reference type (if any) and then the pointer type (if
4908      // any) to get down to what might be a function type.
4909      QualType ConvType = Conv->getConversionType().getNonReferenceType();
4910      if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
4911        ConvType = ConvPtrType->getPointeeType();
4912
4913      if (const FunctionProtoType *Proto = ConvType->getAs<FunctionProtoType>())
4914        AddSurrogateCandidate(Conv, Proto, Object, Args, NumArgs, CandidateSet);
4915    }
4916  }
4917
4918  // Perform overload resolution.
4919  OverloadCandidateSet::iterator Best;
4920  switch (BestViableFunction(CandidateSet, Object->getLocStart(), Best)) {
4921  case OR_Success:
4922    // Overload resolution succeeded; we'll build the appropriate call
4923    // below.
4924    break;
4925
4926  case OR_No_Viable_Function:
4927    Diag(Object->getSourceRange().getBegin(),
4928         diag::err_ovl_no_viable_object_call)
4929      << Object->getType() << Object->getSourceRange();
4930    PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/false);
4931    break;
4932
4933  case OR_Ambiguous:
4934    Diag(Object->getSourceRange().getBegin(),
4935         diag::err_ovl_ambiguous_object_call)
4936      << Object->getType() << Object->getSourceRange();
4937    PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/true);
4938    break;
4939
4940  case OR_Deleted:
4941    Diag(Object->getSourceRange().getBegin(),
4942         diag::err_ovl_deleted_object_call)
4943      << Best->Function->isDeleted()
4944      << Object->getType() << Object->getSourceRange();
4945    PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/true);
4946    break;
4947  }
4948
4949  if (Best == CandidateSet.end()) {
4950    // We had an error; delete all of the subexpressions and return
4951    // the error.
4952    Object->Destroy(Context);
4953    for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
4954      Args[ArgIdx]->Destroy(Context);
4955    return true;
4956  }
4957
4958  if (Best->Function == 0) {
4959    // Since there is no function declaration, this is one of the
4960    // surrogate candidates. Dig out the conversion function.
4961    CXXConversionDecl *Conv
4962      = cast<CXXConversionDecl>(
4963                         Best->Conversions[0].UserDefined.ConversionFunction);
4964
4965    // We selected one of the surrogate functions that converts the
4966    // object parameter to a function pointer. Perform the conversion
4967    // on the object argument, then let ActOnCallExpr finish the job.
4968
4969    // Create an implicit member expr to refer to the conversion operator.
4970    // and then call it.
4971    CXXMemberCallExpr *CE =
4972    BuildCXXMemberCallExpr(Object, Conv);
4973
4974    return ActOnCallExpr(S, ExprArg(*this, CE), LParenLoc,
4975                         MultiExprArg(*this, (ExprTy**)Args, NumArgs),
4976                         CommaLocs, RParenLoc).release();
4977  }
4978
4979  // We found an overloaded operator(). Build a CXXOperatorCallExpr
4980  // that calls this method, using Object for the implicit object
4981  // parameter and passing along the remaining arguments.
4982  CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
4983  const FunctionProtoType *Proto = Method->getType()->getAs<FunctionProtoType>();
4984
4985  unsigned NumArgsInProto = Proto->getNumArgs();
4986  unsigned NumArgsToCheck = NumArgs;
4987
4988  // Build the full argument list for the method call (the
4989  // implicit object parameter is placed at the beginning of the
4990  // list).
4991  Expr **MethodArgs;
4992  if (NumArgs < NumArgsInProto) {
4993    NumArgsToCheck = NumArgsInProto;
4994    MethodArgs = new Expr*[NumArgsInProto + 1];
4995  } else {
4996    MethodArgs = new Expr*[NumArgs + 1];
4997  }
4998  MethodArgs[0] = Object;
4999  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
5000    MethodArgs[ArgIdx + 1] = Args[ArgIdx];
5001
5002  Expr *NewFn = new (Context) DeclRefExpr(Method, Method->getType(),
5003                                          SourceLocation());
5004  UsualUnaryConversions(NewFn);
5005
5006  // Once we've built TheCall, all of the expressions are properly
5007  // owned.
5008  QualType ResultTy = Method->getResultType().getNonReferenceType();
5009  ExprOwningPtr<CXXOperatorCallExpr>
5010    TheCall(this, new (Context) CXXOperatorCallExpr(Context, OO_Call, NewFn,
5011                                                    MethodArgs, NumArgs + 1,
5012                                                    ResultTy, RParenLoc));
5013  delete [] MethodArgs;
5014
5015  // We may have default arguments. If so, we need to allocate more
5016  // slots in the call for them.
5017  if (NumArgs < NumArgsInProto)
5018    TheCall->setNumArgs(Context, NumArgsInProto + 1);
5019  else if (NumArgs > NumArgsInProto)
5020    NumArgsToCheck = NumArgsInProto;
5021
5022  bool IsError = false;
5023
5024  // Initialize the implicit object parameter.
5025  IsError |= PerformObjectArgumentInitialization(Object, Method);
5026  TheCall->setArg(0, Object);
5027
5028
5029  // Check the argument types.
5030  for (unsigned i = 0; i != NumArgsToCheck; i++) {
5031    Expr *Arg;
5032    if (i < NumArgs) {
5033      Arg = Args[i];
5034
5035      // Pass the argument.
5036      QualType ProtoArgType = Proto->getArgType(i);
5037      IsError |= PerformCopyInitialization(Arg, ProtoArgType, "passing");
5038    } else {
5039      Arg = CXXDefaultArgExpr::Create(Context, Method->getParamDecl(i));
5040    }
5041
5042    TheCall->setArg(i + 1, Arg);
5043  }
5044
5045  // If this is a variadic call, handle args passed through "...".
5046  if (Proto->isVariadic()) {
5047    // Promote the arguments (C99 6.5.2.2p7).
5048    for (unsigned i = NumArgsInProto; i != NumArgs; i++) {
5049      Expr *Arg = Args[i];
5050      IsError |= DefaultVariadicArgumentPromotion(Arg, VariadicMethod);
5051      TheCall->setArg(i + 1, Arg);
5052    }
5053  }
5054
5055  if (IsError) return true;
5056
5057  if (CheckFunctionCall(Method, TheCall.get()))
5058    return true;
5059
5060  return MaybeBindToTemporary(TheCall.release()).release();
5061}
5062
5063/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->
5064///  (if one exists), where @c Base is an expression of class type and
5065/// @c Member is the name of the member we're trying to find.
5066Sema::OwningExprResult
5067Sema::BuildOverloadedArrowExpr(Scope *S, ExprArg BaseIn, SourceLocation OpLoc) {
5068  Expr *Base = static_cast<Expr *>(BaseIn.get());
5069  assert(Base->getType()->isRecordType() && "left-hand side must have class type");
5070
5071  // C++ [over.ref]p1:
5072  //
5073  //   [...] An expression x->m is interpreted as (x.operator->())->m
5074  //   for a class object x of type T if T::operator->() exists and if
5075  //   the operator is selected as the best match function by the
5076  //   overload resolution mechanism (13.3).
5077  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(OO_Arrow);
5078  OverloadCandidateSet CandidateSet;
5079  const RecordType *BaseRecord = Base->getType()->getAs<RecordType>();
5080
5081  LookupResult R;
5082  LookupQualifiedName(R, BaseRecord->getDecl(), OpName, LookupOrdinaryName);
5083
5084  for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
5085       Oper != OperEnd; ++Oper)
5086    AddMethodCandidate(cast<CXXMethodDecl>(*Oper), Base, 0, 0, CandidateSet,
5087                       /*SuppressUserConversions=*/false);
5088
5089  // Perform overload resolution.
5090  OverloadCandidateSet::iterator Best;
5091  switch (BestViableFunction(CandidateSet, OpLoc, Best)) {
5092  case OR_Success:
5093    // Overload resolution succeeded; we'll build the call below.
5094    break;
5095
5096  case OR_No_Viable_Function:
5097    if (CandidateSet.empty())
5098      Diag(OpLoc, diag::err_typecheck_member_reference_arrow)
5099        << Base->getType() << Base->getSourceRange();
5100    else
5101      Diag(OpLoc, diag::err_ovl_no_viable_oper)
5102        << "operator->" << Base->getSourceRange();
5103    PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/false);
5104    return ExprError();
5105
5106  case OR_Ambiguous:
5107    Diag(OpLoc,  diag::err_ovl_ambiguous_oper)
5108      << "->" << Base->getSourceRange();
5109    PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/true);
5110    return ExprError();
5111
5112  case OR_Deleted:
5113    Diag(OpLoc,  diag::err_ovl_deleted_oper)
5114      << Best->Function->isDeleted()
5115      << "->" << Base->getSourceRange();
5116    PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/true);
5117    return ExprError();
5118  }
5119
5120  // Convert the object parameter.
5121  CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
5122  if (PerformObjectArgumentInitialization(Base, Method))
5123    return ExprError();
5124
5125  // No concerns about early exits now.
5126  BaseIn.release();
5127
5128  // Build the operator call.
5129  Expr *FnExpr = new (Context) DeclRefExpr(Method, Method->getType(),
5130                                           SourceLocation());
5131  UsualUnaryConversions(FnExpr);
5132  Base = new (Context) CXXOperatorCallExpr(Context, OO_Arrow, FnExpr, &Base, 1,
5133                                 Method->getResultType().getNonReferenceType(),
5134                                 Method->getLocation());
5135  return Owned(Base);
5136}
5137
5138/// FixOverloadedFunctionReference - E is an expression that refers to
5139/// a C++ overloaded function (possibly with some parentheses and
5140/// perhaps a '&' around it). We have resolved the overloaded function
5141/// to the function declaration Fn, so patch up the expression E to
5142/// refer (possibly indirectly) to Fn.
5143void Sema::FixOverloadedFunctionReference(Expr *E, FunctionDecl *Fn) {
5144  if (ParenExpr *PE = dyn_cast<ParenExpr>(E)) {
5145    FixOverloadedFunctionReference(PE->getSubExpr(), Fn);
5146    E->setType(PE->getSubExpr()->getType());
5147  } else if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(E)) {
5148    assert(UnOp->getOpcode() == UnaryOperator::AddrOf &&
5149           "Can only take the address of an overloaded function");
5150    if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
5151      if (Method->isStatic()) {
5152        // Do nothing: static member functions aren't any different
5153        // from non-member functions.
5154      } else if (QualifiedDeclRefExpr *DRE
5155                 = dyn_cast<QualifiedDeclRefExpr>(UnOp->getSubExpr())) {
5156        // We have taken the address of a pointer to member
5157        // function. Perform the computation here so that we get the
5158        // appropriate pointer to member type.
5159        DRE->setDecl(Fn);
5160        DRE->setType(Fn->getType());
5161        QualType ClassType
5162          = Context.getTypeDeclType(cast<RecordDecl>(Method->getDeclContext()));
5163        E->setType(Context.getMemberPointerType(Fn->getType(),
5164                                                ClassType.getTypePtr()));
5165        return;
5166      }
5167    }
5168    FixOverloadedFunctionReference(UnOp->getSubExpr(), Fn);
5169    E->setType(Context.getPointerType(UnOp->getSubExpr()->getType()));
5170  } else if (DeclRefExpr *DR = dyn_cast<DeclRefExpr>(E)) {
5171    assert((isa<OverloadedFunctionDecl>(DR->getDecl()) ||
5172            isa<FunctionTemplateDecl>(DR->getDecl())) &&
5173           "Expected overloaded function or function template");
5174    DR->setDecl(Fn);
5175    E->setType(Fn->getType());
5176  } else if (MemberExpr *MemExpr = dyn_cast<MemberExpr>(E)) {
5177    MemExpr->setMemberDecl(Fn);
5178    E->setType(Fn->getType());
5179  } else {
5180    assert(false && "Invalid reference to overloaded function");
5181  }
5182}
5183
5184} // end namespace clang
5185