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