SemaOverload.cpp revision 22c107b2b99887b5aec6d1fd38210031e944e31f
1b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper//===--- SemaOverload.cpp - C++ Overloading ---------------------*- C++ -*-===// 289759c76ee1e3231ee89d4aafed3a88772ce2245Ulrich Drepper// 3361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper// The LLVM Compiler Infrastructure 4b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper// 5b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper// This file is distributed under the University of Illinois Open Source 6361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper// License. See LICENSE.TXT for details. 7361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper// 8361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper//===----------------------------------------------------------------------===// 9b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper// 10361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper// This file provides Sema routines for C++ overloading. 11361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper// 12361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper//===----------------------------------------------------------------------===// 13361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper 14b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include "clang/Sema/SemaInternal.h" 15361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper#include "clang/Sema/Lookup.h" 16361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper#include "clang/Sema/Initialization.h" 171e9ef50681e20ef14c2ba38aef37a71ff148be08Ulrich Drepper#include "clang/Sema/Template.h" 18361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper#include "clang/Sema/TemplateDeduction.h" 19361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper#include "clang/Basic/Diagnostic.h" 20361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper#include "clang/Lex/Preprocessor.h" 21361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper#include "clang/AST/ASTContext.h" 22361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper#include "clang/AST/CXXInheritance.h" 23361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper#include "clang/AST/DeclObjC.h" 24361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper#include "clang/AST/Expr.h" 25361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper#include "clang/AST/ExprCXX.h" 26361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper#include "clang/AST/ExprObjC.h" 27361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper#include "clang/AST/TypeOrdering.h" 28361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper#include "clang/Basic/PartialDiagnostic.h" 29361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper#include "llvm/ADT/DenseSet.h" 30361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper#include "llvm/ADT/SmallPtrSet.h" 31361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper#include "llvm/ADT/STLExtras.h" 32361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper#include <algorithm> 33361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper 34361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Dreppernamespace clang { 35361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepperusing namespace sema; 36361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper 37361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper/// A convenience routine for creating a decayed reference to a 38361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper/// function. 39361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepperstatic ExprResult 40361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich DrepperCreateFunctionRefExpr(Sema &S, FunctionDecl *Fn, bool HadMultipleCandidates, 41361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper SourceLocation Loc = SourceLocation(), 42361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper const DeclarationNameLoc &LocInfo = DeclarationNameLoc()){ 43361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper DeclRefExpr *DRE = new (S.Context) DeclRefExpr(Fn, Fn->getType(), 44361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper VK_LValue, Loc, LocInfo); 45361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper if (HadMultipleCandidates) 46361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper DRE->setHadMultipleCandidates(true); 47361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper ExprResult E = S.Owned(DRE); 48361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper E = S.DefaultFunctionArrayConversion(E.take()); 49361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper if (E.isInvalid()) 50b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper return ExprError(); 51b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper return move(E); 52b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper} 53b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 54b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstatic bool IsStandardConversion(Sema &S, Expr* From, QualType ToType, 55b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper bool InOverloadResolution, 56b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper StandardConversionSequence &SCS, 57b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper bool CStyle, 58b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper bool AllowObjCWritebackConversion); 59b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 60b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstatic bool IsTransparentUnionStandardConversion(Sema &S, Expr* From, 61b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper QualType &ToType, 62b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper bool InOverloadResolution, 63b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper StandardConversionSequence &SCS, 64b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper bool CStyle); 65b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstatic OverloadingResult 66b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperIsUserDefinedConversion(Sema &S, Expr *From, QualType ToType, 67b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper UserDefinedConversionSequence& User, 68b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper OverloadCandidateSet& Conversions, 69b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper bool AllowExplicit); 70b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 71b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 72b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstatic ImplicitConversionSequence::CompareKind 73b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperCompareStandardConversionSequences(Sema &S, 74b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper const StandardConversionSequence& SCS1, 75b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper const StandardConversionSequence& SCS2); 76b4d6f0f8064f2b706ea9035ef0393d8299671390Roland McGrath 77b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstatic ImplicitConversionSequence::CompareKind 78b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperCompareQualificationConversions(Sema &S, 79b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper const StandardConversionSequence& SCS1, 80b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper const StandardConversionSequence& SCS2); 81b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 82b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstatic ImplicitConversionSequence::CompareKind 83b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperCompareDerivedToBaseConversions(Sema &S, 84b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper const StandardConversionSequence& SCS1, 85b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper const StandardConversionSequence& SCS2); 86b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 87b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 88b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 89b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/// GetConversionCategory - Retrieve the implicit conversion 90b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/// category corresponding to the given implicit conversion kind. 91b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperImplicitConversionCategory 92b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperGetConversionCategory(ImplicitConversionKind Kind) { 93b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper static const ImplicitConversionCategory 94b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Category[(int)ICK_Num_Conversion_Kinds] = { 95b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICC_Identity, 96b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICC_Lvalue_Transformation, 97b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICC_Lvalue_Transformation, 98b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICC_Lvalue_Transformation, 99b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICC_Identity, 100b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICC_Qualification_Adjustment, 101b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICC_Promotion, 102b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICC_Promotion, 103b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICC_Promotion, 104b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICC_Conversion, 105b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICC_Conversion, 106b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICC_Conversion, 107b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICC_Conversion, 108b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICC_Conversion, 109b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICC_Conversion, 110b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICC_Conversion, 111b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICC_Conversion, 112b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICC_Conversion, 113b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICC_Conversion, 114b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICC_Conversion, 115b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICC_Conversion, 116b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICC_Conversion 117b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper }; 118b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper return Category[(int)Kind]; 119b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper} 120b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 121b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/// GetConversionRank - Retrieve the implicit conversion rank 122b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/// corresponding to the given implicit conversion kind. 123b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperImplicitConversionRank GetConversionRank(ImplicitConversionKind Kind) { 124b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper static const ImplicitConversionRank 125b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Rank[(int)ICK_Num_Conversion_Kinds] = { 126b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICR_Exact_Match, 127b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICR_Exact_Match, 128b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICR_Exact_Match, 129b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICR_Exact_Match, 130b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICR_Exact_Match, 131b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICR_Exact_Match, 132b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICR_Promotion, 133b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICR_Promotion, 134b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICR_Promotion, 135b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICR_Conversion, 136b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICR_Conversion, 137b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICR_Conversion, 138b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICR_Conversion, 139b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICR_Conversion, 140b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICR_Conversion, 141b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICR_Conversion, 142b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ICR_Conversion, 143b4d6f0f8064f2b706ea9035ef0393d8299671390Roland McGrath ICR_Conversion, 144b4d6f0f8064f2b706ea9035ef0393d8299671390Roland McGrath ICR_Conversion, 145b4d6f0f8064f2b706ea9035ef0393d8299671390Roland McGrath ICR_Conversion, 146b4d6f0f8064f2b706ea9035ef0393d8299671390Roland McGrath ICR_Complex_Real_Conversion, 147b4d6f0f8064f2b706ea9035ef0393d8299671390Roland McGrath ICR_Conversion, 148b4d6f0f8064f2b706ea9035ef0393d8299671390Roland McGrath ICR_Conversion, 149b4d6f0f8064f2b706ea9035ef0393d8299671390Roland McGrath ICR_Writeback_Conversion 150b4d6f0f8064f2b706ea9035ef0393d8299671390Roland McGrath }; 151b4d6f0f8064f2b706ea9035ef0393d8299671390Roland McGrath return Rank[(int)Kind]; 152b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper} 15389759c76ee1e3231ee89d4aafed3a88772ce2245Ulrich Drepper 15489759c76ee1e3231ee89d4aafed3a88772ce2245Ulrich Drepper/// GetImplicitConversionName - Return the name of this kind of 15589759c76ee1e3231ee89d4aafed3a88772ce2245Ulrich Drepper/// implicit conversion. 15689759c76ee1e3231ee89d4aafed3a88772ce2245Ulrich Drepperconst char* GetImplicitConversionName(ImplicitConversionKind Kind) { 15789759c76ee1e3231ee89d4aafed3a88772ce2245Ulrich Drepper static const char* const Name[(int)ICK_Num_Conversion_Kinds] = { 15889759c76ee1e3231ee89d4aafed3a88772ce2245Ulrich Drepper "No conversion", 15989759c76ee1e3231ee89d4aafed3a88772ce2245Ulrich Drepper "Lvalue-to-rvalue", 16089759c76ee1e3231ee89d4aafed3a88772ce2245Ulrich Drepper "Array-to-pointer", 16189759c76ee1e3231ee89d4aafed3a88772ce2245Ulrich Drepper "Function-to-pointer", 16289759c76ee1e3231ee89d4aafed3a88772ce2245Ulrich Drepper "Noreturn adjustment", 16389759c76ee1e3231ee89d4aafed3a88772ce2245Ulrich Drepper "Qualification", 16489759c76ee1e3231ee89d4aafed3a88772ce2245Ulrich Drepper "Integral promotion", 16589759c76ee1e3231ee89d4aafed3a88772ce2245Ulrich Drepper "Floating point promotion", 16689759c76ee1e3231ee89d4aafed3a88772ce2245Ulrich Drepper "Complex promotion", 16789759c76ee1e3231ee89d4aafed3a88772ce2245Ulrich Drepper "Integral conversion", 16889759c76ee1e3231ee89d4aafed3a88772ce2245Ulrich Drepper "Floating conversion", 16989759c76ee1e3231ee89d4aafed3a88772ce2245Ulrich Drepper "Complex conversion", 17089759c76ee1e3231ee89d4aafed3a88772ce2245Ulrich Drepper "Floating-integral conversion", 17189759c76ee1e3231ee89d4aafed3a88772ce2245Ulrich Drepper "Pointer conversion", 172b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper "Pointer-to-member conversion", 173b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper "Boolean conversion", 174b4d6f0f8064f2b706ea9035ef0393d8299671390Roland McGrath "Compatible-types conversion", 175b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper "Derived-to-base conversion", 176b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper "Vector conversion", 177b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper "Vector splat", 178b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper "Complex-real conversion", 179 "Block Pointer conversion", 180 "Transparent Union Conversion" 181 "Writeback conversion" 182 }; 183 return Name[Kind]; 184} 185 186/// StandardConversionSequence - Set the standard conversion 187/// sequence to the identity conversion. 188void StandardConversionSequence::setAsIdentityConversion() { 189 First = ICK_Identity; 190 Second = ICK_Identity; 191 Third = ICK_Identity; 192 DeprecatedStringLiteralToCharPtr = false; 193 QualificationIncludesObjCLifetime = false; 194 ReferenceBinding = false; 195 DirectBinding = false; 196 IsLvalueReference = true; 197 BindsToFunctionLvalue = false; 198 BindsToRvalue = false; 199 BindsImplicitObjectArgumentWithoutRefQualifier = false; 200 ObjCLifetimeConversionBinding = false; 201 CopyConstructor = 0; 202} 203 204/// getRank - Retrieve the rank of this standard conversion sequence 205/// (C++ 13.3.3.1.1p3). The rank is the largest rank of each of the 206/// implicit conversions. 207ImplicitConversionRank StandardConversionSequence::getRank() const { 208 ImplicitConversionRank Rank = ICR_Exact_Match; 209 if (GetConversionRank(First) > Rank) 210 Rank = GetConversionRank(First); 211 if (GetConversionRank(Second) > Rank) 212 Rank = GetConversionRank(Second); 213 if (GetConversionRank(Third) > Rank) 214 Rank = GetConversionRank(Third); 215 return Rank; 216} 217 218/// isPointerConversionToBool - Determines whether this conversion is 219/// a conversion of a pointer or pointer-to-member to bool. This is 220/// used as part of the ranking of standard conversion sequences 221/// (C++ 13.3.3.2p4). 222bool StandardConversionSequence::isPointerConversionToBool() const { 223 // Note that FromType has not necessarily been transformed by the 224 // array-to-pointer or function-to-pointer implicit conversions, so 225 // check for their presence as well as checking whether FromType is 226 // a pointer. 227 if (getToType(1)->isBooleanType() && 228 (getFromType()->isPointerType() || 229 getFromType()->isObjCObjectPointerType() || 230 getFromType()->isBlockPointerType() || 231 getFromType()->isNullPtrType() || 232 First == ICK_Array_To_Pointer || First == ICK_Function_To_Pointer)) 233 return true; 234 235 return false; 236} 237 238/// isPointerConversionToVoidPointer - Determines whether this 239/// conversion is a conversion of a pointer to a void pointer. This is 240/// used as part of the ranking of standard conversion sequences (C++ 241/// 13.3.3.2p4). 242bool 243StandardConversionSequence:: 244isPointerConversionToVoidPointer(ASTContext& Context) const { 245 QualType FromType = getFromType(); 246 QualType ToType = getToType(1); 247 248 // Note that FromType has not necessarily been transformed by the 249 // array-to-pointer implicit conversion, so check for its presence 250 // and redo the conversion to get a pointer. 251 if (First == ICK_Array_To_Pointer) 252 FromType = Context.getArrayDecayedType(FromType); 253 254 if (Second == ICK_Pointer_Conversion && FromType->isAnyPointerType()) 255 if (const PointerType* ToPtrType = ToType->getAs<PointerType>()) 256 return ToPtrType->getPointeeType()->isVoidType(); 257 258 return false; 259} 260 261/// DebugPrint - Print this standard conversion sequence to standard 262/// error. Useful for debugging overloading issues. 263void StandardConversionSequence::DebugPrint() const { 264 raw_ostream &OS = llvm::errs(); 265 bool PrintedSomething = false; 266 if (First != ICK_Identity) { 267 OS << GetImplicitConversionName(First); 268 PrintedSomething = true; 269 } 270 271 if (Second != ICK_Identity) { 272 if (PrintedSomething) { 273 OS << " -> "; 274 } 275 OS << GetImplicitConversionName(Second); 276 277 if (CopyConstructor) { 278 OS << " (by copy constructor)"; 279 } else if (DirectBinding) { 280 OS << " (direct reference binding)"; 281 } else if (ReferenceBinding) { 282 OS << " (reference binding)"; 283 } 284 PrintedSomething = true; 285 } 286 287 if (Third != ICK_Identity) { 288 if (PrintedSomething) { 289 OS << " -> "; 290 } 291 OS << GetImplicitConversionName(Third); 292 PrintedSomething = true; 293 } 294 295 if (!PrintedSomething) { 296 OS << "No conversions required"; 297 } 298} 299 300/// DebugPrint - Print this user-defined conversion sequence to standard 301/// error. Useful for debugging overloading issues. 302void UserDefinedConversionSequence::DebugPrint() const { 303 raw_ostream &OS = llvm::errs(); 304 if (Before.First || Before.Second || Before.Third) { 305 Before.DebugPrint(); 306 OS << " -> "; 307 } 308 if (ConversionFunction) 309 OS << '\'' << *ConversionFunction << '\''; 310 else 311 OS << "aggregate initialization"; 312 if (After.First || After.Second || After.Third) { 313 OS << " -> "; 314 After.DebugPrint(); 315 } 316} 317 318/// DebugPrint - Print this implicit conversion sequence to standard 319/// error. Useful for debugging overloading issues. 320void ImplicitConversionSequence::DebugPrint() const { 321 raw_ostream &OS = llvm::errs(); 322 switch (ConversionKind) { 323 case StandardConversion: 324 OS << "Standard conversion: "; 325 Standard.DebugPrint(); 326 break; 327 case UserDefinedConversion: 328 OS << "User-defined conversion: "; 329 UserDefined.DebugPrint(); 330 break; 331 case EllipsisConversion: 332 OS << "Ellipsis conversion"; 333 break; 334 case AmbiguousConversion: 335 OS << "Ambiguous conversion"; 336 break; 337 case BadConversion: 338 OS << "Bad conversion"; 339 break; 340 } 341 342 OS << "\n"; 343} 344 345void AmbiguousConversionSequence::construct() { 346 new (&conversions()) ConversionSet(); 347} 348 349void AmbiguousConversionSequence::destruct() { 350 conversions().~ConversionSet(); 351} 352 353void 354AmbiguousConversionSequence::copyFrom(const AmbiguousConversionSequence &O) { 355 FromTypePtr = O.FromTypePtr; 356 ToTypePtr = O.ToTypePtr; 357 new (&conversions()) ConversionSet(O.conversions()); 358} 359 360namespace { 361 // Structure used by OverloadCandidate::DeductionFailureInfo to store 362 // template parameter and template argument information. 363 struct DFIParamWithArguments { 364 TemplateParameter Param; 365 TemplateArgument FirstArg; 366 TemplateArgument SecondArg; 367 }; 368} 369 370/// \brief Convert from Sema's representation of template deduction information 371/// to the form used in overload-candidate information. 372OverloadCandidate::DeductionFailureInfo 373static MakeDeductionFailureInfo(ASTContext &Context, 374 Sema::TemplateDeductionResult TDK, 375 TemplateDeductionInfo &Info) { 376 OverloadCandidate::DeductionFailureInfo Result; 377 Result.Result = static_cast<unsigned>(TDK); 378 Result.Data = 0; 379 switch (TDK) { 380 case Sema::TDK_Success: 381 case Sema::TDK_InstantiationDepth: 382 case Sema::TDK_TooManyArguments: 383 case Sema::TDK_TooFewArguments: 384 break; 385 386 case Sema::TDK_Incomplete: 387 case Sema::TDK_InvalidExplicitArguments: 388 Result.Data = Info.Param.getOpaqueValue(); 389 break; 390 391 case Sema::TDK_Inconsistent: 392 case Sema::TDK_Underqualified: { 393 // FIXME: Should allocate from normal heap so that we can free this later. 394 DFIParamWithArguments *Saved = new (Context) DFIParamWithArguments; 395 Saved->Param = Info.Param; 396 Saved->FirstArg = Info.FirstArg; 397 Saved->SecondArg = Info.SecondArg; 398 Result.Data = Saved; 399 break; 400 } 401 402 case Sema::TDK_SubstitutionFailure: 403 Result.Data = Info.take(); 404 break; 405 406 case Sema::TDK_NonDeducedMismatch: 407 case Sema::TDK_FailedOverloadResolution: 408 break; 409 } 410 411 return Result; 412} 413 414void OverloadCandidate::DeductionFailureInfo::Destroy() { 415 switch (static_cast<Sema::TemplateDeductionResult>(Result)) { 416 case Sema::TDK_Success: 417 case Sema::TDK_InstantiationDepth: 418 case Sema::TDK_Incomplete: 419 case Sema::TDK_TooManyArguments: 420 case Sema::TDK_TooFewArguments: 421 case Sema::TDK_InvalidExplicitArguments: 422 break; 423 424 case Sema::TDK_Inconsistent: 425 case Sema::TDK_Underqualified: 426 // FIXME: Destroy the data? 427 Data = 0; 428 break; 429 430 case Sema::TDK_SubstitutionFailure: 431 // FIXME: Destroy the template arugment list? 432 Data = 0; 433 break; 434 435 // Unhandled 436 case Sema::TDK_NonDeducedMismatch: 437 case Sema::TDK_FailedOverloadResolution: 438 break; 439 } 440} 441 442TemplateParameter 443OverloadCandidate::DeductionFailureInfo::getTemplateParameter() { 444 switch (static_cast<Sema::TemplateDeductionResult>(Result)) { 445 case Sema::TDK_Success: 446 case Sema::TDK_InstantiationDepth: 447 case Sema::TDK_TooManyArguments: 448 case Sema::TDK_TooFewArguments: 449 case Sema::TDK_SubstitutionFailure: 450 return TemplateParameter(); 451 452 case Sema::TDK_Incomplete: 453 case Sema::TDK_InvalidExplicitArguments: 454 return TemplateParameter::getFromOpaqueValue(Data); 455 456 case Sema::TDK_Inconsistent: 457 case Sema::TDK_Underqualified: 458 return static_cast<DFIParamWithArguments*>(Data)->Param; 459 460 // Unhandled 461 case Sema::TDK_NonDeducedMismatch: 462 case Sema::TDK_FailedOverloadResolution: 463 break; 464 } 465 466 return TemplateParameter(); 467} 468 469TemplateArgumentList * 470OverloadCandidate::DeductionFailureInfo::getTemplateArgumentList() { 471 switch (static_cast<Sema::TemplateDeductionResult>(Result)) { 472 case Sema::TDK_Success: 473 case Sema::TDK_InstantiationDepth: 474 case Sema::TDK_TooManyArguments: 475 case Sema::TDK_TooFewArguments: 476 case Sema::TDK_Incomplete: 477 case Sema::TDK_InvalidExplicitArguments: 478 case Sema::TDK_Inconsistent: 479 case Sema::TDK_Underqualified: 480 return 0; 481 482 case Sema::TDK_SubstitutionFailure: 483 return static_cast<TemplateArgumentList*>(Data); 484 485 // Unhandled 486 case Sema::TDK_NonDeducedMismatch: 487 case Sema::TDK_FailedOverloadResolution: 488 break; 489 } 490 491 return 0; 492} 493 494const TemplateArgument *OverloadCandidate::DeductionFailureInfo::getFirstArg() { 495 switch (static_cast<Sema::TemplateDeductionResult>(Result)) { 496 case Sema::TDK_Success: 497 case Sema::TDK_InstantiationDepth: 498 case Sema::TDK_Incomplete: 499 case Sema::TDK_TooManyArguments: 500 case Sema::TDK_TooFewArguments: 501 case Sema::TDK_InvalidExplicitArguments: 502 case Sema::TDK_SubstitutionFailure: 503 return 0; 504 505 case Sema::TDK_Inconsistent: 506 case Sema::TDK_Underqualified: 507 return &static_cast<DFIParamWithArguments*>(Data)->FirstArg; 508 509 // Unhandled 510 case Sema::TDK_NonDeducedMismatch: 511 case Sema::TDK_FailedOverloadResolution: 512 break; 513 } 514 515 return 0; 516} 517 518const TemplateArgument * 519OverloadCandidate::DeductionFailureInfo::getSecondArg() { 520 switch (static_cast<Sema::TemplateDeductionResult>(Result)) { 521 case Sema::TDK_Success: 522 case Sema::TDK_InstantiationDepth: 523 case Sema::TDK_Incomplete: 524 case Sema::TDK_TooManyArguments: 525 case Sema::TDK_TooFewArguments: 526 case Sema::TDK_InvalidExplicitArguments: 527 case Sema::TDK_SubstitutionFailure: 528 return 0; 529 530 case Sema::TDK_Inconsistent: 531 case Sema::TDK_Underqualified: 532 return &static_cast<DFIParamWithArguments*>(Data)->SecondArg; 533 534 // Unhandled 535 case Sema::TDK_NonDeducedMismatch: 536 case Sema::TDK_FailedOverloadResolution: 537 break; 538 } 539 540 return 0; 541} 542 543void OverloadCandidateSet::clear() { 544 inherited::clear(); 545 Functions.clear(); 546} 547 548namespace { 549 class UnbridgedCastsSet { 550 struct Entry { 551 Expr **Addr; 552 Expr *Saved; 553 }; 554 SmallVector<Entry, 2> Entries; 555 556 public: 557 void save(Sema &S, Expr *&E) { 558 assert(E->hasPlaceholderType(BuiltinType::ARCUnbridgedCast)); 559 Entry entry = { &E, E }; 560 Entries.push_back(entry); 561 E = S.stripARCUnbridgedCast(E); 562 } 563 564 void restore() { 565 for (SmallVectorImpl<Entry>::iterator 566 i = Entries.begin(), e = Entries.end(); i != e; ++i) 567 *i->Addr = i->Saved; 568 } 569 }; 570} 571 572/// checkPlaceholderForOverload - Do any interesting placeholder-like 573/// preprocessing on the given expression. 574/// 575/// \param unbridgedCasts a collection to which to add unbridged casts; 576/// without this, they will be immediately diagnosed as errors 577/// 578/// Return true on unrecoverable error. 579static bool checkPlaceholderForOverload(Sema &S, Expr *&E, 580 UnbridgedCastsSet *unbridgedCasts = 0) { 581 if (const BuiltinType *placeholder = E->getType()->getAsPlaceholderType()) { 582 // We can't handle overloaded expressions here because overload 583 // resolution might reasonably tweak them. 584 if (placeholder->getKind() == BuiltinType::Overload) return false; 585 586 // If the context potentially accepts unbridged ARC casts, strip 587 // the unbridged cast and add it to the collection for later restoration. 588 if (placeholder->getKind() == BuiltinType::ARCUnbridgedCast && 589 unbridgedCasts) { 590 unbridgedCasts->save(S, E); 591 return false; 592 } 593 594 // Go ahead and check everything else. 595 ExprResult result = S.CheckPlaceholderExpr(E); 596 if (result.isInvalid()) 597 return true; 598 599 E = result.take(); 600 return false; 601 } 602 603 // Nothing to do. 604 return false; 605} 606 607/// checkArgPlaceholdersForOverload - Check a set of call operands for 608/// placeholders. 609static bool checkArgPlaceholdersForOverload(Sema &S, Expr **args, 610 unsigned numArgs, 611 UnbridgedCastsSet &unbridged) { 612 for (unsigned i = 0; i != numArgs; ++i) 613 if (checkPlaceholderForOverload(S, args[i], &unbridged)) 614 return true; 615 616 return false; 617} 618 619// IsOverload - Determine whether the given New declaration is an 620// overload of the declarations in Old. This routine returns false if 621// New and Old cannot be overloaded, e.g., if New has the same 622// signature as some function in Old (C++ 1.3.10) or if the Old 623// declarations aren't functions (or function templates) at all. When 624// it does return false, MatchedDecl will point to the decl that New 625// cannot be overloaded with. This decl may be a UsingShadowDecl on 626// top of the underlying declaration. 627// 628// Example: Given the following input: 629// 630// void f(int, float); // #1 631// void f(int, int); // #2 632// int f(int, int); // #3 633// 634// When we process #1, there is no previous declaration of "f", 635// so IsOverload will not be used. 636// 637// When we process #2, Old contains only the FunctionDecl for #1. By 638// comparing the parameter types, we see that #1 and #2 are overloaded 639// (since they have different signatures), so this routine returns 640// false; MatchedDecl is unchanged. 641// 642// When we process #3, Old is an overload set containing #1 and #2. We 643// compare the signatures of #3 to #1 (they're overloaded, so we do 644// nothing) and then #3 to #2. Since the signatures of #3 and #2 are 645// identical (return types of functions are not part of the 646// signature), IsOverload returns false and MatchedDecl will be set to 647// point to the FunctionDecl for #2. 648// 649// 'NewIsUsingShadowDecl' indicates that 'New' is being introduced 650// into a class by a using declaration. The rules for whether to hide 651// shadow declarations ignore some properties which otherwise figure 652// into a function template's signature. 653Sema::OverloadKind 654Sema::CheckOverload(Scope *S, FunctionDecl *New, const LookupResult &Old, 655 NamedDecl *&Match, bool NewIsUsingDecl) { 656 for (LookupResult::iterator I = Old.begin(), E = Old.end(); 657 I != E; ++I) { 658 NamedDecl *OldD = *I; 659 660 bool OldIsUsingDecl = false; 661 if (isa<UsingShadowDecl>(OldD)) { 662 OldIsUsingDecl = true; 663 664 // We can always introduce two using declarations into the same 665 // context, even if they have identical signatures. 666 if (NewIsUsingDecl) continue; 667 668 OldD = cast<UsingShadowDecl>(OldD)->getTargetDecl(); 669 } 670 671 // If either declaration was introduced by a using declaration, 672 // we'll need to use slightly different rules for matching. 673 // Essentially, these rules are the normal rules, except that 674 // function templates hide function templates with different 675 // return types or template parameter lists. 676 bool UseMemberUsingDeclRules = 677 (OldIsUsingDecl || NewIsUsingDecl) && CurContext->isRecord(); 678 679 if (FunctionTemplateDecl *OldT = dyn_cast<FunctionTemplateDecl>(OldD)) { 680 if (!IsOverload(New, OldT->getTemplatedDecl(), UseMemberUsingDeclRules)) { 681 if (UseMemberUsingDeclRules && OldIsUsingDecl) { 682 HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I)); 683 continue; 684 } 685 686 Match = *I; 687 return Ovl_Match; 688 } 689 } else if (FunctionDecl *OldF = dyn_cast<FunctionDecl>(OldD)) { 690 if (!IsOverload(New, OldF, UseMemberUsingDeclRules)) { 691 if (UseMemberUsingDeclRules && OldIsUsingDecl) { 692 HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I)); 693 continue; 694 } 695 696 Match = *I; 697 return Ovl_Match; 698 } 699 } else if (isa<UsingDecl>(OldD)) { 700 // We can overload with these, which can show up when doing 701 // redeclaration checks for UsingDecls. 702 assert(Old.getLookupKind() == LookupUsingDeclName); 703 } else if (isa<TagDecl>(OldD)) { 704 // We can always overload with tags by hiding them. 705 } else if (isa<UnresolvedUsingValueDecl>(OldD)) { 706 // Optimistically assume that an unresolved using decl will 707 // overload; if it doesn't, we'll have to diagnose during 708 // template instantiation. 709 } else { 710 // (C++ 13p1): 711 // Only function declarations can be overloaded; object and type 712 // declarations cannot be overloaded. 713 Match = *I; 714 return Ovl_NonFunction; 715 } 716 } 717 718 return Ovl_Overload; 719} 720 721bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old, 722 bool UseUsingDeclRules) { 723 // If both of the functions are extern "C", then they are not 724 // overloads. 725 if (Old->isExternC() && New->isExternC()) 726 return false; 727 728 FunctionTemplateDecl *OldTemplate = Old->getDescribedFunctionTemplate(); 729 FunctionTemplateDecl *NewTemplate = New->getDescribedFunctionTemplate(); 730 731 // C++ [temp.fct]p2: 732 // A function template can be overloaded with other function templates 733 // and with normal (non-template) functions. 734 if ((OldTemplate == 0) != (NewTemplate == 0)) 735 return true; 736 737 // Is the function New an overload of the function Old? 738 QualType OldQType = Context.getCanonicalType(Old->getType()); 739 QualType NewQType = Context.getCanonicalType(New->getType()); 740 741 // Compare the signatures (C++ 1.3.10) of the two functions to 742 // determine whether they are overloads. If we find any mismatch 743 // in the signature, they are overloads. 744 745 // If either of these functions is a K&R-style function (no 746 // prototype), then we consider them to have matching signatures. 747 if (isa<FunctionNoProtoType>(OldQType.getTypePtr()) || 748 isa<FunctionNoProtoType>(NewQType.getTypePtr())) 749 return false; 750 751 const FunctionProtoType* OldType = cast<FunctionProtoType>(OldQType); 752 const FunctionProtoType* NewType = cast<FunctionProtoType>(NewQType); 753 754 // The signature of a function includes the types of its 755 // parameters (C++ 1.3.10), which includes the presence or absence 756 // of the ellipsis; see C++ DR 357). 757 if (OldQType != NewQType && 758 (OldType->getNumArgs() != NewType->getNumArgs() || 759 OldType->isVariadic() != NewType->isVariadic() || 760 !FunctionArgTypesAreEqual(OldType, NewType))) 761 return true; 762 763 // C++ [temp.over.link]p4: 764 // The signature of a function template consists of its function 765 // signature, its return type and its template parameter list. The names 766 // of the template parameters are significant only for establishing the 767 // relationship between the template parameters and the rest of the 768 // signature. 769 // 770 // We check the return type and template parameter lists for function 771 // templates first; the remaining checks follow. 772 // 773 // However, we don't consider either of these when deciding whether 774 // a member introduced by a shadow declaration is hidden. 775 if (!UseUsingDeclRules && NewTemplate && 776 (!TemplateParameterListsAreEqual(NewTemplate->getTemplateParameters(), 777 OldTemplate->getTemplateParameters(), 778 false, TPL_TemplateMatch) || 779 OldType->getResultType() != NewType->getResultType())) 780 return true; 781 782 // If the function is a class member, its signature includes the 783 // cv-qualifiers (if any) and ref-qualifier (if any) on the function itself. 784 // 785 // As part of this, also check whether one of the member functions 786 // is static, in which case they are not overloads (C++ 787 // 13.1p2). While not part of the definition of the signature, 788 // this check is important to determine whether these functions 789 // can be overloaded. 790 CXXMethodDecl* OldMethod = dyn_cast<CXXMethodDecl>(Old); 791 CXXMethodDecl* NewMethod = dyn_cast<CXXMethodDecl>(New); 792 if (OldMethod && NewMethod && 793 !OldMethod->isStatic() && !NewMethod->isStatic() && 794 (OldMethod->getTypeQualifiers() != NewMethod->getTypeQualifiers() || 795 OldMethod->getRefQualifier() != NewMethod->getRefQualifier())) { 796 if (!UseUsingDeclRules && 797 OldMethod->getRefQualifier() != NewMethod->getRefQualifier() && 798 (OldMethod->getRefQualifier() == RQ_None || 799 NewMethod->getRefQualifier() == RQ_None)) { 800 // C++0x [over.load]p2: 801 // - Member function declarations with the same name and the same 802 // parameter-type-list as well as member function template 803 // declarations with the same name, the same parameter-type-list, and 804 // the same template parameter lists cannot be overloaded if any of 805 // them, but not all, have a ref-qualifier (8.3.5). 806 Diag(NewMethod->getLocation(), diag::err_ref_qualifier_overload) 807 << NewMethod->getRefQualifier() << OldMethod->getRefQualifier(); 808 Diag(OldMethod->getLocation(), diag::note_previous_declaration); 809 } 810 811 return true; 812 } 813 814 // The signatures match; this is not an overload. 815 return false; 816} 817 818/// \brief Checks availability of the function depending on the current 819/// function context. Inside an unavailable function, unavailability is ignored. 820/// 821/// \returns true if \arg FD is unavailable and current context is inside 822/// an available function, false otherwise. 823bool Sema::isFunctionConsideredUnavailable(FunctionDecl *FD) { 824 return FD->isUnavailable() && !cast<Decl>(CurContext)->isUnavailable(); 825} 826 827/// TryImplicitConversion - Attempt to perform an implicit conversion 828/// from the given expression (Expr) to the given type (ToType). This 829/// function returns an implicit conversion sequence that can be used 830/// to perform the initialization. Given 831/// 832/// void f(float f); 833/// void g(int i) { f(i); } 834/// 835/// this routine would produce an implicit conversion sequence to 836/// describe the initialization of f from i, which will be a standard 837/// conversion sequence containing an lvalue-to-rvalue conversion (C++ 838/// 4.1) followed by a floating-integral conversion (C++ 4.9). 839// 840/// Note that this routine only determines how the conversion can be 841/// performed; it does not actually perform the conversion. As such, 842/// it will not produce any diagnostics if no conversion is available, 843/// but will instead return an implicit conversion sequence of kind 844/// "BadConversion". 845/// 846/// If @p SuppressUserConversions, then user-defined conversions are 847/// not permitted. 848/// If @p AllowExplicit, then explicit user-defined conversions are 849/// permitted. 850/// 851/// \param AllowObjCWritebackConversion Whether we allow the Objective-C 852/// writeback conversion, which allows __autoreleasing id* parameters to 853/// be initialized with __strong id* or __weak id* arguments. 854static ImplicitConversionSequence 855TryImplicitConversion(Sema &S, Expr *From, QualType ToType, 856 bool SuppressUserConversions, 857 bool AllowExplicit, 858 bool InOverloadResolution, 859 bool CStyle, 860 bool AllowObjCWritebackConversion) { 861 ImplicitConversionSequence ICS; 862 if (IsStandardConversion(S, From, ToType, InOverloadResolution, 863 ICS.Standard, CStyle, AllowObjCWritebackConversion)){ 864 ICS.setStandard(); 865 return ICS; 866 } 867 868 if (!S.getLangOptions().CPlusPlus) { 869 ICS.setBad(BadConversionSequence::no_conversion, From, ToType); 870 return ICS; 871 } 872 873 // C++ [over.ics.user]p4: 874 // A conversion of an expression of class type to the same class 875 // type is given Exact Match rank, and a conversion of an 876 // expression of class type to a base class of that type is 877 // given Conversion rank, in spite of the fact that a copy/move 878 // constructor (i.e., a user-defined conversion function) is 879 // called for those cases. 880 QualType FromType = From->getType(); 881 if (ToType->getAs<RecordType>() && FromType->getAs<RecordType>() && 882 (S.Context.hasSameUnqualifiedType(FromType, ToType) || 883 S.IsDerivedFrom(FromType, ToType))) { 884 ICS.setStandard(); 885 ICS.Standard.setAsIdentityConversion(); 886 ICS.Standard.setFromType(FromType); 887 ICS.Standard.setAllToTypes(ToType); 888 889 // We don't actually check at this point whether there is a valid 890 // copy/move constructor, since overloading just assumes that it 891 // exists. When we actually perform initialization, we'll find the 892 // appropriate constructor to copy the returned object, if needed. 893 ICS.Standard.CopyConstructor = 0; 894 895 // Determine whether this is considered a derived-to-base conversion. 896 if (!S.Context.hasSameUnqualifiedType(FromType, ToType)) 897 ICS.Standard.Second = ICK_Derived_To_Base; 898 899 return ICS; 900 } 901 902 if (SuppressUserConversions) { 903 // We're not in the case above, so there is no conversion that 904 // we can perform. 905 ICS.setBad(BadConversionSequence::no_conversion, From, ToType); 906 return ICS; 907 } 908 909 // Attempt user-defined conversion. 910 OverloadCandidateSet Conversions(From->getExprLoc()); 911 OverloadingResult UserDefResult 912 = IsUserDefinedConversion(S, From, ToType, ICS.UserDefined, Conversions, 913 AllowExplicit); 914 915 if (UserDefResult == OR_Success) { 916 ICS.setUserDefined(); 917 // C++ [over.ics.user]p4: 918 // A conversion of an expression of class type to the same class 919 // type is given Exact Match rank, and a conversion of an 920 // expression of class type to a base class of that type is 921 // given Conversion rank, in spite of the fact that a copy 922 // constructor (i.e., a user-defined conversion function) is 923 // called for those cases. 924 if (CXXConstructorDecl *Constructor 925 = dyn_cast<CXXConstructorDecl>(ICS.UserDefined.ConversionFunction)) { 926 QualType FromCanon 927 = S.Context.getCanonicalType(From->getType().getUnqualifiedType()); 928 QualType ToCanon 929 = S.Context.getCanonicalType(ToType).getUnqualifiedType(); 930 if (Constructor->isCopyConstructor() && 931 (FromCanon == ToCanon || S.IsDerivedFrom(FromCanon, ToCanon))) { 932 // Turn this into a "standard" conversion sequence, so that it 933 // gets ranked with standard conversion sequences. 934 ICS.setStandard(); 935 ICS.Standard.setAsIdentityConversion(); 936 ICS.Standard.setFromType(From->getType()); 937 ICS.Standard.setAllToTypes(ToType); 938 ICS.Standard.CopyConstructor = Constructor; 939 if (ToCanon != FromCanon) 940 ICS.Standard.Second = ICK_Derived_To_Base; 941 } 942 } 943 944 // C++ [over.best.ics]p4: 945 // However, when considering the argument of a user-defined 946 // conversion function that is a candidate by 13.3.1.3 when 947 // invoked for the copying of the temporary in the second step 948 // of a class copy-initialization, or by 13.3.1.4, 13.3.1.5, or 949 // 13.3.1.6 in all cases, only standard conversion sequences and 950 // ellipsis conversion sequences are allowed. 951 if (SuppressUserConversions && ICS.isUserDefined()) { 952 ICS.setBad(BadConversionSequence::suppressed_user, From, ToType); 953 } 954 } else if (UserDefResult == OR_Ambiguous && !SuppressUserConversions) { 955 ICS.setAmbiguous(); 956 ICS.Ambiguous.setFromType(From->getType()); 957 ICS.Ambiguous.setToType(ToType); 958 for (OverloadCandidateSet::iterator Cand = Conversions.begin(); 959 Cand != Conversions.end(); ++Cand) 960 if (Cand->Viable) 961 ICS.Ambiguous.addConversion(Cand->Function); 962 } else { 963 ICS.setBad(BadConversionSequence::no_conversion, From, ToType); 964 } 965 966 return ICS; 967} 968 969ImplicitConversionSequence 970Sema::TryImplicitConversion(Expr *From, QualType ToType, 971 bool SuppressUserConversions, 972 bool AllowExplicit, 973 bool InOverloadResolution, 974 bool CStyle, 975 bool AllowObjCWritebackConversion) { 976 return clang::TryImplicitConversion(*this, From, ToType, 977 SuppressUserConversions, AllowExplicit, 978 InOverloadResolution, CStyle, 979 AllowObjCWritebackConversion); 980} 981 982/// PerformImplicitConversion - Perform an implicit conversion of the 983/// expression From to the type ToType. Returns the 984/// converted expression. Flavor is the kind of conversion we're 985/// performing, used in the error message. If @p AllowExplicit, 986/// explicit user-defined conversions are permitted. 987ExprResult 988Sema::PerformImplicitConversion(Expr *From, QualType ToType, 989 AssignmentAction Action, bool AllowExplicit) { 990 ImplicitConversionSequence ICS; 991 return PerformImplicitConversion(From, ToType, Action, AllowExplicit, ICS); 992} 993 994ExprResult 995Sema::PerformImplicitConversion(Expr *From, QualType ToType, 996 AssignmentAction Action, bool AllowExplicit, 997 ImplicitConversionSequence& ICS) { 998 if (checkPlaceholderForOverload(*this, From)) 999 return ExprError(); 1000 1001 // Objective-C ARC: Determine whether we will allow the writeback conversion. 1002 bool AllowObjCWritebackConversion 1003 = getLangOptions().ObjCAutoRefCount && 1004 (Action == AA_Passing || Action == AA_Sending); 1005 1006 ICS = clang::TryImplicitConversion(*this, From, ToType, 1007 /*SuppressUserConversions=*/false, 1008 AllowExplicit, 1009 /*InOverloadResolution=*/false, 1010 /*CStyle=*/false, 1011 AllowObjCWritebackConversion); 1012 return PerformImplicitConversion(From, ToType, ICS, Action); 1013} 1014 1015/// \brief Determine whether the conversion from FromType to ToType is a valid 1016/// conversion that strips "noreturn" off the nested function type. 1017bool Sema::IsNoReturnConversion(QualType FromType, QualType ToType, 1018 QualType &ResultTy) { 1019 if (Context.hasSameUnqualifiedType(FromType, ToType)) 1020 return false; 1021 1022 // Permit the conversion F(t __attribute__((noreturn))) -> F(t) 1023 // where F adds one of the following at most once: 1024 // - a pointer 1025 // - a member pointer 1026 // - a block pointer 1027 CanQualType CanTo = Context.getCanonicalType(ToType); 1028 CanQualType CanFrom = Context.getCanonicalType(FromType); 1029 Type::TypeClass TyClass = CanTo->getTypeClass(); 1030 if (TyClass != CanFrom->getTypeClass()) return false; 1031 if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto) { 1032 if (TyClass == Type::Pointer) { 1033 CanTo = CanTo.getAs<PointerType>()->getPointeeType(); 1034 CanFrom = CanFrom.getAs<PointerType>()->getPointeeType(); 1035 } else if (TyClass == Type::BlockPointer) { 1036 CanTo = CanTo.getAs<BlockPointerType>()->getPointeeType(); 1037 CanFrom = CanFrom.getAs<BlockPointerType>()->getPointeeType(); 1038 } else if (TyClass == Type::MemberPointer) { 1039 CanTo = CanTo.getAs<MemberPointerType>()->getPointeeType(); 1040 CanFrom = CanFrom.getAs<MemberPointerType>()->getPointeeType(); 1041 } else { 1042 return false; 1043 } 1044 1045 TyClass = CanTo->getTypeClass(); 1046 if (TyClass != CanFrom->getTypeClass()) return false; 1047 if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto) 1048 return false; 1049 } 1050 1051 const FunctionType *FromFn = cast<FunctionType>(CanFrom); 1052 FunctionType::ExtInfo EInfo = FromFn->getExtInfo(); 1053 if (!EInfo.getNoReturn()) return false; 1054 1055 FromFn = Context.adjustFunctionType(FromFn, EInfo.withNoReturn(false)); 1056 assert(QualType(FromFn, 0).isCanonical()); 1057 if (QualType(FromFn, 0) != CanTo) return false; 1058 1059 ResultTy = ToType; 1060 return true; 1061} 1062 1063/// \brief Determine whether the conversion from FromType to ToType is a valid 1064/// vector conversion. 1065/// 1066/// \param ICK Will be set to the vector conversion kind, if this is a vector 1067/// conversion. 1068static bool IsVectorConversion(ASTContext &Context, QualType FromType, 1069 QualType ToType, ImplicitConversionKind &ICK) { 1070 // We need at least one of these types to be a vector type to have a vector 1071 // conversion. 1072 if (!ToType->isVectorType() && !FromType->isVectorType()) 1073 return false; 1074 1075 // Identical types require no conversions. 1076 if (Context.hasSameUnqualifiedType(FromType, ToType)) 1077 return false; 1078 1079 // There are no conversions between extended vector types, only identity. 1080 if (ToType->isExtVectorType()) { 1081 // There are no conversions between extended vector types other than the 1082 // identity conversion. 1083 if (FromType->isExtVectorType()) 1084 return false; 1085 1086 // Vector splat from any arithmetic type to a vector. 1087 if (FromType->isArithmeticType()) { 1088 ICK = ICK_Vector_Splat; 1089 return true; 1090 } 1091 } 1092 1093 // We can perform the conversion between vector types in the following cases: 1094 // 1)vector types are equivalent AltiVec and GCC vector types 1095 // 2)lax vector conversions are permitted and the vector types are of the 1096 // same size 1097 if (ToType->isVectorType() && FromType->isVectorType()) { 1098 if (Context.areCompatibleVectorTypes(FromType, ToType) || 1099 (Context.getLangOptions().LaxVectorConversions && 1100 (Context.getTypeSize(FromType) == Context.getTypeSize(ToType)))) { 1101 ICK = ICK_Vector_Conversion; 1102 return true; 1103 } 1104 } 1105 1106 return false; 1107} 1108 1109/// IsStandardConversion - Determines whether there is a standard 1110/// conversion sequence (C++ [conv], C++ [over.ics.scs]) from the 1111/// expression From to the type ToType. Standard conversion sequences 1112/// only consider non-class types; for conversions that involve class 1113/// types, use TryImplicitConversion. If a conversion exists, SCS will 1114/// contain the standard conversion sequence required to perform this 1115/// conversion and this routine will return true. Otherwise, this 1116/// routine will return false and the value of SCS is unspecified. 1117static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType, 1118 bool InOverloadResolution, 1119 StandardConversionSequence &SCS, 1120 bool CStyle, 1121 bool AllowObjCWritebackConversion) { 1122 QualType FromType = From->getType(); 1123 1124 // Standard conversions (C++ [conv]) 1125 SCS.setAsIdentityConversion(); 1126 SCS.DeprecatedStringLiteralToCharPtr = false; 1127 SCS.IncompatibleObjC = false; 1128 SCS.setFromType(FromType); 1129 SCS.CopyConstructor = 0; 1130 1131 // There are no standard conversions for class types in C++, so 1132 // abort early. When overloading in C, however, we do permit 1133 if (FromType->isRecordType() || ToType->isRecordType()) { 1134 if (S.getLangOptions().CPlusPlus) 1135 return false; 1136 1137 // When we're overloading in C, we allow, as standard conversions, 1138 } 1139 1140 // The first conversion can be an lvalue-to-rvalue conversion, 1141 // array-to-pointer conversion, or function-to-pointer conversion 1142 // (C++ 4p1). 1143 1144 if (FromType == S.Context.OverloadTy) { 1145 DeclAccessPair AccessPair; 1146 if (FunctionDecl *Fn 1147 = S.ResolveAddressOfOverloadedFunction(From, ToType, false, 1148 AccessPair)) { 1149 // We were able to resolve the address of the overloaded function, 1150 // so we can convert to the type of that function. 1151 FromType = Fn->getType(); 1152 1153 // we can sometimes resolve &foo<int> regardless of ToType, so check 1154 // if the type matches (identity) or we are converting to bool 1155 if (!S.Context.hasSameUnqualifiedType( 1156 S.ExtractUnqualifiedFunctionType(ToType), FromType)) { 1157 QualType resultTy; 1158 // if the function type matches except for [[noreturn]], it's ok 1159 if (!S.IsNoReturnConversion(FromType, 1160 S.ExtractUnqualifiedFunctionType(ToType), resultTy)) 1161 // otherwise, only a boolean conversion is standard 1162 if (!ToType->isBooleanType()) 1163 return false; 1164 } 1165 1166 // Check if the "from" expression is taking the address of an overloaded 1167 // function and recompute the FromType accordingly. Take advantage of the 1168 // fact that non-static member functions *must* have such an address-of 1169 // expression. 1170 CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn); 1171 if (Method && !Method->isStatic()) { 1172 assert(isa<UnaryOperator>(From->IgnoreParens()) && 1173 "Non-unary operator on non-static member address"); 1174 assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode() 1175 == UO_AddrOf && 1176 "Non-address-of operator on non-static member address"); 1177 const Type *ClassType 1178 = S.Context.getTypeDeclType(Method->getParent()).getTypePtr(); 1179 FromType = S.Context.getMemberPointerType(FromType, ClassType); 1180 } else if (isa<UnaryOperator>(From->IgnoreParens())) { 1181 assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode() == 1182 UO_AddrOf && 1183 "Non-address-of operator for overloaded function expression"); 1184 FromType = S.Context.getPointerType(FromType); 1185 } 1186 1187 // Check that we've computed the proper type after overload resolution. 1188 assert(S.Context.hasSameType( 1189 FromType, 1190 S.FixOverloadedFunctionReference(From, AccessPair, Fn)->getType())); 1191 } else { 1192 return false; 1193 } 1194 } 1195 // Lvalue-to-rvalue conversion (C++11 4.1): 1196 // A glvalue (3.10) of a non-function, non-array type T can 1197 // be converted to a prvalue. 1198 bool argIsLValue = From->isGLValue(); 1199 if (argIsLValue && 1200 !FromType->isFunctionType() && !FromType->isArrayType() && 1201 S.Context.getCanonicalType(FromType) != S.Context.OverloadTy) { 1202 SCS.First = ICK_Lvalue_To_Rvalue; 1203 1204 // If T is a non-class type, the type of the rvalue is the 1205 // cv-unqualified version of T. Otherwise, the type of the rvalue 1206 // is T (C++ 4.1p1). C++ can't get here with class types; in C, we 1207 // just strip the qualifiers because they don't matter. 1208 FromType = FromType.getUnqualifiedType(); 1209 } else if (FromType->isArrayType()) { 1210 // Array-to-pointer conversion (C++ 4.2) 1211 SCS.First = ICK_Array_To_Pointer; 1212 1213 // An lvalue or rvalue of type "array of N T" or "array of unknown 1214 // bound of T" can be converted to an rvalue of type "pointer to 1215 // T" (C++ 4.2p1). 1216 FromType = S.Context.getArrayDecayedType(FromType); 1217 1218 if (S.IsStringLiteralToNonConstPointerConversion(From, ToType)) { 1219 // This conversion is deprecated. (C++ D.4). 1220 SCS.DeprecatedStringLiteralToCharPtr = true; 1221 1222 // For the purpose of ranking in overload resolution 1223 // (13.3.3.1.1), this conversion is considered an 1224 // array-to-pointer conversion followed by a qualification 1225 // conversion (4.4). (C++ 4.2p2) 1226 SCS.Second = ICK_Identity; 1227 SCS.Third = ICK_Qualification; 1228 SCS.QualificationIncludesObjCLifetime = false; 1229 SCS.setAllToTypes(FromType); 1230 return true; 1231 } 1232 } else if (FromType->isFunctionType() && argIsLValue) { 1233 // Function-to-pointer conversion (C++ 4.3). 1234 SCS.First = ICK_Function_To_Pointer; 1235 1236 // An lvalue of function type T can be converted to an rvalue of 1237 // type "pointer to T." The result is a pointer to the 1238 // function. (C++ 4.3p1). 1239 FromType = S.Context.getPointerType(FromType); 1240 } else { 1241 // We don't require any conversions for the first step. 1242 SCS.First = ICK_Identity; 1243 } 1244 SCS.setToType(0, FromType); 1245 1246 // The second conversion can be an integral promotion, floating 1247 // point promotion, integral conversion, floating point conversion, 1248 // floating-integral conversion, pointer conversion, 1249 // pointer-to-member conversion, or boolean conversion (C++ 4p1). 1250 // For overloading in C, this can also be a "compatible-type" 1251 // conversion. 1252 bool IncompatibleObjC = false; 1253 ImplicitConversionKind SecondICK = ICK_Identity; 1254 if (S.Context.hasSameUnqualifiedType(FromType, ToType)) { 1255 // The unqualified versions of the types are the same: there's no 1256 // conversion to do. 1257 SCS.Second = ICK_Identity; 1258 } else if (S.IsIntegralPromotion(From, FromType, ToType)) { 1259 // Integral promotion (C++ 4.5). 1260 SCS.Second = ICK_Integral_Promotion; 1261 FromType = ToType.getUnqualifiedType(); 1262 } else if (S.IsFloatingPointPromotion(FromType, ToType)) { 1263 // Floating point promotion (C++ 4.6). 1264 SCS.Second = ICK_Floating_Promotion; 1265 FromType = ToType.getUnqualifiedType(); 1266 } else if (S.IsComplexPromotion(FromType, ToType)) { 1267 // Complex promotion (Clang extension) 1268 SCS.Second = ICK_Complex_Promotion; 1269 FromType = ToType.getUnqualifiedType(); 1270 } else if (ToType->isBooleanType() && 1271 (FromType->isArithmeticType() || 1272 FromType->isAnyPointerType() || 1273 FromType->isBlockPointerType() || 1274 FromType->isMemberPointerType() || 1275 FromType->isNullPtrType())) { 1276 // Boolean conversions (C++ 4.12). 1277 SCS.Second = ICK_Boolean_Conversion; 1278 FromType = S.Context.BoolTy; 1279 } else if (FromType->isIntegralOrUnscopedEnumerationType() && 1280 ToType->isIntegralType(S.Context)) { 1281 // Integral conversions (C++ 4.7). 1282 SCS.Second = ICK_Integral_Conversion; 1283 FromType = ToType.getUnqualifiedType(); 1284 } else if (FromType->isAnyComplexType() && ToType->isComplexType()) { 1285 // Complex conversions (C99 6.3.1.6) 1286 SCS.Second = ICK_Complex_Conversion; 1287 FromType = ToType.getUnqualifiedType(); 1288 } else if ((FromType->isAnyComplexType() && ToType->isArithmeticType()) || 1289 (ToType->isAnyComplexType() && FromType->isArithmeticType())) { 1290 // Complex-real conversions (C99 6.3.1.7) 1291 SCS.Second = ICK_Complex_Real; 1292 FromType = ToType.getUnqualifiedType(); 1293 } else if (FromType->isRealFloatingType() && ToType->isRealFloatingType()) { 1294 // Floating point conversions (C++ 4.8). 1295 SCS.Second = ICK_Floating_Conversion; 1296 FromType = ToType.getUnqualifiedType(); 1297 } else if ((FromType->isRealFloatingType() && 1298 ToType->isIntegralType(S.Context)) || 1299 (FromType->isIntegralOrUnscopedEnumerationType() && 1300 ToType->isRealFloatingType())) { 1301 // Floating-integral conversions (C++ 4.9). 1302 SCS.Second = ICK_Floating_Integral; 1303 FromType = ToType.getUnqualifiedType(); 1304 } else if (S.IsBlockPointerConversion(FromType, ToType, FromType)) { 1305 SCS.Second = ICK_Block_Pointer_Conversion; 1306 } else if (AllowObjCWritebackConversion && 1307 S.isObjCWritebackConversion(FromType, ToType, FromType)) { 1308 SCS.Second = ICK_Writeback_Conversion; 1309 } else if (S.IsPointerConversion(From, FromType, ToType, InOverloadResolution, 1310 FromType, IncompatibleObjC)) { 1311 // Pointer conversions (C++ 4.10). 1312 SCS.Second = ICK_Pointer_Conversion; 1313 SCS.IncompatibleObjC = IncompatibleObjC; 1314 FromType = FromType.getUnqualifiedType(); 1315 } else if (S.IsMemberPointerConversion(From, FromType, ToType, 1316 InOverloadResolution, FromType)) { 1317 // Pointer to member conversions (4.11). 1318 SCS.Second = ICK_Pointer_Member; 1319 } else if (IsVectorConversion(S.Context, FromType, ToType, SecondICK)) { 1320 SCS.Second = SecondICK; 1321 FromType = ToType.getUnqualifiedType(); 1322 } else if (!S.getLangOptions().CPlusPlus && 1323 S.Context.typesAreCompatible(ToType, FromType)) { 1324 // Compatible conversions (Clang extension for C function overloading) 1325 SCS.Second = ICK_Compatible_Conversion; 1326 FromType = ToType.getUnqualifiedType(); 1327 } else if (S.IsNoReturnConversion(FromType, ToType, FromType)) { 1328 // Treat a conversion that strips "noreturn" as an identity conversion. 1329 SCS.Second = ICK_NoReturn_Adjustment; 1330 } else if (IsTransparentUnionStandardConversion(S, From, ToType, 1331 InOverloadResolution, 1332 SCS, CStyle)) { 1333 SCS.Second = ICK_TransparentUnionConversion; 1334 FromType = ToType; 1335 } else { 1336 // No second conversion required. 1337 SCS.Second = ICK_Identity; 1338 } 1339 SCS.setToType(1, FromType); 1340 1341 QualType CanonFrom; 1342 QualType CanonTo; 1343 // The third conversion can be a qualification conversion (C++ 4p1). 1344 bool ObjCLifetimeConversion; 1345 if (S.IsQualificationConversion(FromType, ToType, CStyle, 1346 ObjCLifetimeConversion)) { 1347 SCS.Third = ICK_Qualification; 1348 SCS.QualificationIncludesObjCLifetime = ObjCLifetimeConversion; 1349 FromType = ToType; 1350 CanonFrom = S.Context.getCanonicalType(FromType); 1351 CanonTo = S.Context.getCanonicalType(ToType); 1352 } else { 1353 // No conversion required 1354 SCS.Third = ICK_Identity; 1355 1356 // C++ [over.best.ics]p6: 1357 // [...] Any difference in top-level cv-qualification is 1358 // subsumed by the initialization itself and does not constitute 1359 // a conversion. [...] 1360 CanonFrom = S.Context.getCanonicalType(FromType); 1361 CanonTo = S.Context.getCanonicalType(ToType); 1362 if (CanonFrom.getLocalUnqualifiedType() 1363 == CanonTo.getLocalUnqualifiedType() && 1364 (CanonFrom.getLocalCVRQualifiers() != CanonTo.getLocalCVRQualifiers() 1365 || CanonFrom.getObjCGCAttr() != CanonTo.getObjCGCAttr() 1366 || CanonFrom.getObjCLifetime() != CanonTo.getObjCLifetime())) { 1367 FromType = ToType; 1368 CanonFrom = CanonTo; 1369 } 1370 } 1371 SCS.setToType(2, FromType); 1372 1373 // If we have not converted the argument type to the parameter type, 1374 // this is a bad conversion sequence. 1375 if (CanonFrom != CanonTo) 1376 return false; 1377 1378 return true; 1379} 1380 1381static bool 1382IsTransparentUnionStandardConversion(Sema &S, Expr* From, 1383 QualType &ToType, 1384 bool InOverloadResolution, 1385 StandardConversionSequence &SCS, 1386 bool CStyle) { 1387 1388 const RecordType *UT = ToType->getAsUnionType(); 1389 if (!UT || !UT->getDecl()->hasAttr<TransparentUnionAttr>()) 1390 return false; 1391 // The field to initialize within the transparent union. 1392 RecordDecl *UD = UT->getDecl(); 1393 // It's compatible if the expression matches any of the fields. 1394 for (RecordDecl::field_iterator it = UD->field_begin(), 1395 itend = UD->field_end(); 1396 it != itend; ++it) { 1397 if (IsStandardConversion(S, From, it->getType(), InOverloadResolution, SCS, 1398 CStyle, /*ObjCWritebackConversion=*/false)) { 1399 ToType = it->getType(); 1400 return true; 1401 } 1402 } 1403 return false; 1404} 1405 1406/// IsIntegralPromotion - Determines whether the conversion from the 1407/// expression From (whose potentially-adjusted type is FromType) to 1408/// ToType is an integral promotion (C++ 4.5). If so, returns true and 1409/// sets PromotedType to the promoted type. 1410bool Sema::IsIntegralPromotion(Expr *From, QualType FromType, QualType ToType) { 1411 const BuiltinType *To = ToType->getAs<BuiltinType>(); 1412 // All integers are built-in. 1413 if (!To) { 1414 return false; 1415 } 1416 1417 // An rvalue of type char, signed char, unsigned char, short int, or 1418 // unsigned short int can be converted to an rvalue of type int if 1419 // int can represent all the values of the source type; otherwise, 1420 // the source rvalue can be converted to an rvalue of type unsigned 1421 // int (C++ 4.5p1). 1422 if (FromType->isPromotableIntegerType() && !FromType->isBooleanType() && 1423 !FromType->isEnumeralType()) { 1424 if (// We can promote any signed, promotable integer type to an int 1425 (FromType->isSignedIntegerType() || 1426 // We can promote any unsigned integer type whose size is 1427 // less than int to an int. 1428 (!FromType->isSignedIntegerType() && 1429 Context.getTypeSize(FromType) < Context.getTypeSize(ToType)))) { 1430 return To->getKind() == BuiltinType::Int; 1431 } 1432 1433 return To->getKind() == BuiltinType::UInt; 1434 } 1435 1436 // C++0x [conv.prom]p3: 1437 // A prvalue of an unscoped enumeration type whose underlying type is not 1438 // fixed (7.2) can be converted to an rvalue a prvalue of the first of the 1439 // following types that can represent all the values of the enumeration 1440 // (i.e., the values in the range bmin to bmax as described in 7.2): int, 1441 // unsigned int, long int, unsigned long int, long long int, or unsigned 1442 // long long int. If none of the types in that list can represent all the 1443 // values of the enumeration, an rvalue a prvalue of an unscoped enumeration 1444 // type can be converted to an rvalue a prvalue of the extended integer type 1445 // with lowest integer conversion rank (4.13) greater than the rank of long 1446 // long in which all the values of the enumeration can be represented. If 1447 // there are two such extended types, the signed one is chosen. 1448 if (const EnumType *FromEnumType = FromType->getAs<EnumType>()) { 1449 // C++0x 7.2p9: Note that this implicit enum to int conversion is not 1450 // provided for a scoped enumeration. 1451 if (FromEnumType->getDecl()->isScoped()) 1452 return false; 1453 1454 // We have already pre-calculated the promotion type, so this is trivial. 1455 if (ToType->isIntegerType() && 1456 !RequireCompleteType(From->getLocStart(), FromType, PDiag())) 1457 return Context.hasSameUnqualifiedType(ToType, 1458 FromEnumType->getDecl()->getPromotionType()); 1459 } 1460 1461 // C++0x [conv.prom]p2: 1462 // A prvalue of type char16_t, char32_t, or wchar_t (3.9.1) can be converted 1463 // to an rvalue a prvalue of the first of the following types that can 1464 // represent all the values of its underlying type: int, unsigned int, 1465 // long int, unsigned long int, long long int, or unsigned long long int. 1466 // If none of the types in that list can represent all the values of its 1467 // underlying type, an rvalue a prvalue of type char16_t, char32_t, 1468 // or wchar_t can be converted to an rvalue a prvalue of its underlying 1469 // type. 1470 if (FromType->isAnyCharacterType() && !FromType->isCharType() && 1471 ToType->isIntegerType()) { 1472 // Determine whether the type we're converting from is signed or 1473 // unsigned. 1474 bool FromIsSigned = FromType->isSignedIntegerType(); 1475 uint64_t FromSize = Context.getTypeSize(FromType); 1476 1477 // The types we'll try to promote to, in the appropriate 1478 // order. Try each of these types. 1479 QualType PromoteTypes[6] = { 1480 Context.IntTy, Context.UnsignedIntTy, 1481 Context.LongTy, Context.UnsignedLongTy , 1482 Context.LongLongTy, Context.UnsignedLongLongTy 1483 }; 1484 for (int Idx = 0; Idx < 6; ++Idx) { 1485 uint64_t ToSize = Context.getTypeSize(PromoteTypes[Idx]); 1486 if (FromSize < ToSize || 1487 (FromSize == ToSize && 1488 FromIsSigned == PromoteTypes[Idx]->isSignedIntegerType())) { 1489 // We found the type that we can promote to. If this is the 1490 // type we wanted, we have a promotion. Otherwise, no 1491 // promotion. 1492 return Context.hasSameUnqualifiedType(ToType, PromoteTypes[Idx]); 1493 } 1494 } 1495 } 1496 1497 // An rvalue for an integral bit-field (9.6) can be converted to an 1498 // rvalue of type int if int can represent all the values of the 1499 // bit-field; otherwise, it can be converted to unsigned int if 1500 // unsigned int can represent all the values of the bit-field. If 1501 // the bit-field is larger yet, no integral promotion applies to 1502 // it. If the bit-field has an enumerated type, it is treated as any 1503 // other value of that type for promotion purposes (C++ 4.5p3). 1504 // FIXME: We should delay checking of bit-fields until we actually perform the 1505 // conversion. 1506 using llvm::APSInt; 1507 if (From) 1508 if (FieldDecl *MemberDecl = From->getBitField()) { 1509 APSInt BitWidth; 1510 if (FromType->isIntegralType(Context) && 1511 MemberDecl->getBitWidth()->isIntegerConstantExpr(BitWidth, Context)) { 1512 APSInt ToSize(BitWidth.getBitWidth(), BitWidth.isUnsigned()); 1513 ToSize = Context.getTypeSize(ToType); 1514 1515 // Are we promoting to an int from a bitfield that fits in an int? 1516 if (BitWidth < ToSize || 1517 (FromType->isSignedIntegerType() && BitWidth <= ToSize)) { 1518 return To->getKind() == BuiltinType::Int; 1519 } 1520 1521 // Are we promoting to an unsigned int from an unsigned bitfield 1522 // that fits into an unsigned int? 1523 if (FromType->isUnsignedIntegerType() && BitWidth <= ToSize) { 1524 return To->getKind() == BuiltinType::UInt; 1525 } 1526 1527 return false; 1528 } 1529 } 1530 1531 // An rvalue of type bool can be converted to an rvalue of type int, 1532 // with false becoming zero and true becoming one (C++ 4.5p4). 1533 if (FromType->isBooleanType() && To->getKind() == BuiltinType::Int) { 1534 return true; 1535 } 1536 1537 return false; 1538} 1539 1540/// IsFloatingPointPromotion - Determines whether the conversion from 1541/// FromType to ToType is a floating point promotion (C++ 4.6). If so, 1542/// returns true and sets PromotedType to the promoted type. 1543bool Sema::IsFloatingPointPromotion(QualType FromType, QualType ToType) { 1544 if (const BuiltinType *FromBuiltin = FromType->getAs<BuiltinType>()) 1545 if (const BuiltinType *ToBuiltin = ToType->getAs<BuiltinType>()) { 1546 /// An rvalue of type float can be converted to an rvalue of type 1547 /// double. (C++ 4.6p1). 1548 if (FromBuiltin->getKind() == BuiltinType::Float && 1549 ToBuiltin->getKind() == BuiltinType::Double) 1550 return true; 1551 1552 // C99 6.3.1.5p1: 1553 // When a float is promoted to double or long double, or a 1554 // double is promoted to long double [...]. 1555 if (!getLangOptions().CPlusPlus && 1556 (FromBuiltin->getKind() == BuiltinType::Float || 1557 FromBuiltin->getKind() == BuiltinType::Double) && 1558 (ToBuiltin->getKind() == BuiltinType::LongDouble)) 1559 return true; 1560 1561 // Half can be promoted to float. 1562 if (FromBuiltin->getKind() == BuiltinType::Half && 1563 ToBuiltin->getKind() == BuiltinType::Float) 1564 return true; 1565 } 1566 1567 return false; 1568} 1569 1570/// \brief Determine if a conversion is a complex promotion. 1571/// 1572/// A complex promotion is defined as a complex -> complex conversion 1573/// where the conversion between the underlying real types is a 1574/// floating-point or integral promotion. 1575bool Sema::IsComplexPromotion(QualType FromType, QualType ToType) { 1576 const ComplexType *FromComplex = FromType->getAs<ComplexType>(); 1577 if (!FromComplex) 1578 return false; 1579 1580 const ComplexType *ToComplex = ToType->getAs<ComplexType>(); 1581 if (!ToComplex) 1582 return false; 1583 1584 return IsFloatingPointPromotion(FromComplex->getElementType(), 1585 ToComplex->getElementType()) || 1586 IsIntegralPromotion(0, FromComplex->getElementType(), 1587 ToComplex->getElementType()); 1588} 1589 1590/// BuildSimilarlyQualifiedPointerType - In a pointer conversion from 1591/// the pointer type FromPtr to a pointer to type ToPointee, with the 1592/// same type qualifiers as FromPtr has on its pointee type. ToType, 1593/// if non-empty, will be a pointer to ToType that may or may not have 1594/// the right set of qualifiers on its pointee. 1595/// 1596static QualType 1597BuildSimilarlyQualifiedPointerType(const Type *FromPtr, 1598 QualType ToPointee, QualType ToType, 1599 ASTContext &Context, 1600 bool StripObjCLifetime = false) { 1601 assert((FromPtr->getTypeClass() == Type::Pointer || 1602 FromPtr->getTypeClass() == Type::ObjCObjectPointer) && 1603 "Invalid similarly-qualified pointer type"); 1604 1605 /// Conversions to 'id' subsume cv-qualifier conversions. 1606 if (ToType->isObjCIdType() || ToType->isObjCQualifiedIdType()) 1607 return ToType.getUnqualifiedType(); 1608 1609 QualType CanonFromPointee 1610 = Context.getCanonicalType(FromPtr->getPointeeType()); 1611 QualType CanonToPointee = Context.getCanonicalType(ToPointee); 1612 Qualifiers Quals = CanonFromPointee.getQualifiers(); 1613 1614 if (StripObjCLifetime) 1615 Quals.removeObjCLifetime(); 1616 1617 // Exact qualifier match -> return the pointer type we're converting to. 1618 if (CanonToPointee.getLocalQualifiers() == Quals) { 1619 // ToType is exactly what we need. Return it. 1620 if (!ToType.isNull()) 1621 return ToType.getUnqualifiedType(); 1622 1623 // Build a pointer to ToPointee. It has the right qualifiers 1624 // already. 1625 if (isa<ObjCObjectPointerType>(ToType)) 1626 return Context.getObjCObjectPointerType(ToPointee); 1627 return Context.getPointerType(ToPointee); 1628 } 1629 1630 // Just build a canonical type that has the right qualifiers. 1631 QualType QualifiedCanonToPointee 1632 = Context.getQualifiedType(CanonToPointee.getLocalUnqualifiedType(), Quals); 1633 1634 if (isa<ObjCObjectPointerType>(ToType)) 1635 return Context.getObjCObjectPointerType(QualifiedCanonToPointee); 1636 return Context.getPointerType(QualifiedCanonToPointee); 1637} 1638 1639static bool isNullPointerConstantForConversion(Expr *Expr, 1640 bool InOverloadResolution, 1641 ASTContext &Context) { 1642 // Handle value-dependent integral null pointer constants correctly. 1643 // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#903 1644 if (Expr->isValueDependent() && !Expr->isTypeDependent() && 1645 Expr->getType()->isIntegerType() && !Expr->getType()->isEnumeralType()) 1646 return !InOverloadResolution; 1647 1648 return Expr->isNullPointerConstant(Context, 1649 InOverloadResolution? Expr::NPC_ValueDependentIsNotNull 1650 : Expr::NPC_ValueDependentIsNull); 1651} 1652 1653/// IsPointerConversion - Determines whether the conversion of the 1654/// expression From, which has the (possibly adjusted) type FromType, 1655/// can be converted to the type ToType via a pointer conversion (C++ 1656/// 4.10). If so, returns true and places the converted type (that 1657/// might differ from ToType in its cv-qualifiers at some level) into 1658/// ConvertedType. 1659/// 1660/// This routine also supports conversions to and from block pointers 1661/// and conversions with Objective-C's 'id', 'id<protocols...>', and 1662/// pointers to interfaces. FIXME: Once we've determined the 1663/// appropriate overloading rules for Objective-C, we may want to 1664/// split the Objective-C checks into a different routine; however, 1665/// GCC seems to consider all of these conversions to be pointer 1666/// conversions, so for now they live here. IncompatibleObjC will be 1667/// set if the conversion is an allowed Objective-C conversion that 1668/// should result in a warning. 1669bool Sema::IsPointerConversion(Expr *From, QualType FromType, QualType ToType, 1670 bool InOverloadResolution, 1671 QualType& ConvertedType, 1672 bool &IncompatibleObjC) { 1673 IncompatibleObjC = false; 1674 if (isObjCPointerConversion(FromType, ToType, ConvertedType, 1675 IncompatibleObjC)) 1676 return true; 1677 1678 // Conversion from a null pointer constant to any Objective-C pointer type. 1679 if (ToType->isObjCObjectPointerType() && 1680 isNullPointerConstantForConversion(From, InOverloadResolution, Context)) { 1681 ConvertedType = ToType; 1682 return true; 1683 } 1684 1685 // Blocks: Block pointers can be converted to void*. 1686 if (FromType->isBlockPointerType() && ToType->isPointerType() && 1687 ToType->getAs<PointerType>()->getPointeeType()->isVoidType()) { 1688 ConvertedType = ToType; 1689 return true; 1690 } 1691 // Blocks: A null pointer constant can be converted to a block 1692 // pointer type. 1693 if (ToType->isBlockPointerType() && 1694 isNullPointerConstantForConversion(From, InOverloadResolution, Context)) { 1695 ConvertedType = ToType; 1696 return true; 1697 } 1698 1699 // If the left-hand-side is nullptr_t, the right side can be a null 1700 // pointer constant. 1701 if (ToType->isNullPtrType() && 1702 isNullPointerConstantForConversion(From, InOverloadResolution, Context)) { 1703 ConvertedType = ToType; 1704 return true; 1705 } 1706 1707 const PointerType* ToTypePtr = ToType->getAs<PointerType>(); 1708 if (!ToTypePtr) 1709 return false; 1710 1711 // A null pointer constant can be converted to a pointer type (C++ 4.10p1). 1712 if (isNullPointerConstantForConversion(From, InOverloadResolution, Context)) { 1713 ConvertedType = ToType; 1714 return true; 1715 } 1716 1717 // Beyond this point, both types need to be pointers 1718 // , including objective-c pointers. 1719 QualType ToPointeeType = ToTypePtr->getPointeeType(); 1720 if (FromType->isObjCObjectPointerType() && ToPointeeType->isVoidType() && 1721 !getLangOptions().ObjCAutoRefCount) { 1722 ConvertedType = BuildSimilarlyQualifiedPointerType( 1723 FromType->getAs<ObjCObjectPointerType>(), 1724 ToPointeeType, 1725 ToType, Context); 1726 return true; 1727 } 1728 const PointerType *FromTypePtr = FromType->getAs<PointerType>(); 1729 if (!FromTypePtr) 1730 return false; 1731 1732 QualType FromPointeeType = FromTypePtr->getPointeeType(); 1733 1734 // If the unqualified pointee types are the same, this can't be a 1735 // pointer conversion, so don't do all of the work below. 1736 if (Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType)) 1737 return false; 1738 1739 // An rvalue of type "pointer to cv T," where T is an object type, 1740 // can be converted to an rvalue of type "pointer to cv void" (C++ 1741 // 4.10p2). 1742 if (FromPointeeType->isIncompleteOrObjectType() && 1743 ToPointeeType->isVoidType()) { 1744 ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr, 1745 ToPointeeType, 1746 ToType, Context, 1747 /*StripObjCLifetime=*/true); 1748 return true; 1749 } 1750 1751 // MSVC allows implicit function to void* type conversion. 1752 if (getLangOptions().MicrosoftExt && FromPointeeType->isFunctionType() && 1753 ToPointeeType->isVoidType()) { 1754 ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr, 1755 ToPointeeType, 1756 ToType, Context); 1757 return true; 1758 } 1759 1760 // When we're overloading in C, we allow a special kind of pointer 1761 // conversion for compatible-but-not-identical pointee types. 1762 if (!getLangOptions().CPlusPlus && 1763 Context.typesAreCompatible(FromPointeeType, ToPointeeType)) { 1764 ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr, 1765 ToPointeeType, 1766 ToType, Context); 1767 return true; 1768 } 1769 1770 // C++ [conv.ptr]p3: 1771 // 1772 // An rvalue of type "pointer to cv D," where D is a class type, 1773 // can be converted to an rvalue of type "pointer to cv B," where 1774 // B is a base class (clause 10) of D. If B is an inaccessible 1775 // (clause 11) or ambiguous (10.2) base class of D, a program that 1776 // necessitates this conversion is ill-formed. The result of the 1777 // conversion is a pointer to the base class sub-object of the 1778 // derived class object. The null pointer value is converted to 1779 // the null pointer value of the destination type. 1780 // 1781 // Note that we do not check for ambiguity or inaccessibility 1782 // here. That is handled by CheckPointerConversion. 1783 if (getLangOptions().CPlusPlus && 1784 FromPointeeType->isRecordType() && ToPointeeType->isRecordType() && 1785 !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType) && 1786 !RequireCompleteType(From->getLocStart(), FromPointeeType, PDiag()) && 1787 IsDerivedFrom(FromPointeeType, ToPointeeType)) { 1788 ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr, 1789 ToPointeeType, 1790 ToType, Context); 1791 return true; 1792 } 1793 1794 if (FromPointeeType->isVectorType() && ToPointeeType->isVectorType() && 1795 Context.areCompatibleVectorTypes(FromPointeeType, ToPointeeType)) { 1796 ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr, 1797 ToPointeeType, 1798 ToType, Context); 1799 return true; 1800 } 1801 1802 return false; 1803} 1804 1805/// \brief Adopt the given qualifiers for the given type. 1806static QualType AdoptQualifiers(ASTContext &Context, QualType T, Qualifiers Qs){ 1807 Qualifiers TQs = T.getQualifiers(); 1808 1809 // Check whether qualifiers already match. 1810 if (TQs == Qs) 1811 return T; 1812 1813 if (Qs.compatiblyIncludes(TQs)) 1814 return Context.getQualifiedType(T, Qs); 1815 1816 return Context.getQualifiedType(T.getUnqualifiedType(), Qs); 1817} 1818 1819/// isObjCPointerConversion - Determines whether this is an 1820/// Objective-C pointer conversion. Subroutine of IsPointerConversion, 1821/// with the same arguments and return values. 1822bool Sema::isObjCPointerConversion(QualType FromType, QualType ToType, 1823 QualType& ConvertedType, 1824 bool &IncompatibleObjC) { 1825 if (!getLangOptions().ObjC1) 1826 return false; 1827 1828 // The set of qualifiers on the type we're converting from. 1829 Qualifiers FromQualifiers = FromType.getQualifiers(); 1830 1831 // First, we handle all conversions on ObjC object pointer types. 1832 const ObjCObjectPointerType* ToObjCPtr = 1833 ToType->getAs<ObjCObjectPointerType>(); 1834 const ObjCObjectPointerType *FromObjCPtr = 1835 FromType->getAs<ObjCObjectPointerType>(); 1836 1837 if (ToObjCPtr && FromObjCPtr) { 1838 // If the pointee types are the same (ignoring qualifications), 1839 // then this is not a pointer conversion. 1840 if (Context.hasSameUnqualifiedType(ToObjCPtr->getPointeeType(), 1841 FromObjCPtr->getPointeeType())) 1842 return false; 1843 1844 // Check for compatible 1845 // Objective C++: We're able to convert between "id" or "Class" and a 1846 // pointer to any interface (in both directions). 1847 if (ToObjCPtr->isObjCBuiltinType() && FromObjCPtr->isObjCBuiltinType()) { 1848 ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers); 1849 return true; 1850 } 1851 // Conversions with Objective-C's id<...>. 1852 if ((FromObjCPtr->isObjCQualifiedIdType() || 1853 ToObjCPtr->isObjCQualifiedIdType()) && 1854 Context.ObjCQualifiedIdTypesAreCompatible(ToType, FromType, 1855 /*compare=*/false)) { 1856 ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers); 1857 return true; 1858 } 1859 // Objective C++: We're able to convert from a pointer to an 1860 // interface to a pointer to a different interface. 1861 if (Context.canAssignObjCInterfaces(ToObjCPtr, FromObjCPtr)) { 1862 const ObjCInterfaceType* LHS = ToObjCPtr->getInterfaceType(); 1863 const ObjCInterfaceType* RHS = FromObjCPtr->getInterfaceType(); 1864 if (getLangOptions().CPlusPlus && LHS && RHS && 1865 !ToObjCPtr->getPointeeType().isAtLeastAsQualifiedAs( 1866 FromObjCPtr->getPointeeType())) 1867 return false; 1868 ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr, 1869 ToObjCPtr->getPointeeType(), 1870 ToType, Context); 1871 ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers); 1872 return true; 1873 } 1874 1875 if (Context.canAssignObjCInterfaces(FromObjCPtr, ToObjCPtr)) { 1876 // Okay: this is some kind of implicit downcast of Objective-C 1877 // interfaces, which is permitted. However, we're going to 1878 // complain about it. 1879 IncompatibleObjC = true; 1880 ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr, 1881 ToObjCPtr->getPointeeType(), 1882 ToType, Context); 1883 ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers); 1884 return true; 1885 } 1886 } 1887 // Beyond this point, both types need to be C pointers or block pointers. 1888 QualType ToPointeeType; 1889 if (const PointerType *ToCPtr = ToType->getAs<PointerType>()) 1890 ToPointeeType = ToCPtr->getPointeeType(); 1891 else if (const BlockPointerType *ToBlockPtr = 1892 ToType->getAs<BlockPointerType>()) { 1893 // Objective C++: We're able to convert from a pointer to any object 1894 // to a block pointer type. 1895 if (FromObjCPtr && FromObjCPtr->isObjCBuiltinType()) { 1896 ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers); 1897 return true; 1898 } 1899 ToPointeeType = ToBlockPtr->getPointeeType(); 1900 } 1901 else if (FromType->getAs<BlockPointerType>() && 1902 ToObjCPtr && ToObjCPtr->isObjCBuiltinType()) { 1903 // Objective C++: We're able to convert from a block pointer type to a 1904 // pointer to any object. 1905 ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers); 1906 return true; 1907 } 1908 else 1909 return false; 1910 1911 QualType FromPointeeType; 1912 if (const PointerType *FromCPtr = FromType->getAs<PointerType>()) 1913 FromPointeeType = FromCPtr->getPointeeType(); 1914 else if (const BlockPointerType *FromBlockPtr = 1915 FromType->getAs<BlockPointerType>()) 1916 FromPointeeType = FromBlockPtr->getPointeeType(); 1917 else 1918 return false; 1919 1920 // If we have pointers to pointers, recursively check whether this 1921 // is an Objective-C conversion. 1922 if (FromPointeeType->isPointerType() && ToPointeeType->isPointerType() && 1923 isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType, 1924 IncompatibleObjC)) { 1925 // We always complain about this conversion. 1926 IncompatibleObjC = true; 1927 ConvertedType = Context.getPointerType(ConvertedType); 1928 ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers); 1929 return true; 1930 } 1931 // Allow conversion of pointee being objective-c pointer to another one; 1932 // as in I* to id. 1933 if (FromPointeeType->getAs<ObjCObjectPointerType>() && 1934 ToPointeeType->getAs<ObjCObjectPointerType>() && 1935 isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType, 1936 IncompatibleObjC)) { 1937 1938 ConvertedType = Context.getPointerType(ConvertedType); 1939 ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers); 1940 return true; 1941 } 1942 1943 // If we have pointers to functions or blocks, check whether the only 1944 // differences in the argument and result types are in Objective-C 1945 // pointer conversions. If so, we permit the conversion (but 1946 // complain about it). 1947 const FunctionProtoType *FromFunctionType 1948 = FromPointeeType->getAs<FunctionProtoType>(); 1949 const FunctionProtoType *ToFunctionType 1950 = ToPointeeType->getAs<FunctionProtoType>(); 1951 if (FromFunctionType && ToFunctionType) { 1952 // If the function types are exactly the same, this isn't an 1953 // Objective-C pointer conversion. 1954 if (Context.getCanonicalType(FromPointeeType) 1955 == Context.getCanonicalType(ToPointeeType)) 1956 return false; 1957 1958 // Perform the quick checks that will tell us whether these 1959 // function types are obviously different. 1960 if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() || 1961 FromFunctionType->isVariadic() != ToFunctionType->isVariadic() || 1962 FromFunctionType->getTypeQuals() != ToFunctionType->getTypeQuals()) 1963 return false; 1964 1965 bool HasObjCConversion = false; 1966 if (Context.getCanonicalType(FromFunctionType->getResultType()) 1967 == Context.getCanonicalType(ToFunctionType->getResultType())) { 1968 // Okay, the types match exactly. Nothing to do. 1969 } else if (isObjCPointerConversion(FromFunctionType->getResultType(), 1970 ToFunctionType->getResultType(), 1971 ConvertedType, IncompatibleObjC)) { 1972 // Okay, we have an Objective-C pointer conversion. 1973 HasObjCConversion = true; 1974 } else { 1975 // Function types are too different. Abort. 1976 return false; 1977 } 1978 1979 // Check argument types. 1980 for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs(); 1981 ArgIdx != NumArgs; ++ArgIdx) { 1982 QualType FromArgType = FromFunctionType->getArgType(ArgIdx); 1983 QualType ToArgType = ToFunctionType->getArgType(ArgIdx); 1984 if (Context.getCanonicalType(FromArgType) 1985 == Context.getCanonicalType(ToArgType)) { 1986 // Okay, the types match exactly. Nothing to do. 1987 } else if (isObjCPointerConversion(FromArgType, ToArgType, 1988 ConvertedType, IncompatibleObjC)) { 1989 // Okay, we have an Objective-C pointer conversion. 1990 HasObjCConversion = true; 1991 } else { 1992 // Argument types are too different. Abort. 1993 return false; 1994 } 1995 } 1996 1997 if (HasObjCConversion) { 1998 // We had an Objective-C conversion. Allow this pointer 1999 // conversion, but complain about it. 2000 ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers); 2001 IncompatibleObjC = true; 2002 return true; 2003 } 2004 } 2005 2006 return false; 2007} 2008 2009/// \brief Determine whether this is an Objective-C writeback conversion, 2010/// used for parameter passing when performing automatic reference counting. 2011/// 2012/// \param FromType The type we're converting form. 2013/// 2014/// \param ToType The type we're converting to. 2015/// 2016/// \param ConvertedType The type that will be produced after applying 2017/// this conversion. 2018bool Sema::isObjCWritebackConversion(QualType FromType, QualType ToType, 2019 QualType &ConvertedType) { 2020 if (!getLangOptions().ObjCAutoRefCount || 2021 Context.hasSameUnqualifiedType(FromType, ToType)) 2022 return false; 2023 2024 // Parameter must be a pointer to __autoreleasing (with no other qualifiers). 2025 QualType ToPointee; 2026 if (const PointerType *ToPointer = ToType->getAs<PointerType>()) 2027 ToPointee = ToPointer->getPointeeType(); 2028 else 2029 return false; 2030 2031 Qualifiers ToQuals = ToPointee.getQualifiers(); 2032 if (!ToPointee->isObjCLifetimeType() || 2033 ToQuals.getObjCLifetime() != Qualifiers::OCL_Autoreleasing || 2034 !ToQuals.withoutObjCGLifetime().empty()) 2035 return false; 2036 2037 // Argument must be a pointer to __strong to __weak. 2038 QualType FromPointee; 2039 if (const PointerType *FromPointer = FromType->getAs<PointerType>()) 2040 FromPointee = FromPointer->getPointeeType(); 2041 else 2042 return false; 2043 2044 Qualifiers FromQuals = FromPointee.getQualifiers(); 2045 if (!FromPointee->isObjCLifetimeType() || 2046 (FromQuals.getObjCLifetime() != Qualifiers::OCL_Strong && 2047 FromQuals.getObjCLifetime() != Qualifiers::OCL_Weak)) 2048 return false; 2049 2050 // Make sure that we have compatible qualifiers. 2051 FromQuals.setObjCLifetime(Qualifiers::OCL_Autoreleasing); 2052 if (!ToQuals.compatiblyIncludes(FromQuals)) 2053 return false; 2054 2055 // Remove qualifiers from the pointee type we're converting from; they 2056 // aren't used in the compatibility check belong, and we'll be adding back 2057 // qualifiers (with __autoreleasing) if the compatibility check succeeds. 2058 FromPointee = FromPointee.getUnqualifiedType(); 2059 2060 // The unqualified form of the pointee types must be compatible. 2061 ToPointee = ToPointee.getUnqualifiedType(); 2062 bool IncompatibleObjC; 2063 if (Context.typesAreCompatible(FromPointee, ToPointee)) 2064 FromPointee = ToPointee; 2065 else if (!isObjCPointerConversion(FromPointee, ToPointee, FromPointee, 2066 IncompatibleObjC)) 2067 return false; 2068 2069 /// \brief Construct the type we're converting to, which is a pointer to 2070 /// __autoreleasing pointee. 2071 FromPointee = Context.getQualifiedType(FromPointee, FromQuals); 2072 ConvertedType = Context.getPointerType(FromPointee); 2073 return true; 2074} 2075 2076bool Sema::IsBlockPointerConversion(QualType FromType, QualType ToType, 2077 QualType& ConvertedType) { 2078 QualType ToPointeeType; 2079 if (const BlockPointerType *ToBlockPtr = 2080 ToType->getAs<BlockPointerType>()) 2081 ToPointeeType = ToBlockPtr->getPointeeType(); 2082 else 2083 return false; 2084 2085 QualType FromPointeeType; 2086 if (const BlockPointerType *FromBlockPtr = 2087 FromType->getAs<BlockPointerType>()) 2088 FromPointeeType = FromBlockPtr->getPointeeType(); 2089 else 2090 return false; 2091 // We have pointer to blocks, check whether the only 2092 // differences in the argument and result types are in Objective-C 2093 // pointer conversions. If so, we permit the conversion. 2094 2095 const FunctionProtoType *FromFunctionType 2096 = FromPointeeType->getAs<FunctionProtoType>(); 2097 const FunctionProtoType *ToFunctionType 2098 = ToPointeeType->getAs<FunctionProtoType>(); 2099 2100 if (!FromFunctionType || !ToFunctionType) 2101 return false; 2102 2103 if (Context.hasSameType(FromPointeeType, ToPointeeType)) 2104 return true; 2105 2106 // Perform the quick checks that will tell us whether these 2107 // function types are obviously different. 2108 if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() || 2109 FromFunctionType->isVariadic() != ToFunctionType->isVariadic()) 2110 return false; 2111 2112 FunctionType::ExtInfo FromEInfo = FromFunctionType->getExtInfo(); 2113 FunctionType::ExtInfo ToEInfo = ToFunctionType->getExtInfo(); 2114 if (FromEInfo != ToEInfo) 2115 return false; 2116 2117 bool IncompatibleObjC = false; 2118 if (Context.hasSameType(FromFunctionType->getResultType(), 2119 ToFunctionType->getResultType())) { 2120 // Okay, the types match exactly. Nothing to do. 2121 } else { 2122 QualType RHS = FromFunctionType->getResultType(); 2123 QualType LHS = ToFunctionType->getResultType(); 2124 if ((!getLangOptions().CPlusPlus || !RHS->isRecordType()) && 2125 !RHS.hasQualifiers() && LHS.hasQualifiers()) 2126 LHS = LHS.getUnqualifiedType(); 2127 2128 if (Context.hasSameType(RHS,LHS)) { 2129 // OK exact match. 2130 } else if (isObjCPointerConversion(RHS, LHS, 2131 ConvertedType, IncompatibleObjC)) { 2132 if (IncompatibleObjC) 2133 return false; 2134 // Okay, we have an Objective-C pointer conversion. 2135 } 2136 else 2137 return false; 2138 } 2139 2140 // Check argument types. 2141 for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs(); 2142 ArgIdx != NumArgs; ++ArgIdx) { 2143 IncompatibleObjC = false; 2144 QualType FromArgType = FromFunctionType->getArgType(ArgIdx); 2145 QualType ToArgType = ToFunctionType->getArgType(ArgIdx); 2146 if (Context.hasSameType(FromArgType, ToArgType)) { 2147 // Okay, the types match exactly. Nothing to do. 2148 } else if (isObjCPointerConversion(ToArgType, FromArgType, 2149 ConvertedType, IncompatibleObjC)) { 2150 if (IncompatibleObjC) 2151 return false; 2152 // Okay, we have an Objective-C pointer conversion. 2153 } else 2154 // Argument types are too different. Abort. 2155 return false; 2156 } 2157 if (LangOpts.ObjCAutoRefCount && 2158 !Context.FunctionTypesMatchOnNSConsumedAttrs(FromFunctionType, 2159 ToFunctionType)) 2160 return false; 2161 2162 ConvertedType = ToType; 2163 return true; 2164} 2165 2166/// FunctionArgTypesAreEqual - This routine checks two function proto types 2167/// for equlity of their argument types. Caller has already checked that 2168/// they have same number of arguments. This routine assumes that Objective-C 2169/// pointer types which only differ in their protocol qualifiers are equal. 2170bool Sema::FunctionArgTypesAreEqual(const FunctionProtoType *OldType, 2171 const FunctionProtoType *NewType) { 2172 if (!getLangOptions().ObjC1) 2173 return std::equal(OldType->arg_type_begin(), OldType->arg_type_end(), 2174 NewType->arg_type_begin()); 2175 2176 for (FunctionProtoType::arg_type_iterator O = OldType->arg_type_begin(), 2177 N = NewType->arg_type_begin(), 2178 E = OldType->arg_type_end(); O && (O != E); ++O, ++N) { 2179 QualType ToType = (*O); 2180 QualType FromType = (*N); 2181 if (ToType != FromType) { 2182 if (const PointerType *PTTo = ToType->getAs<PointerType>()) { 2183 if (const PointerType *PTFr = FromType->getAs<PointerType>()) 2184 if ((PTTo->getPointeeType()->isObjCQualifiedIdType() && 2185 PTFr->getPointeeType()->isObjCQualifiedIdType()) || 2186 (PTTo->getPointeeType()->isObjCQualifiedClassType() && 2187 PTFr->getPointeeType()->isObjCQualifiedClassType())) 2188 continue; 2189 } 2190 else if (const ObjCObjectPointerType *PTTo = 2191 ToType->getAs<ObjCObjectPointerType>()) { 2192 if (const ObjCObjectPointerType *PTFr = 2193 FromType->getAs<ObjCObjectPointerType>()) 2194 if (PTTo->getInterfaceDecl() == PTFr->getInterfaceDecl()) 2195 continue; 2196 } 2197 return false; 2198 } 2199 } 2200 return true; 2201} 2202 2203/// CheckPointerConversion - Check the pointer conversion from the 2204/// expression From to the type ToType. This routine checks for 2205/// ambiguous or inaccessible derived-to-base pointer 2206/// conversions for which IsPointerConversion has already returned 2207/// true. It returns true and produces a diagnostic if there was an 2208/// error, or returns false otherwise. 2209bool Sema::CheckPointerConversion(Expr *From, QualType ToType, 2210 CastKind &Kind, 2211 CXXCastPath& BasePath, 2212 bool IgnoreBaseAccess) { 2213 QualType FromType = From->getType(); 2214 bool IsCStyleOrFunctionalCast = IgnoreBaseAccess; 2215 2216 Kind = CK_BitCast; 2217 2218 if (!IsCStyleOrFunctionalCast && 2219 Context.hasSameUnqualifiedType(From->getType(), Context.BoolTy) && 2220 From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull)) 2221 DiagRuntimeBehavior(From->getExprLoc(), From, 2222 PDiag(diag::warn_impcast_bool_to_null_pointer) 2223 << ToType << From->getSourceRange()); 2224 2225 if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) { 2226 if (const PointerType *FromPtrType = FromType->getAs<PointerType>()) { 2227 QualType FromPointeeType = FromPtrType->getPointeeType(), 2228 ToPointeeType = ToPtrType->getPointeeType(); 2229 2230 if (FromPointeeType->isRecordType() && ToPointeeType->isRecordType() && 2231 !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType)) { 2232 // We must have a derived-to-base conversion. Check an 2233 // ambiguous or inaccessible conversion. 2234 if (CheckDerivedToBaseConversion(FromPointeeType, ToPointeeType, 2235 From->getExprLoc(), 2236 From->getSourceRange(), &BasePath, 2237 IgnoreBaseAccess)) 2238 return true; 2239 2240 // The conversion was successful. 2241 Kind = CK_DerivedToBase; 2242 } 2243 } 2244 } else if (const ObjCObjectPointerType *ToPtrType = 2245 ToType->getAs<ObjCObjectPointerType>()) { 2246 if (const ObjCObjectPointerType *FromPtrType = 2247 FromType->getAs<ObjCObjectPointerType>()) { 2248 // Objective-C++ conversions are always okay. 2249 // FIXME: We should have a different class of conversions for the 2250 // Objective-C++ implicit conversions. 2251 if (FromPtrType->isObjCBuiltinType() || ToPtrType->isObjCBuiltinType()) 2252 return false; 2253 } else if (FromType->isBlockPointerType()) { 2254 Kind = CK_BlockPointerToObjCPointerCast; 2255 } else { 2256 Kind = CK_CPointerToObjCPointerCast; 2257 } 2258 } else if (ToType->isBlockPointerType()) { 2259 if (!FromType->isBlockPointerType()) 2260 Kind = CK_AnyPointerToBlockPointerCast; 2261 } 2262 2263 // We shouldn't fall into this case unless it's valid for other 2264 // reasons. 2265 if (From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull)) 2266 Kind = CK_NullToPointer; 2267 2268 return false; 2269} 2270 2271/// IsMemberPointerConversion - Determines whether the conversion of the 2272/// expression From, which has the (possibly adjusted) type FromType, can be 2273/// converted to the type ToType via a member pointer conversion (C++ 4.11). 2274/// If so, returns true and places the converted type (that might differ from 2275/// ToType in its cv-qualifiers at some level) into ConvertedType. 2276bool Sema::IsMemberPointerConversion(Expr *From, QualType FromType, 2277 QualType ToType, 2278 bool InOverloadResolution, 2279 QualType &ConvertedType) { 2280 const MemberPointerType *ToTypePtr = ToType->getAs<MemberPointerType>(); 2281 if (!ToTypePtr) 2282 return false; 2283 2284 // A null pointer constant can be converted to a member pointer (C++ 4.11p1) 2285 if (From->isNullPointerConstant(Context, 2286 InOverloadResolution? Expr::NPC_ValueDependentIsNotNull 2287 : Expr::NPC_ValueDependentIsNull)) { 2288 ConvertedType = ToType; 2289 return true; 2290 } 2291 2292 // Otherwise, both types have to be member pointers. 2293 const MemberPointerType *FromTypePtr = FromType->getAs<MemberPointerType>(); 2294 if (!FromTypePtr) 2295 return false; 2296 2297 // A pointer to member of B can be converted to a pointer to member of D, 2298 // where D is derived from B (C++ 4.11p2). 2299 QualType FromClass(FromTypePtr->getClass(), 0); 2300 QualType ToClass(ToTypePtr->getClass(), 0); 2301 2302 if (!Context.hasSameUnqualifiedType(FromClass, ToClass) && 2303 !RequireCompleteType(From->getLocStart(), ToClass, PDiag()) && 2304 IsDerivedFrom(ToClass, FromClass)) { 2305 ConvertedType = Context.getMemberPointerType(FromTypePtr->getPointeeType(), 2306 ToClass.getTypePtr()); 2307 return true; 2308 } 2309 2310 return false; 2311} 2312 2313/// CheckMemberPointerConversion - Check the member pointer conversion from the 2314/// expression From to the type ToType. This routine checks for ambiguous or 2315/// virtual or inaccessible base-to-derived member pointer conversions 2316/// for which IsMemberPointerConversion has already returned true. It returns 2317/// true and produces a diagnostic if there was an error, or returns false 2318/// otherwise. 2319bool Sema::CheckMemberPointerConversion(Expr *From, QualType ToType, 2320 CastKind &Kind, 2321 CXXCastPath &BasePath, 2322 bool IgnoreBaseAccess) { 2323 QualType FromType = From->getType(); 2324 const MemberPointerType *FromPtrType = FromType->getAs<MemberPointerType>(); 2325 if (!FromPtrType) { 2326 // This must be a null pointer to member pointer conversion 2327 assert(From->isNullPointerConstant(Context, 2328 Expr::NPC_ValueDependentIsNull) && 2329 "Expr must be null pointer constant!"); 2330 Kind = CK_NullToMemberPointer; 2331 return false; 2332 } 2333 2334 const MemberPointerType *ToPtrType = ToType->getAs<MemberPointerType>(); 2335 assert(ToPtrType && "No member pointer cast has a target type " 2336 "that is not a member pointer."); 2337 2338 QualType FromClass = QualType(FromPtrType->getClass(), 0); 2339 QualType ToClass = QualType(ToPtrType->getClass(), 0); 2340 2341 // FIXME: What about dependent types? 2342 assert(FromClass->isRecordType() && "Pointer into non-class."); 2343 assert(ToClass->isRecordType() && "Pointer into non-class."); 2344 2345 CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true, 2346 /*DetectVirtual=*/true); 2347 bool DerivationOkay = IsDerivedFrom(ToClass, FromClass, Paths); 2348 assert(DerivationOkay && 2349 "Should not have been called if derivation isn't OK."); 2350 (void)DerivationOkay; 2351 2352 if (Paths.isAmbiguous(Context.getCanonicalType(FromClass). 2353 getUnqualifiedType())) { 2354 std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths); 2355 Diag(From->getExprLoc(), diag::err_ambiguous_memptr_conv) 2356 << 0 << FromClass << ToClass << PathDisplayStr << From->getSourceRange(); 2357 return true; 2358 } 2359 2360 if (const RecordType *VBase = Paths.getDetectedVirtual()) { 2361 Diag(From->getExprLoc(), diag::err_memptr_conv_via_virtual) 2362 << FromClass << ToClass << QualType(VBase, 0) 2363 << From->getSourceRange(); 2364 return true; 2365 } 2366 2367 if (!IgnoreBaseAccess) 2368 CheckBaseClassAccess(From->getExprLoc(), FromClass, ToClass, 2369 Paths.front(), 2370 diag::err_downcast_from_inaccessible_base); 2371 2372 // Must be a base to derived member conversion. 2373 BuildBasePathArray(Paths, BasePath); 2374 Kind = CK_BaseToDerivedMemberPointer; 2375 return false; 2376} 2377 2378/// IsQualificationConversion - Determines whether the conversion from 2379/// an rvalue of type FromType to ToType is a qualification conversion 2380/// (C++ 4.4). 2381/// 2382/// \param ObjCLifetimeConversion Output parameter that will be set to indicate 2383/// when the qualification conversion involves a change in the Objective-C 2384/// object lifetime. 2385bool 2386Sema::IsQualificationConversion(QualType FromType, QualType ToType, 2387 bool CStyle, bool &ObjCLifetimeConversion) { 2388 FromType = Context.getCanonicalType(FromType); 2389 ToType = Context.getCanonicalType(ToType); 2390 ObjCLifetimeConversion = false; 2391 2392 // If FromType and ToType are the same type, this is not a 2393 // qualification conversion. 2394 if (FromType.getUnqualifiedType() == ToType.getUnqualifiedType()) 2395 return false; 2396 2397 // (C++ 4.4p4): 2398 // A conversion can add cv-qualifiers at levels other than the first 2399 // in multi-level pointers, subject to the following rules: [...] 2400 bool PreviousToQualsIncludeConst = true; 2401 bool UnwrappedAnyPointer = false; 2402 while (Context.UnwrapSimilarPointerTypes(FromType, ToType)) { 2403 // Within each iteration of the loop, we check the qualifiers to 2404 // determine if this still looks like a qualification 2405 // conversion. Then, if all is well, we unwrap one more level of 2406 // pointers or pointers-to-members and do it all again 2407 // until there are no more pointers or pointers-to-members left to 2408 // unwrap. 2409 UnwrappedAnyPointer = true; 2410 2411 Qualifiers FromQuals = FromType.getQualifiers(); 2412 Qualifiers ToQuals = ToType.getQualifiers(); 2413 2414 // Objective-C ARC: 2415 // Check Objective-C lifetime conversions. 2416 if (FromQuals.getObjCLifetime() != ToQuals.getObjCLifetime() && 2417 UnwrappedAnyPointer) { 2418 if (ToQuals.compatiblyIncludesObjCLifetime(FromQuals)) { 2419 ObjCLifetimeConversion = true; 2420 FromQuals.removeObjCLifetime(); 2421 ToQuals.removeObjCLifetime(); 2422 } else { 2423 // Qualification conversions cannot cast between different 2424 // Objective-C lifetime qualifiers. 2425 return false; 2426 } 2427 } 2428 2429 // Allow addition/removal of GC attributes but not changing GC attributes. 2430 if (FromQuals.getObjCGCAttr() != ToQuals.getObjCGCAttr() && 2431 (!FromQuals.hasObjCGCAttr() || !ToQuals.hasObjCGCAttr())) { 2432 FromQuals.removeObjCGCAttr(); 2433 ToQuals.removeObjCGCAttr(); 2434 } 2435 2436 // -- for every j > 0, if const is in cv 1,j then const is in cv 2437 // 2,j, and similarly for volatile. 2438 if (!CStyle && !ToQuals.compatiblyIncludes(FromQuals)) 2439 return false; 2440 2441 // -- if the cv 1,j and cv 2,j are different, then const is in 2442 // every cv for 0 < k < j. 2443 if (!CStyle && FromQuals.getCVRQualifiers() != ToQuals.getCVRQualifiers() 2444 && !PreviousToQualsIncludeConst) 2445 return false; 2446 2447 // Keep track of whether all prior cv-qualifiers in the "to" type 2448 // include const. 2449 PreviousToQualsIncludeConst 2450 = PreviousToQualsIncludeConst && ToQuals.hasConst(); 2451 } 2452 2453 // We are left with FromType and ToType being the pointee types 2454 // after unwrapping the original FromType and ToType the same number 2455 // of types. If we unwrapped any pointers, and if FromType and 2456 // ToType have the same unqualified type (since we checked 2457 // qualifiers above), then this is a qualification conversion. 2458 return UnwrappedAnyPointer && Context.hasSameUnqualifiedType(FromType,ToType); 2459} 2460 2461/// Determines whether there is a user-defined conversion sequence 2462/// (C++ [over.ics.user]) that converts expression From to the type 2463/// ToType. If such a conversion exists, User will contain the 2464/// user-defined conversion sequence that performs such a conversion 2465/// and this routine will return true. Otherwise, this routine returns 2466/// false and User is unspecified. 2467/// 2468/// \param AllowExplicit true if the conversion should consider C++0x 2469/// "explicit" conversion functions as well as non-explicit conversion 2470/// functions (C++0x [class.conv.fct]p2). 2471static OverloadingResult 2472IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType, 2473 UserDefinedConversionSequence& User, 2474 OverloadCandidateSet& CandidateSet, 2475 bool AllowExplicit) { 2476 // Whether we will only visit constructors. 2477 bool ConstructorsOnly = false; 2478 2479 // If the type we are conversion to is a class type, enumerate its 2480 // constructors. 2481 if (const RecordType *ToRecordType = ToType->getAs<RecordType>()) { 2482 // C++ [over.match.ctor]p1: 2483 // When objects of class type are direct-initialized (8.5), or 2484 // copy-initialized from an expression of the same or a 2485 // derived class type (8.5), overload resolution selects the 2486 // constructor. [...] For copy-initialization, the candidate 2487 // functions are all the converting constructors (12.3.1) of 2488 // that class. The argument list is the expression-list within 2489 // the parentheses of the initializer. 2490 if (S.Context.hasSameUnqualifiedType(ToType, From->getType()) || 2491 (From->getType()->getAs<RecordType>() && 2492 S.IsDerivedFrom(From->getType(), ToType))) 2493 ConstructorsOnly = true; 2494 2495 S.RequireCompleteType(From->getLocStart(), ToType, S.PDiag()); 2496 // RequireCompleteType may have returned true due to some invalid decl 2497 // during template instantiation, but ToType may be complete enough now 2498 // to try to recover. 2499 if (ToType->isIncompleteType()) { 2500 // We're not going to find any constructors. 2501 } else if (CXXRecordDecl *ToRecordDecl 2502 = dyn_cast<CXXRecordDecl>(ToRecordType->getDecl())) { 2503 DeclContext::lookup_iterator Con, ConEnd; 2504 for (llvm::tie(Con, ConEnd) = S.LookupConstructors(ToRecordDecl); 2505 Con != ConEnd; ++Con) { 2506 NamedDecl *D = *Con; 2507 DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess()); 2508 2509 // Find the constructor (which may be a template). 2510 CXXConstructorDecl *Constructor = 0; 2511 FunctionTemplateDecl *ConstructorTmpl 2512 = dyn_cast<FunctionTemplateDecl>(D); 2513 if (ConstructorTmpl) 2514 Constructor 2515 = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl()); 2516 else 2517 Constructor = cast<CXXConstructorDecl>(D); 2518 2519 if (!Constructor->isInvalidDecl() && 2520 Constructor->isConvertingConstructor(AllowExplicit)) { 2521 if (ConstructorTmpl) 2522 S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl, 2523 /*ExplicitArgs*/ 0, 2524 &From, 1, CandidateSet, 2525 /*SuppressUserConversions=*/ 2526 !ConstructorsOnly); 2527 else 2528 // Allow one user-defined conversion when user specifies a 2529 // From->ToType conversion via an static cast (c-style, etc). 2530 S.AddOverloadCandidate(Constructor, FoundDecl, 2531 &From, 1, CandidateSet, 2532 /*SuppressUserConversions=*/ 2533 !ConstructorsOnly); 2534 } 2535 } 2536 } 2537 } 2538 2539 // Enumerate conversion functions, if we're allowed to. 2540 if (ConstructorsOnly) { 2541 } else if (S.RequireCompleteType(From->getLocStart(), From->getType(), 2542 S.PDiag(0) << From->getSourceRange())) { 2543 // No conversion functions from incomplete types. 2544 } else if (const RecordType *FromRecordType 2545 = From->getType()->getAs<RecordType>()) { 2546 if (CXXRecordDecl *FromRecordDecl 2547 = dyn_cast<CXXRecordDecl>(FromRecordType->getDecl())) { 2548 // Add all of the conversion functions as candidates. 2549 const UnresolvedSetImpl *Conversions 2550 = FromRecordDecl->getVisibleConversionFunctions(); 2551 for (UnresolvedSetImpl::iterator I = Conversions->begin(), 2552 E = Conversions->end(); I != E; ++I) { 2553 DeclAccessPair FoundDecl = I.getPair(); 2554 NamedDecl *D = FoundDecl.getDecl(); 2555 CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext()); 2556 if (isa<UsingShadowDecl>(D)) 2557 D = cast<UsingShadowDecl>(D)->getTargetDecl(); 2558 2559 CXXConversionDecl *Conv; 2560 FunctionTemplateDecl *ConvTemplate; 2561 if ((ConvTemplate = dyn_cast<FunctionTemplateDecl>(D))) 2562 Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl()); 2563 else 2564 Conv = cast<CXXConversionDecl>(D); 2565 2566 if (AllowExplicit || !Conv->isExplicit()) { 2567 if (ConvTemplate) 2568 S.AddTemplateConversionCandidate(ConvTemplate, FoundDecl, 2569 ActingContext, From, ToType, 2570 CandidateSet); 2571 else 2572 S.AddConversionCandidate(Conv, FoundDecl, ActingContext, 2573 From, ToType, CandidateSet); 2574 } 2575 } 2576 } 2577 } 2578 2579 bool HadMultipleCandidates = (CandidateSet.size() > 1); 2580 2581 OverloadCandidateSet::iterator Best; 2582 switch (CandidateSet.BestViableFunction(S, From->getLocStart(), Best, true)) { 2583 case OR_Success: 2584 // Record the standard conversion we used and the conversion function. 2585 if (CXXConstructorDecl *Constructor 2586 = dyn_cast<CXXConstructorDecl>(Best->Function)) { 2587 S.MarkDeclarationReferenced(From->getLocStart(), Constructor); 2588 2589 // C++ [over.ics.user]p1: 2590 // If the user-defined conversion is specified by a 2591 // constructor (12.3.1), the initial standard conversion 2592 // sequence converts the source type to the type required by 2593 // the argument of the constructor. 2594 // 2595 QualType ThisType = Constructor->getThisType(S.Context); 2596 if (Best->Conversions[0].isEllipsis()) 2597 User.EllipsisConversion = true; 2598 else { 2599 User.Before = Best->Conversions[0].Standard; 2600 User.EllipsisConversion = false; 2601 } 2602 User.HadMultipleCandidates = HadMultipleCandidates; 2603 User.ConversionFunction = Constructor; 2604 User.FoundConversionFunction = Best->FoundDecl; 2605 User.After.setAsIdentityConversion(); 2606 User.After.setFromType(ThisType->getAs<PointerType>()->getPointeeType()); 2607 User.After.setAllToTypes(ToType); 2608 return OR_Success; 2609 } else if (CXXConversionDecl *Conversion 2610 = dyn_cast<CXXConversionDecl>(Best->Function)) { 2611 S.MarkDeclarationReferenced(From->getLocStart(), Conversion); 2612 2613 // C++ [over.ics.user]p1: 2614 // 2615 // [...] If the user-defined conversion is specified by a 2616 // conversion function (12.3.2), the initial standard 2617 // conversion sequence converts the source type to the 2618 // implicit object parameter of the conversion function. 2619 User.Before = Best->Conversions[0].Standard; 2620 User.HadMultipleCandidates = HadMultipleCandidates; 2621 User.ConversionFunction = Conversion; 2622 User.FoundConversionFunction = Best->FoundDecl; 2623 User.EllipsisConversion = false; 2624 2625 // C++ [over.ics.user]p2: 2626 // The second standard conversion sequence converts the 2627 // result of the user-defined conversion to the target type 2628 // for the sequence. Since an implicit conversion sequence 2629 // is an initialization, the special rules for 2630 // initialization by user-defined conversion apply when 2631 // selecting the best user-defined conversion for a 2632 // user-defined conversion sequence (see 13.3.3 and 2633 // 13.3.3.1). 2634 User.After = Best->FinalConversion; 2635 return OR_Success; 2636 } else { 2637 llvm_unreachable("Not a constructor or conversion function?"); 2638 return OR_No_Viable_Function; 2639 } 2640 2641 case OR_No_Viable_Function: 2642 return OR_No_Viable_Function; 2643 case OR_Deleted: 2644 // No conversion here! We're done. 2645 return OR_Deleted; 2646 2647 case OR_Ambiguous: 2648 return OR_Ambiguous; 2649 } 2650 2651 return OR_No_Viable_Function; 2652} 2653 2654bool 2655Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) { 2656 ImplicitConversionSequence ICS; 2657 OverloadCandidateSet CandidateSet(From->getExprLoc()); 2658 OverloadingResult OvResult = 2659 IsUserDefinedConversion(*this, From, ToType, ICS.UserDefined, 2660 CandidateSet, false); 2661 if (OvResult == OR_Ambiguous) 2662 Diag(From->getSourceRange().getBegin(), 2663 diag::err_typecheck_ambiguous_condition) 2664 << From->getType() << ToType << From->getSourceRange(); 2665 else if (OvResult == OR_No_Viable_Function && !CandidateSet.empty()) 2666 Diag(From->getSourceRange().getBegin(), 2667 diag::err_typecheck_nonviable_condition) 2668 << From->getType() << ToType << From->getSourceRange(); 2669 else 2670 return false; 2671 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, &From, 1); 2672 return true; 2673} 2674 2675/// CompareImplicitConversionSequences - Compare two implicit 2676/// conversion sequences to determine whether one is better than the 2677/// other or if they are indistinguishable (C++ 13.3.3.2). 2678static ImplicitConversionSequence::CompareKind 2679CompareImplicitConversionSequences(Sema &S, 2680 const ImplicitConversionSequence& ICS1, 2681 const ImplicitConversionSequence& ICS2) 2682{ 2683 // (C++ 13.3.3.2p2): When comparing the basic forms of implicit 2684 // conversion sequences (as defined in 13.3.3.1) 2685 // -- a standard conversion sequence (13.3.3.1.1) is a better 2686 // conversion sequence than a user-defined conversion sequence or 2687 // an ellipsis conversion sequence, and 2688 // -- a user-defined conversion sequence (13.3.3.1.2) is a better 2689 // conversion sequence than an ellipsis conversion sequence 2690 // (13.3.3.1.3). 2691 // 2692 // C++0x [over.best.ics]p10: 2693 // For the purpose of ranking implicit conversion sequences as 2694 // described in 13.3.3.2, the ambiguous conversion sequence is 2695 // treated as a user-defined sequence that is indistinguishable 2696 // from any other user-defined conversion sequence. 2697 if (ICS1.getKindRank() < ICS2.getKindRank()) 2698 return ImplicitConversionSequence::Better; 2699 else if (ICS2.getKindRank() < ICS1.getKindRank()) 2700 return ImplicitConversionSequence::Worse; 2701 2702 // The following checks require both conversion sequences to be of 2703 // the same kind. 2704 if (ICS1.getKind() != ICS2.getKind()) 2705 return ImplicitConversionSequence::Indistinguishable; 2706 2707 ImplicitConversionSequence::CompareKind Result = 2708 ImplicitConversionSequence::Indistinguishable; 2709 2710 // Two implicit conversion sequences of the same form are 2711 // indistinguishable conversion sequences unless one of the 2712 // following rules apply: (C++ 13.3.3.2p3): 2713 if (ICS1.isStandard()) 2714 Result = CompareStandardConversionSequences(S, 2715 ICS1.Standard, ICS2.Standard); 2716 else if (ICS1.isUserDefined()) { 2717 // User-defined conversion sequence U1 is a better conversion 2718 // sequence than another user-defined conversion sequence U2 if 2719 // they contain the same user-defined conversion function or 2720 // constructor and if the second standard conversion sequence of 2721 // U1 is better than the second standard conversion sequence of 2722 // U2 (C++ 13.3.3.2p3). 2723 if (ICS1.UserDefined.ConversionFunction == 2724 ICS2.UserDefined.ConversionFunction) 2725 Result = CompareStandardConversionSequences(S, 2726 ICS1.UserDefined.After, 2727 ICS2.UserDefined.After); 2728 } 2729 2730 // List-initialization sequence L1 is a better conversion sequence than 2731 // list-initialization sequence L2 if L1 converts to std::initializer_list<X> 2732 // for some X and L2 does not. 2733 if (Result == ImplicitConversionSequence::Indistinguishable && 2734 ICS1.isListInitializationSequence() && 2735 ICS2.isListInitializationSequence()) { 2736 // FIXME: Find out if ICS1 converts to initializer_list and ICS2 doesn't. 2737 } 2738 2739 return Result; 2740} 2741 2742static bool hasSimilarType(ASTContext &Context, QualType T1, QualType T2) { 2743 while (Context.UnwrapSimilarPointerTypes(T1, T2)) { 2744 Qualifiers Quals; 2745 T1 = Context.getUnqualifiedArrayType(T1, Quals); 2746 T2 = Context.getUnqualifiedArrayType(T2, Quals); 2747 } 2748 2749 return Context.hasSameUnqualifiedType(T1, T2); 2750} 2751 2752// Per 13.3.3.2p3, compare the given standard conversion sequences to 2753// determine if one is a proper subset of the other. 2754static ImplicitConversionSequence::CompareKind 2755compareStandardConversionSubsets(ASTContext &Context, 2756 const StandardConversionSequence& SCS1, 2757 const StandardConversionSequence& SCS2) { 2758 ImplicitConversionSequence::CompareKind Result 2759 = ImplicitConversionSequence::Indistinguishable; 2760 2761 // the identity conversion sequence is considered to be a subsequence of 2762 // any non-identity conversion sequence 2763 if (SCS1.isIdentityConversion() && !SCS2.isIdentityConversion()) 2764 return ImplicitConversionSequence::Better; 2765 else if (!SCS1.isIdentityConversion() && SCS2.isIdentityConversion()) 2766 return ImplicitConversionSequence::Worse; 2767 2768 if (SCS1.Second != SCS2.Second) { 2769 if (SCS1.Second == ICK_Identity) 2770 Result = ImplicitConversionSequence::Better; 2771 else if (SCS2.Second == ICK_Identity) 2772 Result = ImplicitConversionSequence::Worse; 2773 else 2774 return ImplicitConversionSequence::Indistinguishable; 2775 } else if (!hasSimilarType(Context, SCS1.getToType(1), SCS2.getToType(1))) 2776 return ImplicitConversionSequence::Indistinguishable; 2777 2778 if (SCS1.Third == SCS2.Third) { 2779 return Context.hasSameType(SCS1.getToType(2), SCS2.getToType(2))? Result 2780 : ImplicitConversionSequence::Indistinguishable; 2781 } 2782 2783 if (SCS1.Third == ICK_Identity) 2784 return Result == ImplicitConversionSequence::Worse 2785 ? ImplicitConversionSequence::Indistinguishable 2786 : ImplicitConversionSequence::Better; 2787 2788 if (SCS2.Third == ICK_Identity) 2789 return Result == ImplicitConversionSequence::Better 2790 ? ImplicitConversionSequence::Indistinguishable 2791 : ImplicitConversionSequence::Worse; 2792 2793 return ImplicitConversionSequence::Indistinguishable; 2794} 2795 2796/// \brief Determine whether one of the given reference bindings is better 2797/// than the other based on what kind of bindings they are. 2798static bool isBetterReferenceBindingKind(const StandardConversionSequence &SCS1, 2799 const StandardConversionSequence &SCS2) { 2800 // C++0x [over.ics.rank]p3b4: 2801 // -- S1 and S2 are reference bindings (8.5.3) and neither refers to an 2802 // implicit object parameter of a non-static member function declared 2803 // without a ref-qualifier, and *either* S1 binds an rvalue reference 2804 // to an rvalue and S2 binds an lvalue reference *or S1 binds an 2805 // lvalue reference to a function lvalue and S2 binds an rvalue 2806 // reference*. 2807 // 2808 // FIXME: Rvalue references. We're going rogue with the above edits, 2809 // because the semantics in the current C++0x working paper (N3225 at the 2810 // time of this writing) break the standard definition of std::forward 2811 // and std::reference_wrapper when dealing with references to functions. 2812 // Proposed wording changes submitted to CWG for consideration. 2813 if (SCS1.BindsImplicitObjectArgumentWithoutRefQualifier || 2814 SCS2.BindsImplicitObjectArgumentWithoutRefQualifier) 2815 return false; 2816 2817 return (!SCS1.IsLvalueReference && SCS1.BindsToRvalue && 2818 SCS2.IsLvalueReference) || 2819 (SCS1.IsLvalueReference && SCS1.BindsToFunctionLvalue && 2820 !SCS2.IsLvalueReference); 2821} 2822 2823/// CompareStandardConversionSequences - Compare two standard 2824/// conversion sequences to determine whether one is better than the 2825/// other or if they are indistinguishable (C++ 13.3.3.2p3). 2826static ImplicitConversionSequence::CompareKind 2827CompareStandardConversionSequences(Sema &S, 2828 const StandardConversionSequence& SCS1, 2829 const StandardConversionSequence& SCS2) 2830{ 2831 // Standard conversion sequence S1 is a better conversion sequence 2832 // than standard conversion sequence S2 if (C++ 13.3.3.2p3): 2833 2834 // -- S1 is a proper subsequence of S2 (comparing the conversion 2835 // sequences in the canonical form defined by 13.3.3.1.1, 2836 // excluding any Lvalue Transformation; the identity conversion 2837 // sequence is considered to be a subsequence of any 2838 // non-identity conversion sequence) or, if not that, 2839 if (ImplicitConversionSequence::CompareKind CK 2840 = compareStandardConversionSubsets(S.Context, SCS1, SCS2)) 2841 return CK; 2842 2843 // -- the rank of S1 is better than the rank of S2 (by the rules 2844 // defined below), or, if not that, 2845 ImplicitConversionRank Rank1 = SCS1.getRank(); 2846 ImplicitConversionRank Rank2 = SCS2.getRank(); 2847 if (Rank1 < Rank2) 2848 return ImplicitConversionSequence::Better; 2849 else if (Rank2 < Rank1) 2850 return ImplicitConversionSequence::Worse; 2851 2852 // (C++ 13.3.3.2p4): Two conversion sequences with the same rank 2853 // are indistinguishable unless one of the following rules 2854 // applies: 2855 2856 // A conversion that is not a conversion of a pointer, or 2857 // pointer to member, to bool is better than another conversion 2858 // that is such a conversion. 2859 if (SCS1.isPointerConversionToBool() != SCS2.isPointerConversionToBool()) 2860 return SCS2.isPointerConversionToBool() 2861 ? ImplicitConversionSequence::Better 2862 : ImplicitConversionSequence::Worse; 2863 2864 // C++ [over.ics.rank]p4b2: 2865 // 2866 // If class B is derived directly or indirectly from class A, 2867 // conversion of B* to A* is better than conversion of B* to 2868 // void*, and conversion of A* to void* is better than conversion 2869 // of B* to void*. 2870 bool SCS1ConvertsToVoid 2871 = SCS1.isPointerConversionToVoidPointer(S.Context); 2872 bool SCS2ConvertsToVoid 2873 = SCS2.isPointerConversionToVoidPointer(S.Context); 2874 if (SCS1ConvertsToVoid != SCS2ConvertsToVoid) { 2875 // Exactly one of the conversion sequences is a conversion to 2876 // a void pointer; it's the worse conversion. 2877 return SCS2ConvertsToVoid ? ImplicitConversionSequence::Better 2878 : ImplicitConversionSequence::Worse; 2879 } else if (!SCS1ConvertsToVoid && !SCS2ConvertsToVoid) { 2880 // Neither conversion sequence converts to a void pointer; compare 2881 // their derived-to-base conversions. 2882 if (ImplicitConversionSequence::CompareKind DerivedCK 2883 = CompareDerivedToBaseConversions(S, SCS1, SCS2)) 2884 return DerivedCK; 2885 } else if (SCS1ConvertsToVoid && SCS2ConvertsToVoid && 2886 !S.Context.hasSameType(SCS1.getFromType(), SCS2.getFromType())) { 2887 // Both conversion sequences are conversions to void 2888 // pointers. Compare the source types to determine if there's an 2889 // inheritance relationship in their sources. 2890 QualType FromType1 = SCS1.getFromType(); 2891 QualType FromType2 = SCS2.getFromType(); 2892 2893 // Adjust the types we're converting from via the array-to-pointer 2894 // conversion, if we need to. 2895 if (SCS1.First == ICK_Array_To_Pointer) 2896 FromType1 = S.Context.getArrayDecayedType(FromType1); 2897 if (SCS2.First == ICK_Array_To_Pointer) 2898 FromType2 = S.Context.getArrayDecayedType(FromType2); 2899 2900 QualType FromPointee1 = FromType1->getPointeeType().getUnqualifiedType(); 2901 QualType FromPointee2 = FromType2->getPointeeType().getUnqualifiedType(); 2902 2903 if (S.IsDerivedFrom(FromPointee2, FromPointee1)) 2904 return ImplicitConversionSequence::Better; 2905 else if (S.IsDerivedFrom(FromPointee1, FromPointee2)) 2906 return ImplicitConversionSequence::Worse; 2907 2908 // Objective-C++: If one interface is more specific than the 2909 // other, it is the better one. 2910 const ObjCObjectPointerType* FromObjCPtr1 2911 = FromType1->getAs<ObjCObjectPointerType>(); 2912 const ObjCObjectPointerType* FromObjCPtr2 2913 = FromType2->getAs<ObjCObjectPointerType>(); 2914 if (FromObjCPtr1 && FromObjCPtr2) { 2915 bool AssignLeft = S.Context.canAssignObjCInterfaces(FromObjCPtr1, 2916 FromObjCPtr2); 2917 bool AssignRight = S.Context.canAssignObjCInterfaces(FromObjCPtr2, 2918 FromObjCPtr1); 2919 if (AssignLeft != AssignRight) { 2920 return AssignLeft? ImplicitConversionSequence::Better 2921 : ImplicitConversionSequence::Worse; 2922 } 2923 } 2924 } 2925 2926 // Compare based on qualification conversions (C++ 13.3.3.2p3, 2927 // bullet 3). 2928 if (ImplicitConversionSequence::CompareKind QualCK 2929 = CompareQualificationConversions(S, SCS1, SCS2)) 2930 return QualCK; 2931 2932 if (SCS1.ReferenceBinding && SCS2.ReferenceBinding) { 2933 // Check for a better reference binding based on the kind of bindings. 2934 if (isBetterReferenceBindingKind(SCS1, SCS2)) 2935 return ImplicitConversionSequence::Better; 2936 else if (isBetterReferenceBindingKind(SCS2, SCS1)) 2937 return ImplicitConversionSequence::Worse; 2938 2939 // C++ [over.ics.rank]p3b4: 2940 // -- S1 and S2 are reference bindings (8.5.3), and the types to 2941 // which the references refer are the same type except for 2942 // top-level cv-qualifiers, and the type to which the reference 2943 // initialized by S2 refers is more cv-qualified than the type 2944 // to which the reference initialized by S1 refers. 2945 QualType T1 = SCS1.getToType(2); 2946 QualType T2 = SCS2.getToType(2); 2947 T1 = S.Context.getCanonicalType(T1); 2948 T2 = S.Context.getCanonicalType(T2); 2949 Qualifiers T1Quals, T2Quals; 2950 QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals); 2951 QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals); 2952 if (UnqualT1 == UnqualT2) { 2953 // Objective-C++ ARC: If the references refer to objects with different 2954 // lifetimes, prefer bindings that don't change lifetime. 2955 if (SCS1.ObjCLifetimeConversionBinding != 2956 SCS2.ObjCLifetimeConversionBinding) { 2957 return SCS1.ObjCLifetimeConversionBinding 2958 ? ImplicitConversionSequence::Worse 2959 : ImplicitConversionSequence::Better; 2960 } 2961 2962 // If the type is an array type, promote the element qualifiers to the 2963 // type for comparison. 2964 if (isa<ArrayType>(T1) && T1Quals) 2965 T1 = S.Context.getQualifiedType(UnqualT1, T1Quals); 2966 if (isa<ArrayType>(T2) && T2Quals) 2967 T2 = S.Context.getQualifiedType(UnqualT2, T2Quals); 2968 if (T2.isMoreQualifiedThan(T1)) 2969 return ImplicitConversionSequence::Better; 2970 else if (T1.isMoreQualifiedThan(T2)) 2971 return ImplicitConversionSequence::Worse; 2972 } 2973 } 2974 2975 // In Microsoft mode, prefer an integral conversion to a 2976 // floating-to-integral conversion if the integral conversion 2977 // is between types of the same size. 2978 // For example: 2979 // void f(float); 2980 // void f(int); 2981 // int main { 2982 // long a; 2983 // f(a); 2984 // } 2985 // Here, MSVC will call f(int) instead of generating a compile error 2986 // as clang will do in standard mode. 2987 if (S.getLangOptions().MicrosoftMode && 2988 SCS1.Second == ICK_Integral_Conversion && 2989 SCS2.Second == ICK_Floating_Integral && 2990 S.Context.getTypeSize(SCS1.getFromType()) == 2991 S.Context.getTypeSize(SCS1.getToType(2))) 2992 return ImplicitConversionSequence::Better; 2993 2994 return ImplicitConversionSequence::Indistinguishable; 2995} 2996 2997/// CompareQualificationConversions - Compares two standard conversion 2998/// sequences to determine whether they can be ranked based on their 2999/// qualification conversions (C++ 13.3.3.2p3 bullet 3). 3000ImplicitConversionSequence::CompareKind 3001CompareQualificationConversions(Sema &S, 3002 const StandardConversionSequence& SCS1, 3003 const StandardConversionSequence& SCS2) { 3004 // C++ 13.3.3.2p3: 3005 // -- S1 and S2 differ only in their qualification conversion and 3006 // yield similar types T1 and T2 (C++ 4.4), respectively, and the 3007 // cv-qualification signature of type T1 is a proper subset of 3008 // the cv-qualification signature of type T2, and S1 is not the 3009 // deprecated string literal array-to-pointer conversion (4.2). 3010 if (SCS1.First != SCS2.First || SCS1.Second != SCS2.Second || 3011 SCS1.Third != SCS2.Third || SCS1.Third != ICK_Qualification) 3012 return ImplicitConversionSequence::Indistinguishable; 3013 3014 // FIXME: the example in the standard doesn't use a qualification 3015 // conversion (!) 3016 QualType T1 = SCS1.getToType(2); 3017 QualType T2 = SCS2.getToType(2); 3018 T1 = S.Context.getCanonicalType(T1); 3019 T2 = S.Context.getCanonicalType(T2); 3020 Qualifiers T1Quals, T2Quals; 3021 QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals); 3022 QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals); 3023 3024 // If the types are the same, we won't learn anything by unwrapped 3025 // them. 3026 if (UnqualT1 == UnqualT2) 3027 return ImplicitConversionSequence::Indistinguishable; 3028 3029 // If the type is an array type, promote the element qualifiers to the type 3030 // for comparison. 3031 if (isa<ArrayType>(T1) && T1Quals) 3032 T1 = S.Context.getQualifiedType(UnqualT1, T1Quals); 3033 if (isa<ArrayType>(T2) && T2Quals) 3034 T2 = S.Context.getQualifiedType(UnqualT2, T2Quals); 3035 3036 ImplicitConversionSequence::CompareKind Result 3037 = ImplicitConversionSequence::Indistinguishable; 3038 3039 // Objective-C++ ARC: 3040 // Prefer qualification conversions not involving a change in lifetime 3041 // to qualification conversions that do not change lifetime. 3042 if (SCS1.QualificationIncludesObjCLifetime != 3043 SCS2.QualificationIncludesObjCLifetime) { 3044 Result = SCS1.QualificationIncludesObjCLifetime 3045 ? ImplicitConversionSequence::Worse 3046 : ImplicitConversionSequence::Better; 3047 } 3048 3049 while (S.Context.UnwrapSimilarPointerTypes(T1, T2)) { 3050 // Within each iteration of the loop, we check the qualifiers to 3051 // determine if this still looks like a qualification 3052 // conversion. Then, if all is well, we unwrap one more level of 3053 // pointers or pointers-to-members and do it all again 3054 // until there are no more pointers or pointers-to-members left 3055 // to unwrap. This essentially mimics what 3056 // IsQualificationConversion does, but here we're checking for a 3057 // strict subset of qualifiers. 3058 if (T1.getCVRQualifiers() == T2.getCVRQualifiers()) 3059 // The qualifiers are the same, so this doesn't tell us anything 3060 // about how the sequences rank. 3061 ; 3062 else if (T2.isMoreQualifiedThan(T1)) { 3063 // T1 has fewer qualifiers, so it could be the better sequence. 3064 if (Result == ImplicitConversionSequence::Worse) 3065 // Neither has qualifiers that are a subset of the other's 3066 // qualifiers. 3067 return ImplicitConversionSequence::Indistinguishable; 3068 3069 Result = ImplicitConversionSequence::Better; 3070 } else if (T1.isMoreQualifiedThan(T2)) { 3071 // T2 has fewer qualifiers, so it could be the better sequence. 3072 if (Result == ImplicitConversionSequence::Better) 3073 // Neither has qualifiers that are a subset of the other's 3074 // qualifiers. 3075 return ImplicitConversionSequence::Indistinguishable; 3076 3077 Result = ImplicitConversionSequence::Worse; 3078 } else { 3079 // Qualifiers are disjoint. 3080 return ImplicitConversionSequence::Indistinguishable; 3081 } 3082 3083 // If the types after this point are equivalent, we're done. 3084 if (S.Context.hasSameUnqualifiedType(T1, T2)) 3085 break; 3086 } 3087 3088 // Check that the winning standard conversion sequence isn't using 3089 // the deprecated string literal array to pointer conversion. 3090 switch (Result) { 3091 case ImplicitConversionSequence::Better: 3092 if (SCS1.DeprecatedStringLiteralToCharPtr) 3093 Result = ImplicitConversionSequence::Indistinguishable; 3094 break; 3095 3096 case ImplicitConversionSequence::Indistinguishable: 3097 break; 3098 3099 case ImplicitConversionSequence::Worse: 3100 if (SCS2.DeprecatedStringLiteralToCharPtr) 3101 Result = ImplicitConversionSequence::Indistinguishable; 3102 break; 3103 } 3104 3105 return Result; 3106} 3107 3108/// CompareDerivedToBaseConversions - Compares two standard conversion 3109/// sequences to determine whether they can be ranked based on their 3110/// various kinds of derived-to-base conversions (C++ 3111/// [over.ics.rank]p4b3). As part of these checks, we also look at 3112/// conversions between Objective-C interface types. 3113ImplicitConversionSequence::CompareKind 3114CompareDerivedToBaseConversions(Sema &S, 3115 const StandardConversionSequence& SCS1, 3116 const StandardConversionSequence& SCS2) { 3117 QualType FromType1 = SCS1.getFromType(); 3118 QualType ToType1 = SCS1.getToType(1); 3119 QualType FromType2 = SCS2.getFromType(); 3120 QualType ToType2 = SCS2.getToType(1); 3121 3122 // Adjust the types we're converting from via the array-to-pointer 3123 // conversion, if we need to. 3124 if (SCS1.First == ICK_Array_To_Pointer) 3125 FromType1 = S.Context.getArrayDecayedType(FromType1); 3126 if (SCS2.First == ICK_Array_To_Pointer) 3127 FromType2 = S.Context.getArrayDecayedType(FromType2); 3128 3129 // Canonicalize all of the types. 3130 FromType1 = S.Context.getCanonicalType(FromType1); 3131 ToType1 = S.Context.getCanonicalType(ToType1); 3132 FromType2 = S.Context.getCanonicalType(FromType2); 3133 ToType2 = S.Context.getCanonicalType(ToType2); 3134 3135 // C++ [over.ics.rank]p4b3: 3136 // 3137 // If class B is derived directly or indirectly from class A and 3138 // class C is derived directly or indirectly from B, 3139 // 3140 // Compare based on pointer conversions. 3141 if (SCS1.Second == ICK_Pointer_Conversion && 3142 SCS2.Second == ICK_Pointer_Conversion && 3143 /*FIXME: Remove if Objective-C id conversions get their own rank*/ 3144 FromType1->isPointerType() && FromType2->isPointerType() && 3145 ToType1->isPointerType() && ToType2->isPointerType()) { 3146 QualType FromPointee1 3147 = FromType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType(); 3148 QualType ToPointee1 3149 = ToType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType(); 3150 QualType FromPointee2 3151 = FromType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType(); 3152 QualType ToPointee2 3153 = ToType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType(); 3154 3155 // -- conversion of C* to B* is better than conversion of C* to A*, 3156 if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) { 3157 if (S.IsDerivedFrom(ToPointee1, ToPointee2)) 3158 return ImplicitConversionSequence::Better; 3159 else if (S.IsDerivedFrom(ToPointee2, ToPointee1)) 3160 return ImplicitConversionSequence::Worse; 3161 } 3162 3163 // -- conversion of B* to A* is better than conversion of C* to A*, 3164 if (FromPointee1 != FromPointee2 && ToPointee1 == ToPointee2) { 3165 if (S.IsDerivedFrom(FromPointee2, FromPointee1)) 3166 return ImplicitConversionSequence::Better; 3167 else if (S.IsDerivedFrom(FromPointee1, FromPointee2)) 3168 return ImplicitConversionSequence::Worse; 3169 } 3170 } else if (SCS1.Second == ICK_Pointer_Conversion && 3171 SCS2.Second == ICK_Pointer_Conversion) { 3172 const ObjCObjectPointerType *FromPtr1 3173 = FromType1->getAs<ObjCObjectPointerType>(); 3174 const ObjCObjectPointerType *FromPtr2 3175 = FromType2->getAs<ObjCObjectPointerType>(); 3176 const ObjCObjectPointerType *ToPtr1 3177 = ToType1->getAs<ObjCObjectPointerType>(); 3178 const ObjCObjectPointerType *ToPtr2 3179 = ToType2->getAs<ObjCObjectPointerType>(); 3180 3181 if (FromPtr1 && FromPtr2 && ToPtr1 && ToPtr2) { 3182 // Apply the same conversion ranking rules for Objective-C pointer types 3183 // that we do for C++ pointers to class types. However, we employ the 3184 // Objective-C pseudo-subtyping relationship used for assignment of 3185 // Objective-C pointer types. 3186 bool FromAssignLeft 3187 = S.Context.canAssignObjCInterfaces(FromPtr1, FromPtr2); 3188 bool FromAssignRight 3189 = S.Context.canAssignObjCInterfaces(FromPtr2, FromPtr1); 3190 bool ToAssignLeft 3191 = S.Context.canAssignObjCInterfaces(ToPtr1, ToPtr2); 3192 bool ToAssignRight 3193 = S.Context.canAssignObjCInterfaces(ToPtr2, ToPtr1); 3194 3195 // A conversion to an a non-id object pointer type or qualified 'id' 3196 // type is better than a conversion to 'id'. 3197 if (ToPtr1->isObjCIdType() && 3198 (ToPtr2->isObjCQualifiedIdType() || ToPtr2->getInterfaceDecl())) 3199 return ImplicitConversionSequence::Worse; 3200 if (ToPtr2->isObjCIdType() && 3201 (ToPtr1->isObjCQualifiedIdType() || ToPtr1->getInterfaceDecl())) 3202 return ImplicitConversionSequence::Better; 3203 3204 // A conversion to a non-id object pointer type is better than a 3205 // conversion to a qualified 'id' type 3206 if (ToPtr1->isObjCQualifiedIdType() && ToPtr2->getInterfaceDecl()) 3207 return ImplicitConversionSequence::Worse; 3208 if (ToPtr2->isObjCQualifiedIdType() && ToPtr1->getInterfaceDecl()) 3209 return ImplicitConversionSequence::Better; 3210 3211 // A conversion to an a non-Class object pointer type or qualified 'Class' 3212 // type is better than a conversion to 'Class'. 3213 if (ToPtr1->isObjCClassType() && 3214 (ToPtr2->isObjCQualifiedClassType() || ToPtr2->getInterfaceDecl())) 3215 return ImplicitConversionSequence::Worse; 3216 if (ToPtr2->isObjCClassType() && 3217 (ToPtr1->isObjCQualifiedClassType() || ToPtr1->getInterfaceDecl())) 3218 return ImplicitConversionSequence::Better; 3219 3220 // A conversion to a non-Class object pointer type is better than a 3221 // conversion to a qualified 'Class' type. 3222 if (ToPtr1->isObjCQualifiedClassType() && ToPtr2->getInterfaceDecl()) 3223 return ImplicitConversionSequence::Worse; 3224 if (ToPtr2->isObjCQualifiedClassType() && ToPtr1->getInterfaceDecl()) 3225 return ImplicitConversionSequence::Better; 3226 3227 // -- "conversion of C* to B* is better than conversion of C* to A*," 3228 if (S.Context.hasSameType(FromType1, FromType2) && 3229 !FromPtr1->isObjCIdType() && !FromPtr1->isObjCClassType() && 3230 (ToAssignLeft != ToAssignRight)) 3231 return ToAssignLeft? ImplicitConversionSequence::Worse 3232 : ImplicitConversionSequence::Better; 3233 3234 // -- "conversion of B* to A* is better than conversion of C* to A*," 3235 if (S.Context.hasSameUnqualifiedType(ToType1, ToType2) && 3236 (FromAssignLeft != FromAssignRight)) 3237 return FromAssignLeft? ImplicitConversionSequence::Better 3238 : ImplicitConversionSequence::Worse; 3239 } 3240 } 3241 3242 // Ranking of member-pointer types. 3243 if (SCS1.Second == ICK_Pointer_Member && SCS2.Second == ICK_Pointer_Member && 3244 FromType1->isMemberPointerType() && FromType2->isMemberPointerType() && 3245 ToType1->isMemberPointerType() && ToType2->isMemberPointerType()) { 3246 const MemberPointerType * FromMemPointer1 = 3247 FromType1->getAs<MemberPointerType>(); 3248 const MemberPointerType * ToMemPointer1 = 3249 ToType1->getAs<MemberPointerType>(); 3250 const MemberPointerType * FromMemPointer2 = 3251 FromType2->getAs<MemberPointerType>(); 3252 const MemberPointerType * ToMemPointer2 = 3253 ToType2->getAs<MemberPointerType>(); 3254 const Type *FromPointeeType1 = FromMemPointer1->getClass(); 3255 const Type *ToPointeeType1 = ToMemPointer1->getClass(); 3256 const Type *FromPointeeType2 = FromMemPointer2->getClass(); 3257 const Type *ToPointeeType2 = ToMemPointer2->getClass(); 3258 QualType FromPointee1 = QualType(FromPointeeType1, 0).getUnqualifiedType(); 3259 QualType ToPointee1 = QualType(ToPointeeType1, 0).getUnqualifiedType(); 3260 QualType FromPointee2 = QualType(FromPointeeType2, 0).getUnqualifiedType(); 3261 QualType ToPointee2 = QualType(ToPointeeType2, 0).getUnqualifiedType(); 3262 // conversion of A::* to B::* is better than conversion of A::* to C::*, 3263 if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) { 3264 if (S.IsDerivedFrom(ToPointee1, ToPointee2)) 3265 return ImplicitConversionSequence::Worse; 3266 else if (S.IsDerivedFrom(ToPointee2, ToPointee1)) 3267 return ImplicitConversionSequence::Better; 3268 } 3269 // conversion of B::* to C::* is better than conversion of A::* to C::* 3270 if (ToPointee1 == ToPointee2 && FromPointee1 != FromPointee2) { 3271 if (S.IsDerivedFrom(FromPointee1, FromPointee2)) 3272 return ImplicitConversionSequence::Better; 3273 else if (S.IsDerivedFrom(FromPointee2, FromPointee1)) 3274 return ImplicitConversionSequence::Worse; 3275 } 3276 } 3277 3278 if (SCS1.Second == ICK_Derived_To_Base) { 3279 // -- conversion of C to B is better than conversion of C to A, 3280 // -- binding of an expression of type C to a reference of type 3281 // B& is better than binding an expression of type C to a 3282 // reference of type A&, 3283 if (S.Context.hasSameUnqualifiedType(FromType1, FromType2) && 3284 !S.Context.hasSameUnqualifiedType(ToType1, ToType2)) { 3285 if (S.IsDerivedFrom(ToType1, ToType2)) 3286 return ImplicitConversionSequence::Better; 3287 else if (S.IsDerivedFrom(ToType2, ToType1)) 3288 return ImplicitConversionSequence::Worse; 3289 } 3290 3291 // -- conversion of B to A is better than conversion of C to A. 3292 // -- binding of an expression of type B to a reference of type 3293 // A& is better than binding an expression of type C to a 3294 // reference of type A&, 3295 if (!S.Context.hasSameUnqualifiedType(FromType1, FromType2) && 3296 S.Context.hasSameUnqualifiedType(ToType1, ToType2)) { 3297 if (S.IsDerivedFrom(FromType2, FromType1)) 3298 return ImplicitConversionSequence::Better; 3299 else if (S.IsDerivedFrom(FromType1, FromType2)) 3300 return ImplicitConversionSequence::Worse; 3301 } 3302 } 3303 3304 return ImplicitConversionSequence::Indistinguishable; 3305} 3306 3307/// CompareReferenceRelationship - Compare the two types T1 and T2 to 3308/// determine whether they are reference-related, 3309/// reference-compatible, reference-compatible with added 3310/// qualification, or incompatible, for use in C++ initialization by 3311/// reference (C++ [dcl.ref.init]p4). Neither type can be a reference 3312/// type, and the first type (T1) is the pointee type of the reference 3313/// type being initialized. 3314Sema::ReferenceCompareResult 3315Sema::CompareReferenceRelationship(SourceLocation Loc, 3316 QualType OrigT1, QualType OrigT2, 3317 bool &DerivedToBase, 3318 bool &ObjCConversion, 3319 bool &ObjCLifetimeConversion) { 3320 assert(!OrigT1->isReferenceType() && 3321 "T1 must be the pointee type of the reference type"); 3322 assert(!OrigT2->isReferenceType() && "T2 cannot be a reference type"); 3323 3324 QualType T1 = Context.getCanonicalType(OrigT1); 3325 QualType T2 = Context.getCanonicalType(OrigT2); 3326 Qualifiers T1Quals, T2Quals; 3327 QualType UnqualT1 = Context.getUnqualifiedArrayType(T1, T1Quals); 3328 QualType UnqualT2 = Context.getUnqualifiedArrayType(T2, T2Quals); 3329 3330 // C++ [dcl.init.ref]p4: 3331 // Given types "cv1 T1" and "cv2 T2," "cv1 T1" is 3332 // reference-related to "cv2 T2" if T1 is the same type as T2, or 3333 // T1 is a base class of T2. 3334 DerivedToBase = false; 3335 ObjCConversion = false; 3336 ObjCLifetimeConversion = false; 3337 if (UnqualT1 == UnqualT2) { 3338 // Nothing to do. 3339 } else if (!RequireCompleteType(Loc, OrigT2, PDiag()) && 3340 IsDerivedFrom(UnqualT2, UnqualT1)) 3341 DerivedToBase = true; 3342 else if (UnqualT1->isObjCObjectOrInterfaceType() && 3343 UnqualT2->isObjCObjectOrInterfaceType() && 3344 Context.canBindObjCObjectType(UnqualT1, UnqualT2)) 3345 ObjCConversion = true; 3346 else 3347 return Ref_Incompatible; 3348 3349 // At this point, we know that T1 and T2 are reference-related (at 3350 // least). 3351 3352 // If the type is an array type, promote the element qualifiers to the type 3353 // for comparison. 3354 if (isa<ArrayType>(T1) && T1Quals) 3355 T1 = Context.getQualifiedType(UnqualT1, T1Quals); 3356 if (isa<ArrayType>(T2) && T2Quals) 3357 T2 = Context.getQualifiedType(UnqualT2, T2Quals); 3358 3359 // C++ [dcl.init.ref]p4: 3360 // "cv1 T1" is reference-compatible with "cv2 T2" if T1 is 3361 // reference-related to T2 and cv1 is the same cv-qualification 3362 // as, or greater cv-qualification than, cv2. For purposes of 3363 // overload resolution, cases for which cv1 is greater 3364 // cv-qualification than cv2 are identified as 3365 // reference-compatible with added qualification (see 13.3.3.2). 3366 // 3367 // Note that we also require equivalence of Objective-C GC and address-space 3368 // qualifiers when performing these computations, so that e.g., an int in 3369 // address space 1 is not reference-compatible with an int in address 3370 // space 2. 3371 if (T1Quals.getObjCLifetime() != T2Quals.getObjCLifetime() && 3372 T1Quals.compatiblyIncludesObjCLifetime(T2Quals)) { 3373 T1Quals.removeObjCLifetime(); 3374 T2Quals.removeObjCLifetime(); 3375 ObjCLifetimeConversion = true; 3376 } 3377 3378 if (T1Quals == T2Quals) 3379 return Ref_Compatible; 3380 else if (T1Quals.compatiblyIncludes(T2Quals)) 3381 return Ref_Compatible_With_Added_Qualification; 3382 else 3383 return Ref_Related; 3384} 3385 3386/// \brief Look for a user-defined conversion to an value reference-compatible 3387/// with DeclType. Return true if something definite is found. 3388static bool 3389FindConversionForRefInit(Sema &S, ImplicitConversionSequence &ICS, 3390 QualType DeclType, SourceLocation DeclLoc, 3391 Expr *Init, QualType T2, bool AllowRvalues, 3392 bool AllowExplicit) { 3393 assert(T2->isRecordType() && "Can only find conversions of record types."); 3394 CXXRecordDecl *T2RecordDecl 3395 = dyn_cast<CXXRecordDecl>(T2->getAs<RecordType>()->getDecl()); 3396 3397 OverloadCandidateSet CandidateSet(DeclLoc); 3398 const UnresolvedSetImpl *Conversions 3399 = T2RecordDecl->getVisibleConversionFunctions(); 3400 for (UnresolvedSetImpl::iterator I = Conversions->begin(), 3401 E = Conversions->end(); I != E; ++I) { 3402 NamedDecl *D = *I; 3403 CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(D->getDeclContext()); 3404 if (isa<UsingShadowDecl>(D)) 3405 D = cast<UsingShadowDecl>(D)->getTargetDecl(); 3406 3407 FunctionTemplateDecl *ConvTemplate 3408 = dyn_cast<FunctionTemplateDecl>(D); 3409 CXXConversionDecl *Conv; 3410 if (ConvTemplate) 3411 Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl()); 3412 else 3413 Conv = cast<CXXConversionDecl>(D); 3414 3415 // If this is an explicit conversion, and we're not allowed to consider 3416 // explicit conversions, skip it. 3417 if (!AllowExplicit && Conv->isExplicit()) 3418 continue; 3419 3420 if (AllowRvalues) { 3421 bool DerivedToBase = false; 3422 bool ObjCConversion = false; 3423 bool ObjCLifetimeConversion = false; 3424 3425 // If we are initializing an rvalue reference, don't permit conversion 3426 // functions that return lvalues. 3427 if (!ConvTemplate && DeclType->isRValueReferenceType()) { 3428 const ReferenceType *RefType 3429 = Conv->getConversionType()->getAs<LValueReferenceType>(); 3430 if (RefType && !RefType->getPointeeType()->isFunctionType()) 3431 continue; 3432 } 3433 3434 if (!ConvTemplate && 3435 S.CompareReferenceRelationship( 3436 DeclLoc, 3437 Conv->getConversionType().getNonReferenceType() 3438 .getUnqualifiedType(), 3439 DeclType.getNonReferenceType().getUnqualifiedType(), 3440 DerivedToBase, ObjCConversion, ObjCLifetimeConversion) == 3441 Sema::Ref_Incompatible) 3442 continue; 3443 } else { 3444 // If the conversion function doesn't return a reference type, 3445 // it can't be considered for this conversion. An rvalue reference 3446 // is only acceptable if its referencee is a function type. 3447 3448 const ReferenceType *RefType = 3449 Conv->getConversionType()->getAs<ReferenceType>(); 3450 if (!RefType || 3451 (!RefType->isLValueReferenceType() && 3452 !RefType->getPointeeType()->isFunctionType())) 3453 continue; 3454 } 3455 3456 if (ConvTemplate) 3457 S.AddTemplateConversionCandidate(ConvTemplate, I.getPair(), ActingDC, 3458 Init, DeclType, CandidateSet); 3459 else 3460 S.AddConversionCandidate(Conv, I.getPair(), ActingDC, Init, 3461 DeclType, CandidateSet); 3462 } 3463 3464 bool HadMultipleCandidates = (CandidateSet.size() > 1); 3465 3466 OverloadCandidateSet::iterator Best; 3467 switch (CandidateSet.BestViableFunction(S, DeclLoc, Best, true)) { 3468 case OR_Success: 3469 // C++ [over.ics.ref]p1: 3470 // 3471 // [...] If the parameter binds directly to the result of 3472 // applying a conversion function to the argument 3473 // expression, the implicit conversion sequence is a 3474 // user-defined conversion sequence (13.3.3.1.2), with the 3475 // second standard conversion sequence either an identity 3476 // conversion or, if the conversion function returns an 3477 // entity of a type that is a derived class of the parameter 3478 // type, a derived-to-base Conversion. 3479 if (!Best->FinalConversion.DirectBinding) 3480 return false; 3481 3482 if (Best->Function) 3483 S.MarkDeclarationReferenced(DeclLoc, Best->Function); 3484 ICS.setUserDefined(); 3485 ICS.UserDefined.Before = Best->Conversions[0].Standard; 3486 ICS.UserDefined.After = Best->FinalConversion; 3487 ICS.UserDefined.HadMultipleCandidates = HadMultipleCandidates; 3488 ICS.UserDefined.ConversionFunction = Best->Function; 3489 ICS.UserDefined.FoundConversionFunction = Best->FoundDecl; 3490 ICS.UserDefined.EllipsisConversion = false; 3491 assert(ICS.UserDefined.After.ReferenceBinding && 3492 ICS.UserDefined.After.DirectBinding && 3493 "Expected a direct reference binding!"); 3494 return true; 3495 3496 case OR_Ambiguous: 3497 ICS.setAmbiguous(); 3498 for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(); 3499 Cand != CandidateSet.end(); ++Cand) 3500 if (Cand->Viable) 3501 ICS.Ambiguous.addConversion(Cand->Function); 3502 return true; 3503 3504 case OR_No_Viable_Function: 3505 case OR_Deleted: 3506 // There was no suitable conversion, or we found a deleted 3507 // conversion; continue with other checks. 3508 return false; 3509 } 3510 3511 return false; 3512} 3513 3514/// \brief Compute an implicit conversion sequence for reference 3515/// initialization. 3516static ImplicitConversionSequence 3517TryReferenceInit(Sema &S, Expr *&Init, QualType DeclType, 3518 SourceLocation DeclLoc, 3519 bool SuppressUserConversions, 3520 bool AllowExplicit) { 3521 assert(DeclType->isReferenceType() && "Reference init needs a reference"); 3522 3523 // Most paths end in a failed conversion. 3524 ImplicitConversionSequence ICS; 3525 ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType); 3526 3527 QualType T1 = DeclType->getAs<ReferenceType>()->getPointeeType(); 3528 QualType T2 = Init->getType(); 3529 3530 // If the initializer is the address of an overloaded function, try 3531 // to resolve the overloaded function. If all goes well, T2 is the 3532 // type of the resulting function. 3533 if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) { 3534 DeclAccessPair Found; 3535 if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(Init, DeclType, 3536 false, Found)) 3537 T2 = Fn->getType(); 3538 } 3539 3540 // Compute some basic properties of the types and the initializer. 3541 bool isRValRef = DeclType->isRValueReferenceType(); 3542 bool DerivedToBase = false; 3543 bool ObjCConversion = false; 3544 bool ObjCLifetimeConversion = false; 3545 Expr::Classification InitCategory = Init->Classify(S.Context); 3546 Sema::ReferenceCompareResult RefRelationship 3547 = S.CompareReferenceRelationship(DeclLoc, T1, T2, DerivedToBase, 3548 ObjCConversion, ObjCLifetimeConversion); 3549 3550 3551 // C++0x [dcl.init.ref]p5: 3552 // A reference to type "cv1 T1" is initialized by an expression 3553 // of type "cv2 T2" as follows: 3554 3555 // -- If reference is an lvalue reference and the initializer expression 3556 if (!isRValRef) { 3557 // -- is an lvalue (but is not a bit-field), and "cv1 T1" is 3558 // reference-compatible with "cv2 T2," or 3559 // 3560 // Per C++ [over.ics.ref]p4, we don't check the bit-field property here. 3561 if (InitCategory.isLValue() && 3562 RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification) { 3563 // C++ [over.ics.ref]p1: 3564 // When a parameter of reference type binds directly (8.5.3) 3565 // to an argument expression, the implicit conversion sequence 3566 // is the identity conversion, unless the argument expression 3567 // has a type that is a derived class of the parameter type, 3568 // in which case the implicit conversion sequence is a 3569 // derived-to-base Conversion (13.3.3.1). 3570 ICS.setStandard(); 3571 ICS.Standard.First = ICK_Identity; 3572 ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base 3573 : ObjCConversion? ICK_Compatible_Conversion 3574 : ICK_Identity; 3575 ICS.Standard.Third = ICK_Identity; 3576 ICS.Standard.FromTypePtr = T2.getAsOpaquePtr(); 3577 ICS.Standard.setToType(0, T2); 3578 ICS.Standard.setToType(1, T1); 3579 ICS.Standard.setToType(2, T1); 3580 ICS.Standard.ReferenceBinding = true; 3581 ICS.Standard.DirectBinding = true; 3582 ICS.Standard.IsLvalueReference = !isRValRef; 3583 ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType(); 3584 ICS.Standard.BindsToRvalue = false; 3585 ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false; 3586 ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion; 3587 ICS.Standard.CopyConstructor = 0; 3588 3589 // Nothing more to do: the inaccessibility/ambiguity check for 3590 // derived-to-base conversions is suppressed when we're 3591 // computing the implicit conversion sequence (C++ 3592 // [over.best.ics]p2). 3593 return ICS; 3594 } 3595 3596 // -- has a class type (i.e., T2 is a class type), where T1 is 3597 // not reference-related to T2, and can be implicitly 3598 // converted to an lvalue of type "cv3 T3," where "cv1 T1" 3599 // is reference-compatible with "cv3 T3" 92) (this 3600 // conversion is selected by enumerating the applicable 3601 // conversion functions (13.3.1.6) and choosing the best 3602 // one through overload resolution (13.3)), 3603 if (!SuppressUserConversions && T2->isRecordType() && 3604 !S.RequireCompleteType(DeclLoc, T2, 0) && 3605 RefRelationship == Sema::Ref_Incompatible) { 3606 if (FindConversionForRefInit(S, ICS, DeclType, DeclLoc, 3607 Init, T2, /*AllowRvalues=*/false, 3608 AllowExplicit)) 3609 return ICS; 3610 } 3611 } 3612 3613 // -- Otherwise, the reference shall be an lvalue reference to a 3614 // non-volatile const type (i.e., cv1 shall be const), or the reference 3615 // shall be an rvalue reference. 3616 // 3617 // We actually handle one oddity of C++ [over.ics.ref] at this 3618 // point, which is that, due to p2 (which short-circuits reference 3619 // binding by only attempting a simple conversion for non-direct 3620 // bindings) and p3's strange wording, we allow a const volatile 3621 // reference to bind to an rvalue. Hence the check for the presence 3622 // of "const" rather than checking for "const" being the only 3623 // qualifier. 3624 // This is also the point where rvalue references and lvalue inits no longer 3625 // go together. 3626 if (!isRValRef && !T1.isConstQualified()) 3627 return ICS; 3628 3629 // -- If the initializer expression 3630 // 3631 // -- is an xvalue, class prvalue, array prvalue or function 3632 // lvalue and "cv1 T1" is reference-compatible with "cv2 T2", or 3633 if (RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification && 3634 (InitCategory.isXValue() || 3635 (InitCategory.isPRValue() && (T2->isRecordType() || T2->isArrayType())) || 3636 (InitCategory.isLValue() && T2->isFunctionType()))) { 3637 ICS.setStandard(); 3638 ICS.Standard.First = ICK_Identity; 3639 ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base 3640 : ObjCConversion? ICK_Compatible_Conversion 3641 : ICK_Identity; 3642 ICS.Standard.Third = ICK_Identity; 3643 ICS.Standard.FromTypePtr = T2.getAsOpaquePtr(); 3644 ICS.Standard.setToType(0, T2); 3645 ICS.Standard.setToType(1, T1); 3646 ICS.Standard.setToType(2, T1); 3647 ICS.Standard.ReferenceBinding = true; 3648 // In C++0x, this is always a direct binding. In C++98/03, it's a direct 3649 // binding unless we're binding to a class prvalue. 3650 // Note: Although xvalues wouldn't normally show up in C++98/03 code, we 3651 // allow the use of rvalue references in C++98/03 for the benefit of 3652 // standard library implementors; therefore, we need the xvalue check here. 3653 ICS.Standard.DirectBinding = 3654 S.getLangOptions().CPlusPlus0x || 3655 (InitCategory.isPRValue() && !T2->isRecordType()); 3656 ICS.Standard.IsLvalueReference = !isRValRef; 3657 ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType(); 3658 ICS.Standard.BindsToRvalue = InitCategory.isRValue(); 3659 ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false; 3660 ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion; 3661 ICS.Standard.CopyConstructor = 0; 3662 return ICS; 3663 } 3664 3665 // -- has a class type (i.e., T2 is a class type), where T1 is not 3666 // reference-related to T2, and can be implicitly converted to 3667 // an xvalue, class prvalue, or function lvalue of type 3668 // "cv3 T3", where "cv1 T1" is reference-compatible with 3669 // "cv3 T3", 3670 // 3671 // then the reference is bound to the value of the initializer 3672 // expression in the first case and to the result of the conversion 3673 // in the second case (or, in either case, to an appropriate base 3674 // class subobject). 3675 if (!SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible && 3676 T2->isRecordType() && !S.RequireCompleteType(DeclLoc, T2, 0) && 3677 FindConversionForRefInit(S, ICS, DeclType, DeclLoc, 3678 Init, T2, /*AllowRvalues=*/true, 3679 AllowExplicit)) { 3680 // In the second case, if the reference is an rvalue reference 3681 // and the second standard conversion sequence of the 3682 // user-defined conversion sequence includes an lvalue-to-rvalue 3683 // conversion, the program is ill-formed. 3684 if (ICS.isUserDefined() && isRValRef && 3685 ICS.UserDefined.After.First == ICK_Lvalue_To_Rvalue) 3686 ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType); 3687 3688 return ICS; 3689 } 3690 3691 // -- Otherwise, a temporary of type "cv1 T1" is created and 3692 // initialized from the initializer expression using the 3693 // rules for a non-reference copy initialization (8.5). The 3694 // reference is then bound to the temporary. If T1 is 3695 // reference-related to T2, cv1 must be the same 3696 // cv-qualification as, or greater cv-qualification than, 3697 // cv2; otherwise, the program is ill-formed. 3698 if (RefRelationship == Sema::Ref_Related) { 3699 // If cv1 == cv2 or cv1 is a greater cv-qualified than cv2, then 3700 // we would be reference-compatible or reference-compatible with 3701 // added qualification. But that wasn't the case, so the reference 3702 // initialization fails. 3703 // 3704 // Note that we only want to check address spaces and cvr-qualifiers here. 3705 // ObjC GC and lifetime qualifiers aren't important. 3706 Qualifiers T1Quals = T1.getQualifiers(); 3707 Qualifiers T2Quals = T2.getQualifiers(); 3708 T1Quals.removeObjCGCAttr(); 3709 T1Quals.removeObjCLifetime(); 3710 T2Quals.removeObjCGCAttr(); 3711 T2Quals.removeObjCLifetime(); 3712 if (!T1Quals.compatiblyIncludes(T2Quals)) 3713 return ICS; 3714 } 3715 3716 // If at least one of the types is a class type, the types are not 3717 // related, and we aren't allowed any user conversions, the 3718 // reference binding fails. This case is important for breaking 3719 // recursion, since TryImplicitConversion below will attempt to 3720 // create a temporary through the use of a copy constructor. 3721 if (SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible && 3722 (T1->isRecordType() || T2->isRecordType())) 3723 return ICS; 3724 3725 // If T1 is reference-related to T2 and the reference is an rvalue 3726 // reference, the initializer expression shall not be an lvalue. 3727 if (RefRelationship >= Sema::Ref_Related && 3728 isRValRef && Init->Classify(S.Context).isLValue()) 3729 return ICS; 3730 3731 // C++ [over.ics.ref]p2: 3732 // When a parameter of reference type is not bound directly to 3733 // an argument expression, the conversion sequence is the one 3734 // required to convert the argument expression to the 3735 // underlying type of the reference according to 3736 // 13.3.3.1. Conceptually, this conversion sequence corresponds 3737 // to copy-initializing a temporary of the underlying type with 3738 // the argument expression. Any difference in top-level 3739 // cv-qualification is subsumed by the initialization itself 3740 // and does not constitute a conversion. 3741 ICS = TryImplicitConversion(S, Init, T1, SuppressUserConversions, 3742 /*AllowExplicit=*/false, 3743 /*InOverloadResolution=*/false, 3744 /*CStyle=*/false, 3745 /*AllowObjCWritebackConversion=*/false); 3746 3747 // Of course, that's still a reference binding. 3748 if (ICS.isStandard()) { 3749 ICS.Standard.ReferenceBinding = true; 3750 ICS.Standard.IsLvalueReference = !isRValRef; 3751 ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType(); 3752 ICS.Standard.BindsToRvalue = true; 3753 ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false; 3754 ICS.Standard.ObjCLifetimeConversionBinding = false; 3755 } else if (ICS.isUserDefined()) { 3756 // Don't allow rvalue references to bind to lvalues. 3757 if (DeclType->isRValueReferenceType()) { 3758 if (const ReferenceType *RefType 3759 = ICS.UserDefined.ConversionFunction->getResultType() 3760 ->getAs<LValueReferenceType>()) { 3761 if (!RefType->getPointeeType()->isFunctionType()) { 3762 ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, Init, 3763 DeclType); 3764 return ICS; 3765 } 3766 } 3767 } 3768 3769 ICS.UserDefined.After.ReferenceBinding = true; 3770 ICS.UserDefined.After.IsLvalueReference = !isRValRef; 3771 ICS.UserDefined.After.BindsToFunctionLvalue = T2->isFunctionType(); 3772 ICS.UserDefined.After.BindsToRvalue = true; 3773 ICS.UserDefined.After.BindsImplicitObjectArgumentWithoutRefQualifier = false; 3774 ICS.UserDefined.After.ObjCLifetimeConversionBinding = false; 3775 } 3776 3777 return ICS; 3778} 3779 3780static ImplicitConversionSequence 3781TryCopyInitialization(Sema &S, Expr *From, QualType ToType, 3782 bool SuppressUserConversions, 3783 bool InOverloadResolution, 3784 bool AllowObjCWritebackConversion); 3785 3786/// TryListConversion - Try to copy-initialize a value of type ToType from the 3787/// initializer list From. 3788static ImplicitConversionSequence 3789TryListConversion(Sema &S, InitListExpr *From, QualType ToType, 3790 bool SuppressUserConversions, 3791 bool InOverloadResolution, 3792 bool AllowObjCWritebackConversion) { 3793 // C++11 [over.ics.list]p1: 3794 // When an argument is an initializer list, it is not an expression and 3795 // special rules apply for converting it to a parameter type. 3796 3797 ImplicitConversionSequence Result; 3798 Result.setBad(BadConversionSequence::no_conversion, From, ToType); 3799 Result.setListInitializationSequence(); 3800 3801 // C++11 [over.ics.list]p2: 3802 // If the parameter type is std::initializer_list<X> or "array of X" and 3803 // all the elements can be implicitly converted to X, the implicit 3804 // conversion sequence is the worst conversion necessary to convert an 3805 // element of the list to X. 3806 // FIXME: Recognize std::initializer_list. 3807 // FIXME: Arrays don't make sense until we can deal with references. 3808 if (ToType->isArrayType()) 3809 return Result; 3810 3811 // C++11 [over.ics.list]p3: 3812 // Otherwise, if the parameter is a non-aggregate class X and overload 3813 // resolution chooses a single best constructor [...] the implicit 3814 // conversion sequence is a user-defined conversion sequence. If multiple 3815 // constructors are viable but none is better than the others, the 3816 // implicit conversion sequence is a user-defined conversion sequence. 3817 // FIXME: Implement this. 3818 if (ToType->isRecordType() && !ToType->isAggregateType()) 3819 return Result; 3820 3821 // C++11 [over.ics.list]p4: 3822 // Otherwise, if the parameter has an aggregate type which can be 3823 // initialized from the initializer list [...] the implicit conversion 3824 // sequence is a user-defined conversion sequence. 3825 if (ToType->isAggregateType()) { 3826 // Type is an aggregate, argument is an init list. At this point it comes 3827 // down to checking whether the initialization works. 3828 // FIXME: Find out whether this parameter is consumed or not. 3829 InitializedEntity Entity = 3830 InitializedEntity::InitializeParameter(S.Context, ToType, 3831 /*Consumed=*/false); 3832 if (S.CanPerformCopyInitialization(Entity, S.Owned(From))) { 3833 Result.setUserDefined(); 3834 Result.UserDefined.Before.setAsIdentityConversion(); 3835 // Initializer lists don't have a type. 3836 Result.UserDefined.Before.setFromType(QualType()); 3837 Result.UserDefined.Before.setAllToTypes(QualType()); 3838 3839 Result.UserDefined.After.setAsIdentityConversion(); 3840 Result.UserDefined.After.setFromType(ToType); 3841 Result.UserDefined.After.setAllToTypes(ToType); 3842 } 3843 return Result; 3844 } 3845 3846 // C++11 [over.ics.list]p5: 3847 // Otherwise, if the parameter is a reference, see 13.3.3.1.4. 3848 // FIXME: Implement this. 3849 if (ToType->isReferenceType()) 3850 return Result; 3851 3852 // C++11 [over.ics.list]p6: 3853 // Otherwise, if the parameter type is not a class: 3854 if (!ToType->isRecordType()) { 3855 // - if the initializer list has one element, the implicit conversion 3856 // sequence is the one required to convert the element to the 3857 // parameter type. 3858 // FIXME: Catch narrowing here? 3859 unsigned NumInits = From->getNumInits(); 3860 if (NumInits == 1) 3861 Result = TryCopyInitialization(S, From->getInit(0), ToType, 3862 SuppressUserConversions, 3863 InOverloadResolution, 3864 AllowObjCWritebackConversion); 3865 // - if the initializer list has no elements, the implicit conversion 3866 // sequence is the identity conversion. 3867 else if (NumInits == 0) { 3868 Result.setStandard(); 3869 Result.Standard.setAsIdentityConversion(); 3870 } 3871 return Result; 3872 } 3873 3874 // C++11 [over.ics.list]p7: 3875 // In all cases other than those enumerated above, no conversion is possible 3876 return Result; 3877} 3878 3879/// TryCopyInitialization - Try to copy-initialize a value of type 3880/// ToType from the expression From. Return the implicit conversion 3881/// sequence required to pass this argument, which may be a bad 3882/// conversion sequence (meaning that the argument cannot be passed to 3883/// a parameter of this type). If @p SuppressUserConversions, then we 3884/// do not permit any user-defined conversion sequences. 3885static ImplicitConversionSequence 3886TryCopyInitialization(Sema &S, Expr *From, QualType ToType, 3887 bool SuppressUserConversions, 3888 bool InOverloadResolution, 3889 bool AllowObjCWritebackConversion) { 3890 if (InitListExpr *FromInitList = dyn_cast<InitListExpr>(From)) 3891 return TryListConversion(S, FromInitList, ToType, SuppressUserConversions, 3892 InOverloadResolution,AllowObjCWritebackConversion); 3893 3894 if (ToType->isReferenceType()) 3895 return TryReferenceInit(S, From, ToType, 3896 /*FIXME:*/From->getLocStart(), 3897 SuppressUserConversions, 3898 /*AllowExplicit=*/false); 3899 3900 return TryImplicitConversion(S, From, ToType, 3901 SuppressUserConversions, 3902 /*AllowExplicit=*/false, 3903 InOverloadResolution, 3904 /*CStyle=*/false, 3905 AllowObjCWritebackConversion); 3906} 3907 3908static bool TryCopyInitialization(const CanQualType FromQTy, 3909 const CanQualType ToQTy, 3910 Sema &S, 3911 SourceLocation Loc, 3912 ExprValueKind FromVK) { 3913 OpaqueValueExpr TmpExpr(Loc, FromQTy, FromVK); 3914 ImplicitConversionSequence ICS = 3915 TryCopyInitialization(S, &TmpExpr, ToQTy, true, true, false); 3916 3917 return !ICS.isBad(); 3918} 3919 3920/// TryObjectArgumentInitialization - Try to initialize the object 3921/// parameter of the given member function (@c Method) from the 3922/// expression @p From. 3923static ImplicitConversionSequence 3924TryObjectArgumentInitialization(Sema &S, QualType OrigFromType, 3925 Expr::Classification FromClassification, 3926 CXXMethodDecl *Method, 3927 CXXRecordDecl *ActingContext) { 3928 QualType ClassType = S.Context.getTypeDeclType(ActingContext); 3929 // [class.dtor]p2: A destructor can be invoked for a const, volatile or 3930 // const volatile object. 3931 unsigned Quals = isa<CXXDestructorDecl>(Method) ? 3932 Qualifiers::Const | Qualifiers::Volatile : Method->getTypeQualifiers(); 3933 QualType ImplicitParamType = S.Context.getCVRQualifiedType(ClassType, Quals); 3934 3935 // Set up the conversion sequence as a "bad" conversion, to allow us 3936 // to exit early. 3937 ImplicitConversionSequence ICS; 3938 3939 // We need to have an object of class type. 3940 QualType FromType = OrigFromType; 3941 if (const PointerType *PT = FromType->getAs<PointerType>()) { 3942 FromType = PT->getPointeeType(); 3943 3944 // When we had a pointer, it's implicitly dereferenced, so we 3945 // better have an lvalue. 3946 assert(FromClassification.isLValue()); 3947 } 3948 3949 assert(FromType->isRecordType()); 3950 3951 // C++0x [over.match.funcs]p4: 3952 // For non-static member functions, the type of the implicit object 3953 // parameter is 3954 // 3955 // - "lvalue reference to cv X" for functions declared without a 3956 // ref-qualifier or with the & ref-qualifier 3957 // - "rvalue reference to cv X" for functions declared with the && 3958 // ref-qualifier 3959 // 3960 // where X is the class of which the function is a member and cv is the 3961 // cv-qualification on the member function declaration. 3962 // 3963 // However, when finding an implicit conversion sequence for the argument, we 3964 // are not allowed to create temporaries or perform user-defined conversions 3965 // (C++ [over.match.funcs]p5). We perform a simplified version of 3966 // reference binding here, that allows class rvalues to bind to 3967 // non-constant references. 3968 3969 // First check the qualifiers. 3970 QualType FromTypeCanon = S.Context.getCanonicalType(FromType); 3971 if (ImplicitParamType.getCVRQualifiers() 3972 != FromTypeCanon.getLocalCVRQualifiers() && 3973 !ImplicitParamType.isAtLeastAsQualifiedAs(FromTypeCanon)) { 3974 ICS.setBad(BadConversionSequence::bad_qualifiers, 3975 OrigFromType, ImplicitParamType); 3976 return ICS; 3977 } 3978 3979 // Check that we have either the same type or a derived type. It 3980 // affects the conversion rank. 3981 QualType ClassTypeCanon = S.Context.getCanonicalType(ClassType); 3982 ImplicitConversionKind SecondKind; 3983 if (ClassTypeCanon == FromTypeCanon.getLocalUnqualifiedType()) { 3984 SecondKind = ICK_Identity; 3985 } else if (S.IsDerivedFrom(FromType, ClassType)) 3986 SecondKind = ICK_Derived_To_Base; 3987 else { 3988 ICS.setBad(BadConversionSequence::unrelated_class, 3989 FromType, ImplicitParamType); 3990 return ICS; 3991 } 3992 3993 // Check the ref-qualifier. 3994 switch (Method->getRefQualifier()) { 3995 case RQ_None: 3996 // Do nothing; we don't care about lvalueness or rvalueness. 3997 break; 3998 3999 case RQ_LValue: 4000 if (!FromClassification.isLValue() && Quals != Qualifiers::Const) { 4001 // non-const lvalue reference cannot bind to an rvalue 4002 ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, FromType, 4003 ImplicitParamType); 4004 return ICS; 4005 } 4006 break; 4007 4008 case RQ_RValue: 4009 if (!FromClassification.isRValue()) { 4010 // rvalue reference cannot bind to an lvalue 4011 ICS.setBad(BadConversionSequence::rvalue_ref_to_lvalue, FromType, 4012 ImplicitParamType); 4013 return ICS; 4014 } 4015 break; 4016 } 4017 4018 // Success. Mark this as a reference binding. 4019 ICS.setStandard(); 4020 ICS.Standard.setAsIdentityConversion(); 4021 ICS.Standard.Second = SecondKind; 4022 ICS.Standard.setFromType(FromType); 4023 ICS.Standard.setAllToTypes(ImplicitParamType); 4024 ICS.Standard.ReferenceBinding = true; 4025 ICS.Standard.DirectBinding = true; 4026 ICS.Standard.IsLvalueReference = Method->getRefQualifier() != RQ_RValue; 4027 ICS.Standard.BindsToFunctionLvalue = false; 4028 ICS.Standard.BindsToRvalue = FromClassification.isRValue(); 4029 ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier 4030 = (Method->getRefQualifier() == RQ_None); 4031 return ICS; 4032} 4033 4034/// PerformObjectArgumentInitialization - Perform initialization of 4035/// the implicit object parameter for the given Method with the given 4036/// expression. 4037ExprResult 4038Sema::PerformObjectArgumentInitialization(Expr *From, 4039 NestedNameSpecifier *Qualifier, 4040 NamedDecl *FoundDecl, 4041 CXXMethodDecl *Method) { 4042 QualType FromRecordType, DestType; 4043 QualType ImplicitParamRecordType = 4044 Method->getThisType(Context)->getAs<PointerType>()->getPointeeType(); 4045 4046 Expr::Classification FromClassification; 4047 if (const PointerType *PT = From->getType()->getAs<PointerType>()) { 4048 FromRecordType = PT->getPointeeType(); 4049 DestType = Method->getThisType(Context); 4050 FromClassification = Expr::Classification::makeSimpleLValue(); 4051 } else { 4052 FromRecordType = From->getType(); 4053 DestType = ImplicitParamRecordType; 4054 FromClassification = From->Classify(Context); 4055 } 4056 4057 // Note that we always use the true parent context when performing 4058 // the actual argument initialization. 4059 ImplicitConversionSequence ICS 4060 = TryObjectArgumentInitialization(*this, From->getType(), FromClassification, 4061 Method, Method->getParent()); 4062 if (ICS.isBad()) { 4063 if (ICS.Bad.Kind == BadConversionSequence::bad_qualifiers) { 4064 Qualifiers FromQs = FromRecordType.getQualifiers(); 4065 Qualifiers ToQs = DestType.getQualifiers(); 4066 unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers(); 4067 if (CVR) { 4068 Diag(From->getSourceRange().getBegin(), 4069 diag::err_member_function_call_bad_cvr) 4070 << Method->getDeclName() << FromRecordType << (CVR - 1) 4071 << From->getSourceRange(); 4072 Diag(Method->getLocation(), diag::note_previous_decl) 4073 << Method->getDeclName(); 4074 return ExprError(); 4075 } 4076 } 4077 4078 return Diag(From->getSourceRange().getBegin(), 4079 diag::err_implicit_object_parameter_init) 4080 << ImplicitParamRecordType << FromRecordType << From->getSourceRange(); 4081 } 4082 4083 if (ICS.Standard.Second == ICK_Derived_To_Base) { 4084 ExprResult FromRes = 4085 PerformObjectMemberConversion(From, Qualifier, FoundDecl, Method); 4086 if (FromRes.isInvalid()) 4087 return ExprError(); 4088 From = FromRes.take(); 4089 } 4090 4091 if (!Context.hasSameType(From->getType(), DestType)) 4092 From = ImpCastExprToType(From, DestType, CK_NoOp, 4093 From->getValueKind()).take(); 4094 return Owned(From); 4095} 4096 4097/// TryContextuallyConvertToBool - Attempt to contextually convert the 4098/// expression From to bool (C++0x [conv]p3). 4099static ImplicitConversionSequence 4100TryContextuallyConvertToBool(Sema &S, Expr *From) { 4101 // FIXME: This is pretty broken. 4102 return TryImplicitConversion(S, From, S.Context.BoolTy, 4103 // FIXME: Are these flags correct? 4104 /*SuppressUserConversions=*/false, 4105 /*AllowExplicit=*/true, 4106 /*InOverloadResolution=*/false, 4107 /*CStyle=*/false, 4108 /*AllowObjCWritebackConversion=*/false); 4109} 4110 4111/// PerformContextuallyConvertToBool - Perform a contextual conversion 4112/// of the expression From to bool (C++0x [conv]p3). 4113ExprResult Sema::PerformContextuallyConvertToBool(Expr *From) { 4114 if (checkPlaceholderForOverload(*this, From)) 4115 return ExprError(); 4116 4117 ImplicitConversionSequence ICS = TryContextuallyConvertToBool(*this, From); 4118 if (!ICS.isBad()) 4119 return PerformImplicitConversion(From, Context.BoolTy, ICS, AA_Converting); 4120 4121 if (!DiagnoseMultipleUserDefinedConversion(From, Context.BoolTy)) 4122 return Diag(From->getSourceRange().getBegin(), 4123 diag::err_typecheck_bool_condition) 4124 << From->getType() << From->getSourceRange(); 4125 return ExprError(); 4126} 4127 4128/// dropPointerConversions - If the given standard conversion sequence 4129/// involves any pointer conversions, remove them. This may change 4130/// the result type of the conversion sequence. 4131static void dropPointerConversion(StandardConversionSequence &SCS) { 4132 if (SCS.Second == ICK_Pointer_Conversion) { 4133 SCS.Second = ICK_Identity; 4134 SCS.Third = ICK_Identity; 4135 SCS.ToTypePtrs[2] = SCS.ToTypePtrs[1] = SCS.ToTypePtrs[0]; 4136 } 4137} 4138 4139/// TryContextuallyConvertToObjCPointer - Attempt to contextually 4140/// convert the expression From to an Objective-C pointer type. 4141static ImplicitConversionSequence 4142TryContextuallyConvertToObjCPointer(Sema &S, Expr *From) { 4143 // Do an implicit conversion to 'id'. 4144 QualType Ty = S.Context.getObjCIdType(); 4145 ImplicitConversionSequence ICS 4146 = TryImplicitConversion(S, From, Ty, 4147 // FIXME: Are these flags correct? 4148 /*SuppressUserConversions=*/false, 4149 /*AllowExplicit=*/true, 4150 /*InOverloadResolution=*/false, 4151 /*CStyle=*/false, 4152 /*AllowObjCWritebackConversion=*/false); 4153 4154 // Strip off any final conversions to 'id'. 4155 switch (ICS.getKind()) { 4156 case ImplicitConversionSequence::BadConversion: 4157 case ImplicitConversionSequence::AmbiguousConversion: 4158 case ImplicitConversionSequence::EllipsisConversion: 4159 break; 4160 4161 case ImplicitConversionSequence::UserDefinedConversion: 4162 dropPointerConversion(ICS.UserDefined.After); 4163 break; 4164 4165 case ImplicitConversionSequence::StandardConversion: 4166 dropPointerConversion(ICS.Standard); 4167 break; 4168 } 4169 4170 return ICS; 4171} 4172 4173/// PerformContextuallyConvertToObjCPointer - Perform a contextual 4174/// conversion of the expression From to an Objective-C pointer type. 4175ExprResult Sema::PerformContextuallyConvertToObjCPointer(Expr *From) { 4176 if (checkPlaceholderForOverload(*this, From)) 4177 return ExprError(); 4178 4179 QualType Ty = Context.getObjCIdType(); 4180 ImplicitConversionSequence ICS = 4181 TryContextuallyConvertToObjCPointer(*this, From); 4182 if (!ICS.isBad()) 4183 return PerformImplicitConversion(From, Ty, ICS, AA_Converting); 4184 return ExprError(); 4185} 4186 4187/// \brief Attempt to convert the given expression to an integral or 4188/// enumeration type. 4189/// 4190/// This routine will attempt to convert an expression of class type to an 4191/// integral or enumeration type, if that class type only has a single 4192/// conversion to an integral or enumeration type. 4193/// 4194/// \param Loc The source location of the construct that requires the 4195/// conversion. 4196/// 4197/// \param FromE The expression we're converting from. 4198/// 4199/// \param NotIntDiag The diagnostic to be emitted if the expression does not 4200/// have integral or enumeration type. 4201/// 4202/// \param IncompleteDiag The diagnostic to be emitted if the expression has 4203/// incomplete class type. 4204/// 4205/// \param ExplicitConvDiag The diagnostic to be emitted if we're calling an 4206/// explicit conversion function (because no implicit conversion functions 4207/// were available). This is a recovery mode. 4208/// 4209/// \param ExplicitConvNote The note to be emitted with \p ExplicitConvDiag, 4210/// showing which conversion was picked. 4211/// 4212/// \param AmbigDiag The diagnostic to be emitted if there is more than one 4213/// conversion function that could convert to integral or enumeration type. 4214/// 4215/// \param AmbigNote The note to be emitted with \p AmbigDiag for each 4216/// usable conversion function. 4217/// 4218/// \param ConvDiag The diagnostic to be emitted if we are calling a conversion 4219/// function, which may be an extension in this case. 4220/// 4221/// \returns The expression, converted to an integral or enumeration type if 4222/// successful. 4223ExprResult 4224Sema::ConvertToIntegralOrEnumerationType(SourceLocation Loc, Expr *From, 4225 const PartialDiagnostic &NotIntDiag, 4226 const PartialDiagnostic &IncompleteDiag, 4227 const PartialDiagnostic &ExplicitConvDiag, 4228 const PartialDiagnostic &ExplicitConvNote, 4229 const PartialDiagnostic &AmbigDiag, 4230 const PartialDiagnostic &AmbigNote, 4231 const PartialDiagnostic &ConvDiag) { 4232 // We can't perform any more checking for type-dependent expressions. 4233 if (From->isTypeDependent()) 4234 return Owned(From); 4235 4236 // If the expression already has integral or enumeration type, we're golden. 4237 QualType T = From->getType(); 4238 if (T->isIntegralOrEnumerationType()) 4239 return Owned(From); 4240 4241 // FIXME: Check for missing '()' if T is a function type? 4242 4243 // If we don't have a class type in C++, there's no way we can get an 4244 // expression of integral or enumeration type. 4245 const RecordType *RecordTy = T->getAs<RecordType>(); 4246 if (!RecordTy || !getLangOptions().CPlusPlus) { 4247 Diag(Loc, NotIntDiag) 4248 << T << From->getSourceRange(); 4249 return Owned(From); 4250 } 4251 4252 // We must have a complete class type. 4253 if (RequireCompleteType(Loc, T, IncompleteDiag)) 4254 return Owned(From); 4255 4256 // Look for a conversion to an integral or enumeration type. 4257 UnresolvedSet<4> ViableConversions; 4258 UnresolvedSet<4> ExplicitConversions; 4259 const UnresolvedSetImpl *Conversions 4260 = cast<CXXRecordDecl>(RecordTy->getDecl())->getVisibleConversionFunctions(); 4261 4262 bool HadMultipleCandidates = (Conversions->size() > 1); 4263 4264 for (UnresolvedSetImpl::iterator I = Conversions->begin(), 4265 E = Conversions->end(); 4266 I != E; 4267 ++I) { 4268 if (CXXConversionDecl *Conversion 4269 = dyn_cast<CXXConversionDecl>((*I)->getUnderlyingDecl())) 4270 if (Conversion->getConversionType().getNonReferenceType() 4271 ->isIntegralOrEnumerationType()) { 4272 if (Conversion->isExplicit()) 4273 ExplicitConversions.addDecl(I.getDecl(), I.getAccess()); 4274 else 4275 ViableConversions.addDecl(I.getDecl(), I.getAccess()); 4276 } 4277 } 4278 4279 switch (ViableConversions.size()) { 4280 case 0: 4281 if (ExplicitConversions.size() == 1) { 4282 DeclAccessPair Found = ExplicitConversions[0]; 4283 CXXConversionDecl *Conversion 4284 = cast<CXXConversionDecl>(Found->getUnderlyingDecl()); 4285 4286 // The user probably meant to invoke the given explicit 4287 // conversion; use it. 4288 QualType ConvTy 4289 = Conversion->getConversionType().getNonReferenceType(); 4290 std::string TypeStr; 4291 ConvTy.getAsStringInternal(TypeStr, getPrintingPolicy()); 4292 4293 Diag(Loc, ExplicitConvDiag) 4294 << T << ConvTy 4295 << FixItHint::CreateInsertion(From->getLocStart(), 4296 "static_cast<" + TypeStr + ">(") 4297 << FixItHint::CreateInsertion(PP.getLocForEndOfToken(From->getLocEnd()), 4298 ")"); 4299 Diag(Conversion->getLocation(), ExplicitConvNote) 4300 << ConvTy->isEnumeralType() << ConvTy; 4301 4302 // If we aren't in a SFINAE context, build a call to the 4303 // explicit conversion function. 4304 if (isSFINAEContext()) 4305 return ExprError(); 4306 4307 CheckMemberOperatorAccess(From->getExprLoc(), From, 0, Found); 4308 ExprResult Result = BuildCXXMemberCallExpr(From, Found, Conversion, 4309 HadMultipleCandidates); 4310 if (Result.isInvalid()) 4311 return ExprError(); 4312 // Record usage of conversion in an implicit cast. 4313 From = ImplicitCastExpr::Create(Context, Result.get()->getType(), 4314 CK_UserDefinedConversion, 4315 Result.get(), 0, 4316 Result.get()->getValueKind()); 4317 } 4318 4319 // We'll complain below about a non-integral condition type. 4320 break; 4321 4322 case 1: { 4323 // Apply this conversion. 4324 DeclAccessPair Found = ViableConversions[0]; 4325 CheckMemberOperatorAccess(From->getExprLoc(), From, 0, Found); 4326 4327 CXXConversionDecl *Conversion 4328 = cast<CXXConversionDecl>(Found->getUnderlyingDecl()); 4329 QualType ConvTy 4330 = Conversion->getConversionType().getNonReferenceType(); 4331 if (ConvDiag.getDiagID()) { 4332 if (isSFINAEContext()) 4333 return ExprError(); 4334 4335 Diag(Loc, ConvDiag) 4336 << T << ConvTy->isEnumeralType() << ConvTy << From->getSourceRange(); 4337 } 4338 4339 ExprResult Result = BuildCXXMemberCallExpr(From, Found, Conversion, 4340 HadMultipleCandidates); 4341 if (Result.isInvalid()) 4342 return ExprError(); 4343 // Record usage of conversion in an implicit cast. 4344 From = ImplicitCastExpr::Create(Context, Result.get()->getType(), 4345 CK_UserDefinedConversion, 4346 Result.get(), 0, 4347 Result.get()->getValueKind()); 4348 break; 4349 } 4350 4351 default: 4352 Diag(Loc, AmbigDiag) 4353 << T << From->getSourceRange(); 4354 for (unsigned I = 0, N = ViableConversions.size(); I != N; ++I) { 4355 CXXConversionDecl *Conv 4356 = cast<CXXConversionDecl>(ViableConversions[I]->getUnderlyingDecl()); 4357 QualType ConvTy = Conv->getConversionType().getNonReferenceType(); 4358 Diag(Conv->getLocation(), AmbigNote) 4359 << ConvTy->isEnumeralType() << ConvTy; 4360 } 4361 return Owned(From); 4362 } 4363 4364 if (!From->getType()->isIntegralOrEnumerationType()) 4365 Diag(Loc, NotIntDiag) 4366 << From->getType() << From->getSourceRange(); 4367 4368 return Owned(From); 4369} 4370 4371/// AddOverloadCandidate - Adds the given function to the set of 4372/// candidate functions, using the given function call arguments. If 4373/// @p SuppressUserConversions, then don't allow user-defined 4374/// conversions via constructors or conversion operators. 4375/// 4376/// \para PartialOverloading true if we are performing "partial" overloading 4377/// based on an incomplete set of function arguments. This feature is used by 4378/// code completion. 4379void 4380Sema::AddOverloadCandidate(FunctionDecl *Function, 4381 DeclAccessPair FoundDecl, 4382 Expr **Args, unsigned NumArgs, 4383 OverloadCandidateSet& CandidateSet, 4384 bool SuppressUserConversions, 4385 bool PartialOverloading) { 4386 const FunctionProtoType* Proto 4387 = dyn_cast<FunctionProtoType>(Function->getType()->getAs<FunctionType>()); 4388 assert(Proto && "Functions without a prototype cannot be overloaded"); 4389 assert(!Function->getDescribedFunctionTemplate() && 4390 "Use AddTemplateOverloadCandidate for function templates"); 4391 4392 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Function)) { 4393 if (!isa<CXXConstructorDecl>(Method)) { 4394 // If we get here, it's because we're calling a member function 4395 // that is named without a member access expression (e.g., 4396 // "this->f") that was either written explicitly or created 4397 // implicitly. This can happen with a qualified call to a member 4398 // function, e.g., X::f(). We use an empty type for the implied 4399 // object argument (C++ [over.call.func]p3), and the acting context 4400 // is irrelevant. 4401 AddMethodCandidate(Method, FoundDecl, Method->getParent(), 4402 QualType(), Expr::Classification::makeSimpleLValue(), 4403 Args, NumArgs, CandidateSet, 4404 SuppressUserConversions); 4405 return; 4406 } 4407 // We treat a constructor like a non-member function, since its object 4408 // argument doesn't participate in overload resolution. 4409 } 4410 4411 if (!CandidateSet.isNewCandidate(Function)) 4412 return; 4413 4414 // Overload resolution is always an unevaluated context. 4415 EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated); 4416 4417 if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Function)){ 4418 // C++ [class.copy]p3: 4419 // A member function template is never instantiated to perform the copy 4420 // of a class object to an object of its class type. 4421 QualType ClassType = Context.getTypeDeclType(Constructor->getParent()); 4422 if (NumArgs == 1 && 4423 Constructor->isSpecializationCopyingObject() && 4424 (Context.hasSameUnqualifiedType(ClassType, Args[0]->getType()) || 4425 IsDerivedFrom(Args[0]->getType(), ClassType))) 4426 return; 4427 } 4428 4429 // Add this candidate 4430 CandidateSet.push_back(OverloadCandidate()); 4431 OverloadCandidate& Candidate = CandidateSet.back(); 4432 Candidate.FoundDecl = FoundDecl; 4433 Candidate.Function = Function; 4434 Candidate.Viable = true; 4435 Candidate.IsSurrogate = false; 4436 Candidate.IgnoreObjectArgument = false; 4437 Candidate.ExplicitCallArguments = NumArgs; 4438 4439 unsigned NumArgsInProto = Proto->getNumArgs(); 4440 4441 // (C++ 13.3.2p2): A candidate function having fewer than m 4442 // parameters is viable only if it has an ellipsis in its parameter 4443 // list (8.3.5). 4444 if ((NumArgs + (PartialOverloading && NumArgs)) > NumArgsInProto && 4445 !Proto->isVariadic()) { 4446 Candidate.Viable = false; 4447 Candidate.FailureKind = ovl_fail_too_many_arguments; 4448 return; 4449 } 4450 4451 // (C++ 13.3.2p2): A candidate function having more than m parameters 4452 // is viable only if the (m+1)st parameter has a default argument 4453 // (8.3.6). For the purposes of overload resolution, the 4454 // parameter list is truncated on the right, so that there are 4455 // exactly m parameters. 4456 unsigned MinRequiredArgs = Function->getMinRequiredArguments(); 4457 if (NumArgs < MinRequiredArgs && !PartialOverloading) { 4458 // Not enough arguments. 4459 Candidate.Viable = false; 4460 Candidate.FailureKind = ovl_fail_too_few_arguments; 4461 return; 4462 } 4463 4464 // (CUDA B.1): Check for invalid calls between targets. 4465 if (getLangOptions().CUDA) 4466 if (const FunctionDecl *Caller = dyn_cast<FunctionDecl>(CurContext)) 4467 if (CheckCUDATarget(Caller, Function)) { 4468 Candidate.Viable = false; 4469 Candidate.FailureKind = ovl_fail_bad_target; 4470 return; 4471 } 4472 4473 // Determine the implicit conversion sequences for each of the 4474 // arguments. 4475 Candidate.Conversions.resize(NumArgs); 4476 for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) { 4477 if (ArgIdx < NumArgsInProto) { 4478 // (C++ 13.3.2p3): for F to be a viable function, there shall 4479 // exist for each argument an implicit conversion sequence 4480 // (13.3.3.1) that converts that argument to the corresponding 4481 // parameter of F. 4482 QualType ParamType = Proto->getArgType(ArgIdx); 4483 Candidate.Conversions[ArgIdx] 4484 = TryCopyInitialization(*this, Args[ArgIdx], ParamType, 4485 SuppressUserConversions, 4486 /*InOverloadResolution=*/true, 4487 /*AllowObjCWritebackConversion=*/ 4488 getLangOptions().ObjCAutoRefCount); 4489 if (Candidate.Conversions[ArgIdx].isBad()) { 4490 Candidate.Viable = false; 4491 Candidate.FailureKind = ovl_fail_bad_conversion; 4492 break; 4493 } 4494 } else { 4495 // (C++ 13.3.2p2): For the purposes of overload resolution, any 4496 // argument for which there is no corresponding parameter is 4497 // considered to ""match the ellipsis" (C+ 13.3.3.1.3). 4498 Candidate.Conversions[ArgIdx].setEllipsis(); 4499 } 4500 } 4501} 4502 4503/// \brief Add all of the function declarations in the given function set to 4504/// the overload canddiate set. 4505void Sema::AddFunctionCandidates(const UnresolvedSetImpl &Fns, 4506 Expr **Args, unsigned NumArgs, 4507 OverloadCandidateSet& CandidateSet, 4508 bool SuppressUserConversions) { 4509 for (UnresolvedSetIterator F = Fns.begin(), E = Fns.end(); F != E; ++F) { 4510 NamedDecl *D = F.getDecl()->getUnderlyingDecl(); 4511 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { 4512 if (isa<CXXMethodDecl>(FD) && !cast<CXXMethodDecl>(FD)->isStatic()) 4513 AddMethodCandidate(cast<CXXMethodDecl>(FD), F.getPair(), 4514 cast<CXXMethodDecl>(FD)->getParent(), 4515 Args[0]->getType(), Args[0]->Classify(Context), 4516 Args + 1, NumArgs - 1, 4517 CandidateSet, SuppressUserConversions); 4518 else 4519 AddOverloadCandidate(FD, F.getPair(), Args, NumArgs, CandidateSet, 4520 SuppressUserConversions); 4521 } else { 4522 FunctionTemplateDecl *FunTmpl = cast<FunctionTemplateDecl>(D); 4523 if (isa<CXXMethodDecl>(FunTmpl->getTemplatedDecl()) && 4524 !cast<CXXMethodDecl>(FunTmpl->getTemplatedDecl())->isStatic()) 4525 AddMethodTemplateCandidate(FunTmpl, F.getPair(), 4526 cast<CXXRecordDecl>(FunTmpl->getDeclContext()), 4527 /*FIXME: explicit args */ 0, 4528 Args[0]->getType(), 4529 Args[0]->Classify(Context), 4530 Args + 1, NumArgs - 1, 4531 CandidateSet, 4532 SuppressUserConversions); 4533 else 4534 AddTemplateOverloadCandidate(FunTmpl, F.getPair(), 4535 /*FIXME: explicit args */ 0, 4536 Args, NumArgs, CandidateSet, 4537 SuppressUserConversions); 4538 } 4539 } 4540} 4541 4542/// AddMethodCandidate - Adds a named decl (which is some kind of 4543/// method) as a method candidate to the given overload set. 4544void Sema::AddMethodCandidate(DeclAccessPair FoundDecl, 4545 QualType ObjectType, 4546 Expr::Classification ObjectClassification, 4547 Expr **Args, unsigned NumArgs, 4548 OverloadCandidateSet& CandidateSet, 4549 bool SuppressUserConversions) { 4550 NamedDecl *Decl = FoundDecl.getDecl(); 4551 CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(Decl->getDeclContext()); 4552 4553 if (isa<UsingShadowDecl>(Decl)) 4554 Decl = cast<UsingShadowDecl>(Decl)->getTargetDecl(); 4555 4556 if (FunctionTemplateDecl *TD = dyn_cast<FunctionTemplateDecl>(Decl)) { 4557 assert(isa<CXXMethodDecl>(TD->getTemplatedDecl()) && 4558 "Expected a member function template"); 4559 AddMethodTemplateCandidate(TD, FoundDecl, ActingContext, 4560 /*ExplicitArgs*/ 0, 4561 ObjectType, ObjectClassification, Args, NumArgs, 4562 CandidateSet, 4563 SuppressUserConversions); 4564 } else { 4565 AddMethodCandidate(cast<CXXMethodDecl>(Decl), FoundDecl, ActingContext, 4566 ObjectType, ObjectClassification, Args, NumArgs, 4567 CandidateSet, SuppressUserConversions); 4568 } 4569} 4570 4571/// AddMethodCandidate - Adds the given C++ member function to the set 4572/// of candidate functions, using the given function call arguments 4573/// and the object argument (@c Object). For example, in a call 4574/// @c o.f(a1,a2), @c Object will contain @c o and @c Args will contain 4575/// both @c a1 and @c a2. If @p SuppressUserConversions, then don't 4576/// allow user-defined conversions via constructors or conversion 4577/// operators. 4578void 4579Sema::AddMethodCandidate(CXXMethodDecl *Method, DeclAccessPair FoundDecl, 4580 CXXRecordDecl *ActingContext, QualType ObjectType, 4581 Expr::Classification ObjectClassification, 4582 Expr **Args, unsigned NumArgs, 4583 OverloadCandidateSet& CandidateSet, 4584 bool SuppressUserConversions) { 4585 const FunctionProtoType* Proto 4586 = dyn_cast<FunctionProtoType>(Method->getType()->getAs<FunctionType>()); 4587 assert(Proto && "Methods without a prototype cannot be overloaded"); 4588 assert(!isa<CXXConstructorDecl>(Method) && 4589 "Use AddOverloadCandidate for constructors"); 4590 4591 if (!CandidateSet.isNewCandidate(Method)) 4592 return; 4593 4594 // Overload resolution is always an unevaluated context. 4595 EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated); 4596 4597 // Add this candidate 4598 CandidateSet.push_back(OverloadCandidate()); 4599 OverloadCandidate& Candidate = CandidateSet.back(); 4600 Candidate.FoundDecl = FoundDecl; 4601 Candidate.Function = Method; 4602 Candidate.IsSurrogate = false; 4603 Candidate.IgnoreObjectArgument = false; 4604 Candidate.ExplicitCallArguments = NumArgs; 4605 4606 unsigned NumArgsInProto = Proto->getNumArgs(); 4607 4608 // (C++ 13.3.2p2): A candidate function having fewer than m 4609 // parameters is viable only if it has an ellipsis in its parameter 4610 // list (8.3.5). 4611 if (NumArgs > NumArgsInProto && !Proto->isVariadic()) { 4612 Candidate.Viable = false; 4613 Candidate.FailureKind = ovl_fail_too_many_arguments; 4614 return; 4615 } 4616 4617 // (C++ 13.3.2p2): A candidate function having more than m parameters 4618 // is viable only if the (m+1)st parameter has a default argument 4619 // (8.3.6). For the purposes of overload resolution, the 4620 // parameter list is truncated on the right, so that there are 4621 // exactly m parameters. 4622 unsigned MinRequiredArgs = Method->getMinRequiredArguments(); 4623 if (NumArgs < MinRequiredArgs) { 4624 // Not enough arguments. 4625 Candidate.Viable = false; 4626 Candidate.FailureKind = ovl_fail_too_few_arguments; 4627 return; 4628 } 4629 4630 Candidate.Viable = true; 4631 Candidate.Conversions.resize(NumArgs + 1); 4632 4633 if (Method->isStatic() || ObjectType.isNull()) 4634 // The implicit object argument is ignored. 4635 Candidate.IgnoreObjectArgument = true; 4636 else { 4637 // Determine the implicit conversion sequence for the object 4638 // parameter. 4639 Candidate.Conversions[0] 4640 = TryObjectArgumentInitialization(*this, ObjectType, ObjectClassification, 4641 Method, ActingContext); 4642 if (Candidate.Conversions[0].isBad()) { 4643 Candidate.Viable = false; 4644 Candidate.FailureKind = ovl_fail_bad_conversion; 4645 return; 4646 } 4647 } 4648 4649 // Determine the implicit conversion sequences for each of the 4650 // arguments. 4651 for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) { 4652 if (ArgIdx < NumArgsInProto) { 4653 // (C++ 13.3.2p3): for F to be a viable function, there shall 4654 // exist for each argument an implicit conversion sequence 4655 // (13.3.3.1) that converts that argument to the corresponding 4656 // parameter of F. 4657 QualType ParamType = Proto->getArgType(ArgIdx); 4658 Candidate.Conversions[ArgIdx + 1] 4659 = TryCopyInitialization(*this, Args[ArgIdx], ParamType, 4660 SuppressUserConversions, 4661 /*InOverloadResolution=*/true, 4662 /*AllowObjCWritebackConversion=*/ 4663 getLangOptions().ObjCAutoRefCount); 4664 if (Candidate.Conversions[ArgIdx + 1].isBad()) { 4665 Candidate.Viable = false; 4666 Candidate.FailureKind = ovl_fail_bad_conversion; 4667 break; 4668 } 4669 } else { 4670 // (C++ 13.3.2p2): For the purposes of overload resolution, any 4671 // argument for which there is no corresponding parameter is 4672 // considered to ""match the ellipsis" (C+ 13.3.3.1.3). 4673 Candidate.Conversions[ArgIdx + 1].setEllipsis(); 4674 } 4675 } 4676} 4677 4678/// \brief Add a C++ member function template as a candidate to the candidate 4679/// set, using template argument deduction to produce an appropriate member 4680/// function template specialization. 4681void 4682Sema::AddMethodTemplateCandidate(FunctionTemplateDecl *MethodTmpl, 4683 DeclAccessPair FoundDecl, 4684 CXXRecordDecl *ActingContext, 4685 TemplateArgumentListInfo *ExplicitTemplateArgs, 4686 QualType ObjectType, 4687 Expr::Classification ObjectClassification, 4688 Expr **Args, unsigned NumArgs, 4689 OverloadCandidateSet& CandidateSet, 4690 bool SuppressUserConversions) { 4691 if (!CandidateSet.isNewCandidate(MethodTmpl)) 4692 return; 4693 4694 // C++ [over.match.funcs]p7: 4695 // In each case where a candidate is a function template, candidate 4696 // function template specializations are generated using template argument 4697 // deduction (14.8.3, 14.8.2). Those candidates are then handled as 4698 // candidate functions in the usual way.113) A given name can refer to one 4699 // or more function templates and also to a set of overloaded non-template 4700 // functions. In such a case, the candidate functions generated from each 4701 // function template are combined with the set of non-template candidate 4702 // functions. 4703 TemplateDeductionInfo Info(Context, CandidateSet.getLocation()); 4704 FunctionDecl *Specialization = 0; 4705 if (TemplateDeductionResult Result 4706 = DeduceTemplateArguments(MethodTmpl, ExplicitTemplateArgs, 4707 Args, NumArgs, Specialization, Info)) { 4708 CandidateSet.push_back(OverloadCandidate()); 4709 OverloadCandidate &Candidate = CandidateSet.back(); 4710 Candidate.FoundDecl = FoundDecl; 4711 Candidate.Function = MethodTmpl->getTemplatedDecl(); 4712 Candidate.Viable = false; 4713 Candidate.FailureKind = ovl_fail_bad_deduction; 4714 Candidate.IsSurrogate = false; 4715 Candidate.IgnoreObjectArgument = false; 4716 Candidate.ExplicitCallArguments = NumArgs; 4717 Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result, 4718 Info); 4719 return; 4720 } 4721 4722 // Add the function template specialization produced by template argument 4723 // deduction as a candidate. 4724 assert(Specialization && "Missing member function template specialization?"); 4725 assert(isa<CXXMethodDecl>(Specialization) && 4726 "Specialization is not a member function?"); 4727 AddMethodCandidate(cast<CXXMethodDecl>(Specialization), FoundDecl, 4728 ActingContext, ObjectType, ObjectClassification, 4729 Args, NumArgs, CandidateSet, SuppressUserConversions); 4730} 4731 4732/// \brief Add a C++ function template specialization as a candidate 4733/// in the candidate set, using template argument deduction to produce 4734/// an appropriate function template specialization. 4735void 4736Sema::AddTemplateOverloadCandidate(FunctionTemplateDecl *FunctionTemplate, 4737 DeclAccessPair FoundDecl, 4738 TemplateArgumentListInfo *ExplicitTemplateArgs, 4739 Expr **Args, unsigned NumArgs, 4740 OverloadCandidateSet& CandidateSet, 4741 bool SuppressUserConversions) { 4742 if (!CandidateSet.isNewCandidate(FunctionTemplate)) 4743 return; 4744 4745 // C++ [over.match.funcs]p7: 4746 // In each case where a candidate is a function template, candidate 4747 // function template specializations are generated using template argument 4748 // deduction (14.8.3, 14.8.2). Those candidates are then handled as 4749 // candidate functions in the usual way.113) A given name can refer to one 4750 // or more function templates and also to a set of overloaded non-template 4751 // functions. In such a case, the candidate functions generated from each 4752 // function template are combined with the set of non-template candidate 4753 // functions. 4754 TemplateDeductionInfo Info(Context, CandidateSet.getLocation()); 4755 FunctionDecl *Specialization = 0; 4756 if (TemplateDeductionResult Result 4757 = DeduceTemplateArguments(FunctionTemplate, ExplicitTemplateArgs, 4758 Args, NumArgs, Specialization, Info)) { 4759 CandidateSet.push_back(OverloadCandidate()); 4760 OverloadCandidate &Candidate = CandidateSet.back(); 4761 Candidate.FoundDecl = FoundDecl; 4762 Candidate.Function = FunctionTemplate->getTemplatedDecl(); 4763 Candidate.Viable = false; 4764 Candidate.FailureKind = ovl_fail_bad_deduction; 4765 Candidate.IsSurrogate = false; 4766 Candidate.IgnoreObjectArgument = false; 4767 Candidate.ExplicitCallArguments = NumArgs; 4768 Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result, 4769 Info); 4770 return; 4771 } 4772 4773 // Add the function template specialization produced by template argument 4774 // deduction as a candidate. 4775 assert(Specialization && "Missing function template specialization?"); 4776 AddOverloadCandidate(Specialization, FoundDecl, Args, NumArgs, CandidateSet, 4777 SuppressUserConversions); 4778} 4779 4780/// AddConversionCandidate - Add a C++ conversion function as a 4781/// candidate in the candidate set (C++ [over.match.conv], 4782/// C++ [over.match.copy]). From is the expression we're converting from, 4783/// and ToType is the type that we're eventually trying to convert to 4784/// (which may or may not be the same type as the type that the 4785/// conversion function produces). 4786void 4787Sema::AddConversionCandidate(CXXConversionDecl *Conversion, 4788 DeclAccessPair FoundDecl, 4789 CXXRecordDecl *ActingContext, 4790 Expr *From, QualType ToType, 4791 OverloadCandidateSet& CandidateSet) { 4792 assert(!Conversion->getDescribedFunctionTemplate() && 4793 "Conversion function templates use AddTemplateConversionCandidate"); 4794 QualType ConvType = Conversion->getConversionType().getNonReferenceType(); 4795 if (!CandidateSet.isNewCandidate(Conversion)) 4796 return; 4797 4798 // Overload resolution is always an unevaluated context. 4799 EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated); 4800 4801 // Add this candidate 4802 CandidateSet.push_back(OverloadCandidate()); 4803 OverloadCandidate& Candidate = CandidateSet.back(); 4804 Candidate.FoundDecl = FoundDecl; 4805 Candidate.Function = Conversion; 4806 Candidate.IsSurrogate = false; 4807 Candidate.IgnoreObjectArgument = false; 4808 Candidate.FinalConversion.setAsIdentityConversion(); 4809 Candidate.FinalConversion.setFromType(ConvType); 4810 Candidate.FinalConversion.setAllToTypes(ToType); 4811 Candidate.Viable = true; 4812 Candidate.Conversions.resize(1); 4813 Candidate.ExplicitCallArguments = 1; 4814 4815 // C++ [over.match.funcs]p4: 4816 // For conversion functions, the function is considered to be a member of 4817 // the class of the implicit implied object argument for the purpose of 4818 // defining the type of the implicit object parameter. 4819 // 4820 // Determine the implicit conversion sequence for the implicit 4821 // object parameter. 4822 QualType ImplicitParamType = From->getType(); 4823 if (const PointerType *FromPtrType = ImplicitParamType->getAs<PointerType>()) 4824 ImplicitParamType = FromPtrType->getPointeeType(); 4825 CXXRecordDecl *ConversionContext 4826 = cast<CXXRecordDecl>(ImplicitParamType->getAs<RecordType>()->getDecl()); 4827 4828 Candidate.Conversions[0] 4829 = TryObjectArgumentInitialization(*this, From->getType(), 4830 From->Classify(Context), 4831 Conversion, ConversionContext); 4832 4833 if (Candidate.Conversions[0].isBad()) { 4834 Candidate.Viable = false; 4835 Candidate.FailureKind = ovl_fail_bad_conversion; 4836 return; 4837 } 4838 4839 // We won't go through a user-define type conversion function to convert a 4840 // derived to base as such conversions are given Conversion Rank. They only 4841 // go through a copy constructor. 13.3.3.1.2-p4 [over.ics.user] 4842 QualType FromCanon 4843 = Context.getCanonicalType(From->getType().getUnqualifiedType()); 4844 QualType ToCanon = Context.getCanonicalType(ToType).getUnqualifiedType(); 4845 if (FromCanon == ToCanon || IsDerivedFrom(FromCanon, ToCanon)) { 4846 Candidate.Viable = false; 4847 Candidate.FailureKind = ovl_fail_trivial_conversion; 4848 return; 4849 } 4850 4851 // To determine what the conversion from the result of calling the 4852 // conversion function to the type we're eventually trying to 4853 // convert to (ToType), we need to synthesize a call to the 4854 // conversion function and attempt copy initialization from it. This 4855 // makes sure that we get the right semantics with respect to 4856 // lvalues/rvalues and the type. Fortunately, we can allocate this 4857 // call on the stack and we don't need its arguments to be 4858 // well-formed. 4859 DeclRefExpr ConversionRef(Conversion, Conversion->getType(), 4860 VK_LValue, From->getLocStart()); 4861 ImplicitCastExpr ConversionFn(ImplicitCastExpr::OnStack, 4862 Context.getPointerType(Conversion->getType()), 4863 CK_FunctionToPointerDecay, 4864 &ConversionRef, VK_RValue); 4865 4866 QualType ConversionType = Conversion->getConversionType(); 4867 if (RequireCompleteType(From->getLocStart(), ConversionType, 0)) { 4868 Candidate.Viable = false; 4869 Candidate.FailureKind = ovl_fail_bad_final_conversion; 4870 return; 4871 } 4872 4873 ExprValueKind VK = Expr::getValueKindForType(ConversionType); 4874 4875 // Note that it is safe to allocate CallExpr on the stack here because 4876 // there are 0 arguments (i.e., nothing is allocated using ASTContext's 4877 // allocator). 4878 QualType CallResultType = ConversionType.getNonLValueExprType(Context); 4879 CallExpr Call(Context, &ConversionFn, 0, 0, CallResultType, VK, 4880 From->getLocStart()); 4881 ImplicitConversionSequence ICS = 4882 TryCopyInitialization(*this, &Call, ToType, 4883 /*SuppressUserConversions=*/true, 4884 /*InOverloadResolution=*/false, 4885 /*AllowObjCWritebackConversion=*/false); 4886 4887 switch (ICS.getKind()) { 4888 case ImplicitConversionSequence::StandardConversion: 4889 Candidate.FinalConversion = ICS.Standard; 4890 4891 // C++ [over.ics.user]p3: 4892 // If the user-defined conversion is specified by a specialization of a 4893 // conversion function template, the second standard conversion sequence 4894 // shall have exact match rank. 4895 if (Conversion->getPrimaryTemplate() && 4896 GetConversionRank(ICS.Standard.Second) != ICR_Exact_Match) { 4897 Candidate.Viable = false; 4898 Candidate.FailureKind = ovl_fail_final_conversion_not_exact; 4899 } 4900 4901 // C++0x [dcl.init.ref]p5: 4902 // In the second case, if the reference is an rvalue reference and 4903 // the second standard conversion sequence of the user-defined 4904 // conversion sequence includes an lvalue-to-rvalue conversion, the 4905 // program is ill-formed. 4906 if (ToType->isRValueReferenceType() && 4907 ICS.Standard.First == ICK_Lvalue_To_Rvalue) { 4908 Candidate.Viable = false; 4909 Candidate.FailureKind = ovl_fail_bad_final_conversion; 4910 } 4911 break; 4912 4913 case ImplicitConversionSequence::BadConversion: 4914 Candidate.Viable = false; 4915 Candidate.FailureKind = ovl_fail_bad_final_conversion; 4916 break; 4917 4918 default: 4919 llvm_unreachable( 4920 "Can only end up with a standard conversion sequence or failure"); 4921 } 4922} 4923 4924/// \brief Adds a conversion function template specialization 4925/// candidate to the overload set, using template argument deduction 4926/// to deduce the template arguments of the conversion function 4927/// template from the type that we are converting to (C++ 4928/// [temp.deduct.conv]). 4929void 4930Sema::AddTemplateConversionCandidate(FunctionTemplateDecl *FunctionTemplate, 4931 DeclAccessPair FoundDecl, 4932 CXXRecordDecl *ActingDC, 4933 Expr *From, QualType ToType, 4934 OverloadCandidateSet &CandidateSet) { 4935 assert(isa<CXXConversionDecl>(FunctionTemplate->getTemplatedDecl()) && 4936 "Only conversion function templates permitted here"); 4937 4938 if (!CandidateSet.isNewCandidate(FunctionTemplate)) 4939 return; 4940 4941 TemplateDeductionInfo Info(Context, CandidateSet.getLocation()); 4942 CXXConversionDecl *Specialization = 0; 4943 if (TemplateDeductionResult Result 4944 = DeduceTemplateArguments(FunctionTemplate, ToType, 4945 Specialization, Info)) { 4946 CandidateSet.push_back(OverloadCandidate()); 4947 OverloadCandidate &Candidate = CandidateSet.back(); 4948 Candidate.FoundDecl = FoundDecl; 4949 Candidate.Function = FunctionTemplate->getTemplatedDecl(); 4950 Candidate.Viable = false; 4951 Candidate.FailureKind = ovl_fail_bad_deduction; 4952 Candidate.IsSurrogate = false; 4953 Candidate.IgnoreObjectArgument = false; 4954 Candidate.ExplicitCallArguments = 1; 4955 Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result, 4956 Info); 4957 return; 4958 } 4959 4960 // Add the conversion function template specialization produced by 4961 // template argument deduction as a candidate. 4962 assert(Specialization && "Missing function template specialization?"); 4963 AddConversionCandidate(Specialization, FoundDecl, ActingDC, From, ToType, 4964 CandidateSet); 4965} 4966 4967/// AddSurrogateCandidate - Adds a "surrogate" candidate function that 4968/// converts the given @c Object to a function pointer via the 4969/// conversion function @c Conversion, and then attempts to call it 4970/// with the given arguments (C++ [over.call.object]p2-4). Proto is 4971/// the type of function that we'll eventually be calling. 4972void Sema::AddSurrogateCandidate(CXXConversionDecl *Conversion, 4973 DeclAccessPair FoundDecl, 4974 CXXRecordDecl *ActingContext, 4975 const FunctionProtoType *Proto, 4976 Expr *Object, 4977 Expr **Args, unsigned NumArgs, 4978 OverloadCandidateSet& CandidateSet) { 4979 if (!CandidateSet.isNewCandidate(Conversion)) 4980 return; 4981 4982 // Overload resolution is always an unevaluated context. 4983 EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated); 4984 4985 CandidateSet.push_back(OverloadCandidate()); 4986 OverloadCandidate& Candidate = CandidateSet.back(); 4987 Candidate.FoundDecl = FoundDecl; 4988 Candidate.Function = 0; 4989 Candidate.Surrogate = Conversion; 4990 Candidate.Viable = true; 4991 Candidate.IsSurrogate = true; 4992 Candidate.IgnoreObjectArgument = false; 4993 Candidate.Conversions.resize(NumArgs + 1); 4994 Candidate.ExplicitCallArguments = NumArgs; 4995 4996 // Determine the implicit conversion sequence for the implicit 4997 // object parameter. 4998 ImplicitConversionSequence ObjectInit 4999 = TryObjectArgumentInitialization(*this, Object->getType(), 5000 Object->Classify(Context), 5001 Conversion, ActingContext); 5002 if (ObjectInit.isBad()) { 5003 Candidate.Viable = false; 5004 Candidate.FailureKind = ovl_fail_bad_conversion; 5005 Candidate.Conversions[0] = ObjectInit; 5006 return; 5007 } 5008 5009 // The first conversion is actually a user-defined conversion whose 5010 // first conversion is ObjectInit's standard conversion (which is 5011 // effectively a reference binding). Record it as such. 5012 Candidate.Conversions[0].setUserDefined(); 5013 Candidate.Conversions[0].UserDefined.Before = ObjectInit.Standard; 5014 Candidate.Conversions[0].UserDefined.EllipsisConversion = false; 5015 Candidate.Conversions[0].UserDefined.HadMultipleCandidates = false; 5016 Candidate.Conversions[0].UserDefined.ConversionFunction = Conversion; 5017 Candidate.Conversions[0].UserDefined.FoundConversionFunction = FoundDecl; 5018 Candidate.Conversions[0].UserDefined.After 5019 = Candidate.Conversions[0].UserDefined.Before; 5020 Candidate.Conversions[0].UserDefined.After.setAsIdentityConversion(); 5021 5022 // Find the 5023 unsigned NumArgsInProto = Proto->getNumArgs(); 5024 5025 // (C++ 13.3.2p2): A candidate function having fewer than m 5026 // parameters is viable only if it has an ellipsis in its parameter 5027 // list (8.3.5). 5028 if (NumArgs > NumArgsInProto && !Proto->isVariadic()) { 5029 Candidate.Viable = false; 5030 Candidate.FailureKind = ovl_fail_too_many_arguments; 5031 return; 5032 } 5033 5034 // Function types don't have any default arguments, so just check if 5035 // we have enough arguments. 5036 if (NumArgs < NumArgsInProto) { 5037 // Not enough arguments. 5038 Candidate.Viable = false; 5039 Candidate.FailureKind = ovl_fail_too_few_arguments; 5040 return; 5041 } 5042 5043 // Determine the implicit conversion sequences for each of the 5044 // arguments. 5045 for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) { 5046 if (ArgIdx < NumArgsInProto) { 5047 // (C++ 13.3.2p3): for F to be a viable function, there shall 5048 // exist for each argument an implicit conversion sequence 5049 // (13.3.3.1) that converts that argument to the corresponding 5050 // parameter of F. 5051 QualType ParamType = Proto->getArgType(ArgIdx); 5052 Candidate.Conversions[ArgIdx + 1] 5053 = TryCopyInitialization(*this, Args[ArgIdx], ParamType, 5054 /*SuppressUserConversions=*/false, 5055 /*InOverloadResolution=*/false, 5056 /*AllowObjCWritebackConversion=*/ 5057 getLangOptions().ObjCAutoRefCount); 5058 if (Candidate.Conversions[ArgIdx + 1].isBad()) { 5059 Candidate.Viable = false; 5060 Candidate.FailureKind = ovl_fail_bad_conversion; 5061 break; 5062 } 5063 } else { 5064 // (C++ 13.3.2p2): For the purposes of overload resolution, any 5065 // argument for which there is no corresponding parameter is 5066 // considered to ""match the ellipsis" (C+ 13.3.3.1.3). 5067 Candidate.Conversions[ArgIdx + 1].setEllipsis(); 5068 } 5069 } 5070} 5071 5072/// \brief Add overload candidates for overloaded operators that are 5073/// member functions. 5074/// 5075/// Add the overloaded operator candidates that are member functions 5076/// for the operator Op that was used in an operator expression such 5077/// as "x Op y". , Args/NumArgs provides the operator arguments, and 5078/// CandidateSet will store the added overload candidates. (C++ 5079/// [over.match.oper]). 5080void Sema::AddMemberOperatorCandidates(OverloadedOperatorKind Op, 5081 SourceLocation OpLoc, 5082 Expr **Args, unsigned NumArgs, 5083 OverloadCandidateSet& CandidateSet, 5084 SourceRange OpRange) { 5085 DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op); 5086 5087 // C++ [over.match.oper]p3: 5088 // For a unary operator @ with an operand of a type whose 5089 // cv-unqualified version is T1, and for a binary operator @ with 5090 // a left operand of a type whose cv-unqualified version is T1 and 5091 // a right operand of a type whose cv-unqualified version is T2, 5092 // three sets of candidate functions, designated member 5093 // candidates, non-member candidates and built-in candidates, are 5094 // constructed as follows: 5095 QualType T1 = Args[0]->getType(); 5096 5097 // -- If T1 is a class type, the set of member candidates is the 5098 // result of the qualified lookup of T1::operator@ 5099 // (13.3.1.1.1); otherwise, the set of member candidates is 5100 // empty. 5101 if (const RecordType *T1Rec = T1->getAs<RecordType>()) { 5102 // Complete the type if it can be completed. Otherwise, we're done. 5103 if (RequireCompleteType(OpLoc, T1, PDiag())) 5104 return; 5105 5106 LookupResult Operators(*this, OpName, OpLoc, LookupOrdinaryName); 5107 LookupQualifiedName(Operators, T1Rec->getDecl()); 5108 Operators.suppressDiagnostics(); 5109 5110 for (LookupResult::iterator Oper = Operators.begin(), 5111 OperEnd = Operators.end(); 5112 Oper != OperEnd; 5113 ++Oper) 5114 AddMethodCandidate(Oper.getPair(), Args[0]->getType(), 5115 Args[0]->Classify(Context), Args + 1, NumArgs - 1, 5116 CandidateSet, 5117 /* SuppressUserConversions = */ false); 5118 } 5119} 5120 5121/// AddBuiltinCandidate - Add a candidate for a built-in 5122/// operator. ResultTy and ParamTys are the result and parameter types 5123/// of the built-in candidate, respectively. Args and NumArgs are the 5124/// arguments being passed to the candidate. IsAssignmentOperator 5125/// should be true when this built-in candidate is an assignment 5126/// operator. NumContextualBoolArguments is the number of arguments 5127/// (at the beginning of the argument list) that will be contextually 5128/// converted to bool. 5129void Sema::AddBuiltinCandidate(QualType ResultTy, QualType *ParamTys, 5130 Expr **Args, unsigned NumArgs, 5131 OverloadCandidateSet& CandidateSet, 5132 bool IsAssignmentOperator, 5133 unsigned NumContextualBoolArguments) { 5134 // Overload resolution is always an unevaluated context. 5135 EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated); 5136 5137 // Add this candidate 5138 CandidateSet.push_back(OverloadCandidate()); 5139 OverloadCandidate& Candidate = CandidateSet.back(); 5140 Candidate.FoundDecl = DeclAccessPair::make(0, AS_none); 5141 Candidate.Function = 0; 5142 Candidate.IsSurrogate = false; 5143 Candidate.IgnoreObjectArgument = false; 5144 Candidate.BuiltinTypes.ResultTy = ResultTy; 5145 for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) 5146 Candidate.BuiltinTypes.ParamTypes[ArgIdx] = ParamTys[ArgIdx]; 5147 5148 // Determine the implicit conversion sequences for each of the 5149 // arguments. 5150 Candidate.Viable = true; 5151 Candidate.Conversions.resize(NumArgs); 5152 Candidate.ExplicitCallArguments = NumArgs; 5153 for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) { 5154 // C++ [over.match.oper]p4: 5155 // For the built-in assignment operators, conversions of the 5156 // left operand are restricted as follows: 5157 // -- no temporaries are introduced to hold the left operand, and 5158 // -- no user-defined conversions are applied to the left 5159 // operand to achieve a type match with the left-most 5160 // parameter of a built-in candidate. 5161 // 5162 // We block these conversions by turning off user-defined 5163 // conversions, since that is the only way that initialization of 5164 // a reference to a non-class type can occur from something that 5165 // is not of the same type. 5166 if (ArgIdx < NumContextualBoolArguments) { 5167 assert(ParamTys[ArgIdx] == Context.BoolTy && 5168 "Contextual conversion to bool requires bool type"); 5169 Candidate.Conversions[ArgIdx] 5170 = TryContextuallyConvertToBool(*this, Args[ArgIdx]); 5171 } else { 5172 Candidate.Conversions[ArgIdx] 5173 = TryCopyInitialization(*this, Args[ArgIdx], ParamTys[ArgIdx], 5174 ArgIdx == 0 && IsAssignmentOperator, 5175 /*InOverloadResolution=*/false, 5176 /*AllowObjCWritebackConversion=*/ 5177 getLangOptions().ObjCAutoRefCount); 5178 } 5179 if (Candidate.Conversions[ArgIdx].isBad()) { 5180 Candidate.Viable = false; 5181 Candidate.FailureKind = ovl_fail_bad_conversion; 5182 break; 5183 } 5184 } 5185} 5186 5187/// BuiltinCandidateTypeSet - A set of types that will be used for the 5188/// candidate operator functions for built-in operators (C++ 5189/// [over.built]). The types are separated into pointer types and 5190/// enumeration types. 5191class BuiltinCandidateTypeSet { 5192 /// TypeSet - A set of types. 5193 typedef llvm::SmallPtrSet<QualType, 8> TypeSet; 5194 5195 /// PointerTypes - The set of pointer types that will be used in the 5196 /// built-in candidates. 5197 TypeSet PointerTypes; 5198 5199 /// MemberPointerTypes - The set of member pointer types that will be 5200 /// used in the built-in candidates. 5201 TypeSet MemberPointerTypes; 5202 5203 /// EnumerationTypes - The set of enumeration types that will be 5204 /// used in the built-in candidates. 5205 TypeSet EnumerationTypes; 5206 5207 /// \brief The set of vector types that will be used in the built-in 5208 /// candidates. 5209 TypeSet VectorTypes; 5210 5211 /// \brief A flag indicating non-record types are viable candidates 5212 bool HasNonRecordTypes; 5213 5214 /// \brief A flag indicating whether either arithmetic or enumeration types 5215 /// were present in the candidate set. 5216 bool HasArithmeticOrEnumeralTypes; 5217 5218 /// \brief A flag indicating whether the nullptr type was present in the 5219 /// candidate set. 5220 bool HasNullPtrType; 5221 5222 /// Sema - The semantic analysis instance where we are building the 5223 /// candidate type set. 5224 Sema &SemaRef; 5225 5226 /// Context - The AST context in which we will build the type sets. 5227 ASTContext &Context; 5228 5229 bool AddPointerWithMoreQualifiedTypeVariants(QualType Ty, 5230 const Qualifiers &VisibleQuals); 5231 bool AddMemberPointerWithMoreQualifiedTypeVariants(QualType Ty); 5232 5233public: 5234 /// iterator - Iterates through the types that are part of the set. 5235 typedef TypeSet::iterator iterator; 5236 5237 BuiltinCandidateTypeSet(Sema &SemaRef) 5238 : HasNonRecordTypes(false), 5239 HasArithmeticOrEnumeralTypes(false), 5240 HasNullPtrType(false), 5241 SemaRef(SemaRef), 5242 Context(SemaRef.Context) { } 5243 5244 void AddTypesConvertedFrom(QualType Ty, 5245 SourceLocation Loc, 5246 bool AllowUserConversions, 5247 bool AllowExplicitConversions, 5248 const Qualifiers &VisibleTypeConversionsQuals); 5249 5250 /// pointer_begin - First pointer type found; 5251 iterator pointer_begin() { return PointerTypes.begin(); } 5252 5253 /// pointer_end - Past the last pointer type found; 5254 iterator pointer_end() { return PointerTypes.end(); } 5255 5256 /// member_pointer_begin - First member pointer type found; 5257 iterator member_pointer_begin() { return MemberPointerTypes.begin(); } 5258 5259 /// member_pointer_end - Past the last member pointer type found; 5260 iterator member_pointer_end() { return MemberPointerTypes.end(); } 5261 5262 /// enumeration_begin - First enumeration type found; 5263 iterator enumeration_begin() { return EnumerationTypes.begin(); } 5264 5265 /// enumeration_end - Past the last enumeration type found; 5266 iterator enumeration_end() { return EnumerationTypes.end(); } 5267 5268 iterator vector_begin() { return VectorTypes.begin(); } 5269 iterator vector_end() { return VectorTypes.end(); } 5270 5271 bool hasNonRecordTypes() { return HasNonRecordTypes; } 5272 bool hasArithmeticOrEnumeralTypes() { return HasArithmeticOrEnumeralTypes; } 5273 bool hasNullPtrType() const { return HasNullPtrType; } 5274}; 5275 5276/// AddPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty to 5277/// the set of pointer types along with any more-qualified variants of 5278/// that type. For example, if @p Ty is "int const *", this routine 5279/// will add "int const *", "int const volatile *", "int const 5280/// restrict *", and "int const volatile restrict *" to the set of 5281/// pointer types. Returns true if the add of @p Ty itself succeeded, 5282/// false otherwise. 5283/// 5284/// FIXME: what to do about extended qualifiers? 5285bool 5286BuiltinCandidateTypeSet::AddPointerWithMoreQualifiedTypeVariants(QualType Ty, 5287 const Qualifiers &VisibleQuals) { 5288 5289 // Insert this type. 5290 if (!PointerTypes.insert(Ty)) 5291 return false; 5292 5293 QualType PointeeTy; 5294 const PointerType *PointerTy = Ty->getAs<PointerType>(); 5295 bool buildObjCPtr = false; 5296 if (!PointerTy) { 5297 if (const ObjCObjectPointerType *PTy = Ty->getAs<ObjCObjectPointerType>()) { 5298 PointeeTy = PTy->getPointeeType(); 5299 buildObjCPtr = true; 5300 } 5301 else 5302 llvm_unreachable("type was not a pointer type!"); 5303 } 5304 else 5305 PointeeTy = PointerTy->getPointeeType(); 5306 5307 // Don't add qualified variants of arrays. For one, they're not allowed 5308 // (the qualifier would sink to the element type), and for another, the 5309 // only overload situation where it matters is subscript or pointer +- int, 5310 // and those shouldn't have qualifier variants anyway. 5311 if (PointeeTy->isArrayType()) 5312 return true; 5313 unsigned BaseCVR = PointeeTy.getCVRQualifiers(); 5314 if (const ConstantArrayType *Array =Context.getAsConstantArrayType(PointeeTy)) 5315 BaseCVR = Array->getElementType().getCVRQualifiers(); 5316 bool hasVolatile = VisibleQuals.hasVolatile(); 5317 bool hasRestrict = VisibleQuals.hasRestrict(); 5318 5319 // Iterate through all strict supersets of BaseCVR. 5320 for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) { 5321 if ((CVR | BaseCVR) != CVR) continue; 5322 // Skip over Volatile/Restrict if no Volatile/Restrict found anywhere 5323 // in the types. 5324 if ((CVR & Qualifiers::Volatile) && !hasVolatile) continue; 5325 if ((CVR & Qualifiers::Restrict) && !hasRestrict) continue; 5326 QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR); 5327 if (!buildObjCPtr) 5328 PointerTypes.insert(Context.getPointerType(QPointeeTy)); 5329 else 5330 PointerTypes.insert(Context.getObjCObjectPointerType(QPointeeTy)); 5331 } 5332 5333 return true; 5334} 5335 5336/// AddMemberPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty 5337/// to the set of pointer types along with any more-qualified variants of 5338/// that type. For example, if @p Ty is "int const *", this routine 5339/// will add "int const *", "int const volatile *", "int const 5340/// restrict *", and "int const volatile restrict *" to the set of 5341/// pointer types. Returns true if the add of @p Ty itself succeeded, 5342/// false otherwise. 5343/// 5344/// FIXME: what to do about extended qualifiers? 5345bool 5346BuiltinCandidateTypeSet::AddMemberPointerWithMoreQualifiedTypeVariants( 5347 QualType Ty) { 5348 // Insert this type. 5349 if (!MemberPointerTypes.insert(Ty)) 5350 return false; 5351 5352 const MemberPointerType *PointerTy = Ty->getAs<MemberPointerType>(); 5353 assert(PointerTy && "type was not a member pointer type!"); 5354 5355 QualType PointeeTy = PointerTy->getPointeeType(); 5356 // Don't add qualified variants of arrays. For one, they're not allowed 5357 // (the qualifier would sink to the element type), and for another, the 5358 // only overload situation where it matters is subscript or pointer +- int, 5359 // and those shouldn't have qualifier variants anyway. 5360 if (PointeeTy->isArrayType()) 5361 return true; 5362 const Type *ClassTy = PointerTy->getClass(); 5363 5364 // Iterate through all strict supersets of the pointee type's CVR 5365 // qualifiers. 5366 unsigned BaseCVR = PointeeTy.getCVRQualifiers(); 5367 for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) { 5368 if ((CVR | BaseCVR) != CVR) continue; 5369 5370 QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR); 5371 MemberPointerTypes.insert( 5372 Context.getMemberPointerType(QPointeeTy, ClassTy)); 5373 } 5374 5375 return true; 5376} 5377 5378/// AddTypesConvertedFrom - Add each of the types to which the type @p 5379/// Ty can be implicit converted to the given set of @p Types. We're 5380/// primarily interested in pointer types and enumeration types. We also 5381/// take member pointer types, for the conditional operator. 5382/// AllowUserConversions is true if we should look at the conversion 5383/// functions of a class type, and AllowExplicitConversions if we 5384/// should also include the explicit conversion functions of a class 5385/// type. 5386void 5387BuiltinCandidateTypeSet::AddTypesConvertedFrom(QualType Ty, 5388 SourceLocation Loc, 5389 bool AllowUserConversions, 5390 bool AllowExplicitConversions, 5391 const Qualifiers &VisibleQuals) { 5392 // Only deal with canonical types. 5393 Ty = Context.getCanonicalType(Ty); 5394 5395 // Look through reference types; they aren't part of the type of an 5396 // expression for the purposes of conversions. 5397 if (const ReferenceType *RefTy = Ty->getAs<ReferenceType>()) 5398 Ty = RefTy->getPointeeType(); 5399 5400 // If we're dealing with an array type, decay to the pointer. 5401 if (Ty->isArrayType()) 5402 Ty = SemaRef.Context.getArrayDecayedType(Ty); 5403 5404 // Otherwise, we don't care about qualifiers on the type. 5405 Ty = Ty.getLocalUnqualifiedType(); 5406 5407 // Flag if we ever add a non-record type. 5408 const RecordType *TyRec = Ty->getAs<RecordType>(); 5409 HasNonRecordTypes = HasNonRecordTypes || !TyRec; 5410 5411 // Flag if we encounter an arithmetic type. 5412 HasArithmeticOrEnumeralTypes = 5413 HasArithmeticOrEnumeralTypes || Ty->isArithmeticType(); 5414 5415 if (Ty->isObjCIdType() || Ty->isObjCClassType()) 5416 PointerTypes.insert(Ty); 5417 else if (Ty->getAs<PointerType>() || Ty->getAs<ObjCObjectPointerType>()) { 5418 // Insert our type, and its more-qualified variants, into the set 5419 // of types. 5420 if (!AddPointerWithMoreQualifiedTypeVariants(Ty, VisibleQuals)) 5421 return; 5422 } else if (Ty->isMemberPointerType()) { 5423 // Member pointers are far easier, since the pointee can't be converted. 5424 if (!AddMemberPointerWithMoreQualifiedTypeVariants(Ty)) 5425 return; 5426 } else if (Ty->isEnumeralType()) { 5427 HasArithmeticOrEnumeralTypes = true; 5428 EnumerationTypes.insert(Ty); 5429 } else if (Ty->isVectorType()) { 5430 // We treat vector types as arithmetic types in many contexts as an 5431 // extension. 5432 HasArithmeticOrEnumeralTypes = true; 5433 VectorTypes.insert(Ty); 5434 } else if (Ty->isNullPtrType()) { 5435 HasNullPtrType = true; 5436 } else if (AllowUserConversions && TyRec) { 5437 // No conversion functions in incomplete types. 5438 if (SemaRef.RequireCompleteType(Loc, Ty, 0)) 5439 return; 5440 5441 CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl()); 5442 const UnresolvedSetImpl *Conversions 5443 = ClassDecl->getVisibleConversionFunctions(); 5444 for (UnresolvedSetImpl::iterator I = Conversions->begin(), 5445 E = Conversions->end(); I != E; ++I) { 5446 NamedDecl *D = I.getDecl(); 5447 if (isa<UsingShadowDecl>(D)) 5448 D = cast<UsingShadowDecl>(D)->getTargetDecl(); 5449 5450 // Skip conversion function templates; they don't tell us anything 5451 // about which builtin types we can convert to. 5452 if (isa<FunctionTemplateDecl>(D)) 5453 continue; 5454 5455 CXXConversionDecl *Conv = cast<CXXConversionDecl>(D); 5456 if (AllowExplicitConversions || !Conv->isExplicit()) { 5457 AddTypesConvertedFrom(Conv->getConversionType(), Loc, false, false, 5458 VisibleQuals); 5459 } 5460 } 5461 } 5462} 5463 5464/// \brief Helper function for AddBuiltinOperatorCandidates() that adds 5465/// the volatile- and non-volatile-qualified assignment operators for the 5466/// given type to the candidate set. 5467static void AddBuiltinAssignmentOperatorCandidates(Sema &S, 5468 QualType T, 5469 Expr **Args, 5470 unsigned NumArgs, 5471 OverloadCandidateSet &CandidateSet) { 5472 QualType ParamTypes[2]; 5473 5474 // T& operator=(T&, T) 5475 ParamTypes[0] = S.Context.getLValueReferenceType(T); 5476 ParamTypes[1] = T; 5477 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet, 5478 /*IsAssignmentOperator=*/true); 5479 5480 if (!S.Context.getCanonicalType(T).isVolatileQualified()) { 5481 // volatile T& operator=(volatile T&, T) 5482 ParamTypes[0] 5483 = S.Context.getLValueReferenceType(S.Context.getVolatileType(T)); 5484 ParamTypes[1] = T; 5485 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet, 5486 /*IsAssignmentOperator=*/true); 5487 } 5488} 5489 5490/// CollectVRQualifiers - This routine returns Volatile/Restrict qualifiers, 5491/// if any, found in visible type conversion functions found in ArgExpr's type. 5492static Qualifiers CollectVRQualifiers(ASTContext &Context, Expr* ArgExpr) { 5493 Qualifiers VRQuals; 5494 const RecordType *TyRec; 5495 if (const MemberPointerType *RHSMPType = 5496 ArgExpr->getType()->getAs<MemberPointerType>()) 5497 TyRec = RHSMPType->getClass()->getAs<RecordType>(); 5498 else 5499 TyRec = ArgExpr->getType()->getAs<RecordType>(); 5500 if (!TyRec) { 5501 // Just to be safe, assume the worst case. 5502 VRQuals.addVolatile(); 5503 VRQuals.addRestrict(); 5504 return VRQuals; 5505 } 5506 5507 CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl()); 5508 if (!ClassDecl->hasDefinition()) 5509 return VRQuals; 5510 5511 const UnresolvedSetImpl *Conversions = 5512 ClassDecl->getVisibleConversionFunctions(); 5513 5514 for (UnresolvedSetImpl::iterator I = Conversions->begin(), 5515 E = Conversions->end(); I != E; ++I) { 5516 NamedDecl *D = I.getDecl(); 5517 if (isa<UsingShadowDecl>(D)) 5518 D = cast<UsingShadowDecl>(D)->getTargetDecl(); 5519 if (CXXConversionDecl *Conv = dyn_cast<CXXConversionDecl>(D)) { 5520 QualType CanTy = Context.getCanonicalType(Conv->getConversionType()); 5521 if (const ReferenceType *ResTypeRef = CanTy->getAs<ReferenceType>()) 5522 CanTy = ResTypeRef->getPointeeType(); 5523 // Need to go down the pointer/mempointer chain and add qualifiers 5524 // as see them. 5525 bool done = false; 5526 while (!done) { 5527 if (const PointerType *ResTypePtr = CanTy->getAs<PointerType>()) 5528 CanTy = ResTypePtr->getPointeeType(); 5529 else if (const MemberPointerType *ResTypeMPtr = 5530 CanTy->getAs<MemberPointerType>()) 5531 CanTy = ResTypeMPtr->getPointeeType(); 5532 else 5533 done = true; 5534 if (CanTy.isVolatileQualified()) 5535 VRQuals.addVolatile(); 5536 if (CanTy.isRestrictQualified()) 5537 VRQuals.addRestrict(); 5538 if (VRQuals.hasRestrict() && VRQuals.hasVolatile()) 5539 return VRQuals; 5540 } 5541 } 5542 } 5543 return VRQuals; 5544} 5545 5546namespace { 5547 5548/// \brief Helper class to manage the addition of builtin operator overload 5549/// candidates. It provides shared state and utility methods used throughout 5550/// the process, as well as a helper method to add each group of builtin 5551/// operator overloads from the standard to a candidate set. 5552class BuiltinOperatorOverloadBuilder { 5553 // Common instance state available to all overload candidate addition methods. 5554 Sema &S; 5555 Expr **Args; 5556 unsigned NumArgs; 5557 Qualifiers VisibleTypeConversionsQuals; 5558 bool HasArithmeticOrEnumeralCandidateType; 5559 SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes; 5560 OverloadCandidateSet &CandidateSet; 5561 5562 // Define some constants used to index and iterate over the arithemetic types 5563 // provided via the getArithmeticType() method below. 5564 // The "promoted arithmetic types" are the arithmetic 5565 // types are that preserved by promotion (C++ [over.built]p2). 5566 static const unsigned FirstIntegralType = 3; 5567 static const unsigned LastIntegralType = 18; 5568 static const unsigned FirstPromotedIntegralType = 3, 5569 LastPromotedIntegralType = 9; 5570 static const unsigned FirstPromotedArithmeticType = 0, 5571 LastPromotedArithmeticType = 9; 5572 static const unsigned NumArithmeticTypes = 18; 5573 5574 /// \brief Get the canonical type for a given arithmetic type index. 5575 CanQualType getArithmeticType(unsigned index) { 5576 assert(index < NumArithmeticTypes); 5577 static CanQualType ASTContext::* const 5578 ArithmeticTypes[NumArithmeticTypes] = { 5579 // Start of promoted types. 5580 &ASTContext::FloatTy, 5581 &ASTContext::DoubleTy, 5582 &ASTContext::LongDoubleTy, 5583 5584 // Start of integral types. 5585 &ASTContext::IntTy, 5586 &ASTContext::LongTy, 5587 &ASTContext::LongLongTy, 5588 &ASTContext::UnsignedIntTy, 5589 &ASTContext::UnsignedLongTy, 5590 &ASTContext::UnsignedLongLongTy, 5591 // End of promoted types. 5592 5593 &ASTContext::BoolTy, 5594 &ASTContext::CharTy, 5595 &ASTContext::WCharTy, 5596 &ASTContext::Char16Ty, 5597 &ASTContext::Char32Ty, 5598 &ASTContext::SignedCharTy, 5599 &ASTContext::ShortTy, 5600 &ASTContext::UnsignedCharTy, 5601 &ASTContext::UnsignedShortTy, 5602 // End of integral types. 5603 // FIXME: What about complex? 5604 }; 5605 return S.Context.*ArithmeticTypes[index]; 5606 } 5607 5608 /// \brief Gets the canonical type resulting from the usual arithemetic 5609 /// converions for the given arithmetic types. 5610 CanQualType getUsualArithmeticConversions(unsigned L, unsigned R) { 5611 // Accelerator table for performing the usual arithmetic conversions. 5612 // The rules are basically: 5613 // - if either is floating-point, use the wider floating-point 5614 // - if same signedness, use the higher rank 5615 // - if same size, use unsigned of the higher rank 5616 // - use the larger type 5617 // These rules, together with the axiom that higher ranks are 5618 // never smaller, are sufficient to precompute all of these results 5619 // *except* when dealing with signed types of higher rank. 5620 // (we could precompute SLL x UI for all known platforms, but it's 5621 // better not to make any assumptions). 5622 enum PromotedType { 5623 Flt, Dbl, LDbl, SI, SL, SLL, UI, UL, ULL, Dep=-1 5624 }; 5625 static PromotedType ConversionsTable[LastPromotedArithmeticType] 5626 [LastPromotedArithmeticType] = { 5627 /* Flt*/ { Flt, Dbl, LDbl, Flt, Flt, Flt, Flt, Flt, Flt }, 5628 /* Dbl*/ { Dbl, Dbl, LDbl, Dbl, Dbl, Dbl, Dbl, Dbl, Dbl }, 5629 /*LDbl*/ { LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl }, 5630 /* SI*/ { Flt, Dbl, LDbl, SI, SL, SLL, UI, UL, ULL }, 5631 /* SL*/ { Flt, Dbl, LDbl, SL, SL, SLL, Dep, UL, ULL }, 5632 /* SLL*/ { Flt, Dbl, LDbl, SLL, SLL, SLL, Dep, Dep, ULL }, 5633 /* UI*/ { Flt, Dbl, LDbl, UI, Dep, Dep, UI, UL, ULL }, 5634 /* UL*/ { Flt, Dbl, LDbl, UL, UL, Dep, UL, UL, ULL }, 5635 /* ULL*/ { Flt, Dbl, LDbl, ULL, ULL, ULL, ULL, ULL, ULL }, 5636 }; 5637 5638 assert(L < LastPromotedArithmeticType); 5639 assert(R < LastPromotedArithmeticType); 5640 int Idx = ConversionsTable[L][R]; 5641 5642 // Fast path: the table gives us a concrete answer. 5643 if (Idx != Dep) return getArithmeticType(Idx); 5644 5645 // Slow path: we need to compare widths. 5646 // An invariant is that the signed type has higher rank. 5647 CanQualType LT = getArithmeticType(L), 5648 RT = getArithmeticType(R); 5649 unsigned LW = S.Context.getIntWidth(LT), 5650 RW = S.Context.getIntWidth(RT); 5651 5652 // If they're different widths, use the signed type. 5653 if (LW > RW) return LT; 5654 else if (LW < RW) return RT; 5655 5656 // Otherwise, use the unsigned type of the signed type's rank. 5657 if (L == SL || R == SL) return S.Context.UnsignedLongTy; 5658 assert(L == SLL || R == SLL); 5659 return S.Context.UnsignedLongLongTy; 5660 } 5661 5662 /// \brief Helper method to factor out the common pattern of adding overloads 5663 /// for '++' and '--' builtin operators. 5664 void addPlusPlusMinusMinusStyleOverloads(QualType CandidateTy, 5665 bool HasVolatile) { 5666 QualType ParamTypes[2] = { 5667 S.Context.getLValueReferenceType(CandidateTy), 5668 S.Context.IntTy 5669 }; 5670 5671 // Non-volatile version. 5672 if (NumArgs == 1) 5673 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet); 5674 else 5675 S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet); 5676 5677 // Use a heuristic to reduce number of builtin candidates in the set: 5678 // add volatile version only if there are conversions to a volatile type. 5679 if (HasVolatile) { 5680 ParamTypes[0] = 5681 S.Context.getLValueReferenceType( 5682 S.Context.getVolatileType(CandidateTy)); 5683 if (NumArgs == 1) 5684 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet); 5685 else 5686 S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet); 5687 } 5688 } 5689 5690public: 5691 BuiltinOperatorOverloadBuilder( 5692 Sema &S, Expr **Args, unsigned NumArgs, 5693 Qualifiers VisibleTypeConversionsQuals, 5694 bool HasArithmeticOrEnumeralCandidateType, 5695 SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes, 5696 OverloadCandidateSet &CandidateSet) 5697 : S(S), Args(Args), NumArgs(NumArgs), 5698 VisibleTypeConversionsQuals(VisibleTypeConversionsQuals), 5699 HasArithmeticOrEnumeralCandidateType( 5700 HasArithmeticOrEnumeralCandidateType), 5701 CandidateTypes(CandidateTypes), 5702 CandidateSet(CandidateSet) { 5703 // Validate some of our static helper constants in debug builds. 5704 assert(getArithmeticType(FirstPromotedIntegralType) == S.Context.IntTy && 5705 "Invalid first promoted integral type"); 5706 assert(getArithmeticType(LastPromotedIntegralType - 1) 5707 == S.Context.UnsignedLongLongTy && 5708 "Invalid last promoted integral type"); 5709 assert(getArithmeticType(FirstPromotedArithmeticType) 5710 == S.Context.FloatTy && 5711 "Invalid first promoted arithmetic type"); 5712 assert(getArithmeticType(LastPromotedArithmeticType - 1) 5713 == S.Context.UnsignedLongLongTy && 5714 "Invalid last promoted arithmetic type"); 5715 } 5716 5717 // C++ [over.built]p3: 5718 // 5719 // For every pair (T, VQ), where T is an arithmetic type, and VQ 5720 // is either volatile or empty, there exist candidate operator 5721 // functions of the form 5722 // 5723 // VQ T& operator++(VQ T&); 5724 // T operator++(VQ T&, int); 5725 // 5726 // C++ [over.built]p4: 5727 // 5728 // For every pair (T, VQ), where T is an arithmetic type other 5729 // than bool, and VQ is either volatile or empty, there exist 5730 // candidate operator functions of the form 5731 // 5732 // VQ T& operator--(VQ T&); 5733 // T operator--(VQ T&, int); 5734 void addPlusPlusMinusMinusArithmeticOverloads(OverloadedOperatorKind Op) { 5735 if (!HasArithmeticOrEnumeralCandidateType) 5736 return; 5737 5738 for (unsigned Arith = (Op == OO_PlusPlus? 0 : 1); 5739 Arith < NumArithmeticTypes; ++Arith) { 5740 addPlusPlusMinusMinusStyleOverloads( 5741 getArithmeticType(Arith), 5742 VisibleTypeConversionsQuals.hasVolatile()); 5743 } 5744 } 5745 5746 // C++ [over.built]p5: 5747 // 5748 // For every pair (T, VQ), where T is a cv-qualified or 5749 // cv-unqualified object type, and VQ is either volatile or 5750 // empty, there exist candidate operator functions of the form 5751 // 5752 // T*VQ& operator++(T*VQ&); 5753 // T*VQ& operator--(T*VQ&); 5754 // T* operator++(T*VQ&, int); 5755 // T* operator--(T*VQ&, int); 5756 void addPlusPlusMinusMinusPointerOverloads() { 5757 for (BuiltinCandidateTypeSet::iterator 5758 Ptr = CandidateTypes[0].pointer_begin(), 5759 PtrEnd = CandidateTypes[0].pointer_end(); 5760 Ptr != PtrEnd; ++Ptr) { 5761 // Skip pointer types that aren't pointers to object types. 5762 if (!(*Ptr)->getPointeeType()->isObjectType()) 5763 continue; 5764 5765 addPlusPlusMinusMinusStyleOverloads(*Ptr, 5766 (!S.Context.getCanonicalType(*Ptr).isVolatileQualified() && 5767 VisibleTypeConversionsQuals.hasVolatile())); 5768 } 5769 } 5770 5771 // C++ [over.built]p6: 5772 // For every cv-qualified or cv-unqualified object type T, there 5773 // exist candidate operator functions of the form 5774 // 5775 // T& operator*(T*); 5776 // 5777 // C++ [over.built]p7: 5778 // For every function type T that does not have cv-qualifiers or a 5779 // ref-qualifier, there exist candidate operator functions of the form 5780 // T& operator*(T*); 5781 void addUnaryStarPointerOverloads() { 5782 for (BuiltinCandidateTypeSet::iterator 5783 Ptr = CandidateTypes[0].pointer_begin(), 5784 PtrEnd = CandidateTypes[0].pointer_end(); 5785 Ptr != PtrEnd; ++Ptr) { 5786 QualType ParamTy = *Ptr; 5787 QualType PointeeTy = ParamTy->getPointeeType(); 5788 if (!PointeeTy->isObjectType() && !PointeeTy->isFunctionType()) 5789 continue; 5790 5791 if (const FunctionProtoType *Proto =PointeeTy->getAs<FunctionProtoType>()) 5792 if (Proto->getTypeQuals() || Proto->getRefQualifier()) 5793 continue; 5794 5795 S.AddBuiltinCandidate(S.Context.getLValueReferenceType(PointeeTy), 5796 &ParamTy, Args, 1, CandidateSet); 5797 } 5798 } 5799 5800 // C++ [over.built]p9: 5801 // For every promoted arithmetic type T, there exist candidate 5802 // operator functions of the form 5803 // 5804 // T operator+(T); 5805 // T operator-(T); 5806 void addUnaryPlusOrMinusArithmeticOverloads() { 5807 if (!HasArithmeticOrEnumeralCandidateType) 5808 return; 5809 5810 for (unsigned Arith = FirstPromotedArithmeticType; 5811 Arith < LastPromotedArithmeticType; ++Arith) { 5812 QualType ArithTy = getArithmeticType(Arith); 5813 S.AddBuiltinCandidate(ArithTy, &ArithTy, Args, 1, CandidateSet); 5814 } 5815 5816 // Extension: We also add these operators for vector types. 5817 for (BuiltinCandidateTypeSet::iterator 5818 Vec = CandidateTypes[0].vector_begin(), 5819 VecEnd = CandidateTypes[0].vector_end(); 5820 Vec != VecEnd; ++Vec) { 5821 QualType VecTy = *Vec; 5822 S.AddBuiltinCandidate(VecTy, &VecTy, Args, 1, CandidateSet); 5823 } 5824 } 5825 5826 // C++ [over.built]p8: 5827 // For every type T, there exist candidate operator functions of 5828 // the form 5829 // 5830 // T* operator+(T*); 5831 void addUnaryPlusPointerOverloads() { 5832 for (BuiltinCandidateTypeSet::iterator 5833 Ptr = CandidateTypes[0].pointer_begin(), 5834 PtrEnd = CandidateTypes[0].pointer_end(); 5835 Ptr != PtrEnd; ++Ptr) { 5836 QualType ParamTy = *Ptr; 5837 S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, 1, CandidateSet); 5838 } 5839 } 5840 5841 // C++ [over.built]p10: 5842 // For every promoted integral type T, there exist candidate 5843 // operator functions of the form 5844 // 5845 // T operator~(T); 5846 void addUnaryTildePromotedIntegralOverloads() { 5847 if (!HasArithmeticOrEnumeralCandidateType) 5848 return; 5849 5850 for (unsigned Int = FirstPromotedIntegralType; 5851 Int < LastPromotedIntegralType; ++Int) { 5852 QualType IntTy = getArithmeticType(Int); 5853 S.AddBuiltinCandidate(IntTy, &IntTy, Args, 1, CandidateSet); 5854 } 5855 5856 // Extension: We also add this operator for vector types. 5857 for (BuiltinCandidateTypeSet::iterator 5858 Vec = CandidateTypes[0].vector_begin(), 5859 VecEnd = CandidateTypes[0].vector_end(); 5860 Vec != VecEnd; ++Vec) { 5861 QualType VecTy = *Vec; 5862 S.AddBuiltinCandidate(VecTy, &VecTy, Args, 1, CandidateSet); 5863 } 5864 } 5865 5866 // C++ [over.match.oper]p16: 5867 // For every pointer to member type T, there exist candidate operator 5868 // functions of the form 5869 // 5870 // bool operator==(T,T); 5871 // bool operator!=(T,T); 5872 void addEqualEqualOrNotEqualMemberPointerOverloads() { 5873 /// Set of (canonical) types that we've already handled. 5874 llvm::SmallPtrSet<QualType, 8> AddedTypes; 5875 5876 for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) { 5877 for (BuiltinCandidateTypeSet::iterator 5878 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(), 5879 MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end(); 5880 MemPtr != MemPtrEnd; 5881 ++MemPtr) { 5882 // Don't add the same builtin candidate twice. 5883 if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr))) 5884 continue; 5885 5886 QualType ParamTypes[2] = { *MemPtr, *MemPtr }; 5887 S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2, 5888 CandidateSet); 5889 } 5890 } 5891 } 5892 5893 // C++ [over.built]p15: 5894 // 5895 // For every T, where T is an enumeration type, a pointer type, or 5896 // std::nullptr_t, there exist candidate operator functions of the form 5897 // 5898 // bool operator<(T, T); 5899 // bool operator>(T, T); 5900 // bool operator<=(T, T); 5901 // bool operator>=(T, T); 5902 // bool operator==(T, T); 5903 // bool operator!=(T, T); 5904 void addRelationalPointerOrEnumeralOverloads() { 5905 // C++ [over.built]p1: 5906 // If there is a user-written candidate with the same name and parameter 5907 // types as a built-in candidate operator function, the built-in operator 5908 // function is hidden and is not included in the set of candidate 5909 // functions. 5910 // 5911 // The text is actually in a note, but if we don't implement it then we end 5912 // up with ambiguities when the user provides an overloaded operator for 5913 // an enumeration type. Note that only enumeration types have this problem, 5914 // so we track which enumeration types we've seen operators for. Also, the 5915 // only other overloaded operator with enumeration argumenst, operator=, 5916 // cannot be overloaded for enumeration types, so this is the only place 5917 // where we must suppress candidates like this. 5918 llvm::DenseSet<std::pair<CanQualType, CanQualType> > 5919 UserDefinedBinaryOperators; 5920 5921 for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) { 5922 if (CandidateTypes[ArgIdx].enumeration_begin() != 5923 CandidateTypes[ArgIdx].enumeration_end()) { 5924 for (OverloadCandidateSet::iterator C = CandidateSet.begin(), 5925 CEnd = CandidateSet.end(); 5926 C != CEnd; ++C) { 5927 if (!C->Viable || !C->Function || C->Function->getNumParams() != 2) 5928 continue; 5929 5930 QualType FirstParamType = 5931 C->Function->getParamDecl(0)->getType().getUnqualifiedType(); 5932 QualType SecondParamType = 5933 C->Function->getParamDecl(1)->getType().getUnqualifiedType(); 5934 5935 // Skip if either parameter isn't of enumeral type. 5936 if (!FirstParamType->isEnumeralType() || 5937 !SecondParamType->isEnumeralType()) 5938 continue; 5939 5940 // Add this operator to the set of known user-defined operators. 5941 UserDefinedBinaryOperators.insert( 5942 std::make_pair(S.Context.getCanonicalType(FirstParamType), 5943 S.Context.getCanonicalType(SecondParamType))); 5944 } 5945 } 5946 } 5947 5948 /// Set of (canonical) types that we've already handled. 5949 llvm::SmallPtrSet<QualType, 8> AddedTypes; 5950 5951 for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) { 5952 for (BuiltinCandidateTypeSet::iterator 5953 Ptr = CandidateTypes[ArgIdx].pointer_begin(), 5954 PtrEnd = CandidateTypes[ArgIdx].pointer_end(); 5955 Ptr != PtrEnd; ++Ptr) { 5956 // Don't add the same builtin candidate twice. 5957 if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr))) 5958 continue; 5959 5960 QualType ParamTypes[2] = { *Ptr, *Ptr }; 5961 S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2, 5962 CandidateSet); 5963 } 5964 for (BuiltinCandidateTypeSet::iterator 5965 Enum = CandidateTypes[ArgIdx].enumeration_begin(), 5966 EnumEnd = CandidateTypes[ArgIdx].enumeration_end(); 5967 Enum != EnumEnd; ++Enum) { 5968 CanQualType CanonType = S.Context.getCanonicalType(*Enum); 5969 5970 // Don't add the same builtin candidate twice, or if a user defined 5971 // candidate exists. 5972 if (!AddedTypes.insert(CanonType) || 5973 UserDefinedBinaryOperators.count(std::make_pair(CanonType, 5974 CanonType))) 5975 continue; 5976 5977 QualType ParamTypes[2] = { *Enum, *Enum }; 5978 S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2, 5979 CandidateSet); 5980 } 5981 5982 if (CandidateTypes[ArgIdx].hasNullPtrType()) { 5983 CanQualType NullPtrTy = S.Context.getCanonicalType(S.Context.NullPtrTy); 5984 if (AddedTypes.insert(NullPtrTy) && 5985 !UserDefinedBinaryOperators.count(std::make_pair(NullPtrTy, 5986 NullPtrTy))) { 5987 QualType ParamTypes[2] = { NullPtrTy, NullPtrTy }; 5988 S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2, 5989 CandidateSet); 5990 } 5991 } 5992 } 5993 } 5994 5995 // C++ [over.built]p13: 5996 // 5997 // For every cv-qualified or cv-unqualified object type T 5998 // there exist candidate operator functions of the form 5999 // 6000 // T* operator+(T*, ptrdiff_t); 6001 // T& operator[](T*, ptrdiff_t); [BELOW] 6002 // T* operator-(T*, ptrdiff_t); 6003 // T* operator+(ptrdiff_t, T*); 6004 // T& operator[](ptrdiff_t, T*); [BELOW] 6005 // 6006 // C++ [over.built]p14: 6007 // 6008 // For every T, where T is a pointer to object type, there 6009 // exist candidate operator functions of the form 6010 // 6011 // ptrdiff_t operator-(T, T); 6012 void addBinaryPlusOrMinusPointerOverloads(OverloadedOperatorKind Op) { 6013 /// Set of (canonical) types that we've already handled. 6014 llvm::SmallPtrSet<QualType, 8> AddedTypes; 6015 6016 for (int Arg = 0; Arg < 2; ++Arg) { 6017 QualType AsymetricParamTypes[2] = { 6018 S.Context.getPointerDiffType(), 6019 S.Context.getPointerDiffType(), 6020 }; 6021 for (BuiltinCandidateTypeSet::iterator 6022 Ptr = CandidateTypes[Arg].pointer_begin(), 6023 PtrEnd = CandidateTypes[Arg].pointer_end(); 6024 Ptr != PtrEnd; ++Ptr) { 6025 QualType PointeeTy = (*Ptr)->getPointeeType(); 6026 if (!PointeeTy->isObjectType()) 6027 continue; 6028 6029 AsymetricParamTypes[Arg] = *Ptr; 6030 if (Arg == 0 || Op == OO_Plus) { 6031 // operator+(T*, ptrdiff_t) or operator-(T*, ptrdiff_t) 6032 // T* operator+(ptrdiff_t, T*); 6033 S.AddBuiltinCandidate(*Ptr, AsymetricParamTypes, Args, 2, 6034 CandidateSet); 6035 } 6036 if (Op == OO_Minus) { 6037 // ptrdiff_t operator-(T, T); 6038 if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr))) 6039 continue; 6040 6041 QualType ParamTypes[2] = { *Ptr, *Ptr }; 6042 S.AddBuiltinCandidate(S.Context.getPointerDiffType(), ParamTypes, 6043 Args, 2, CandidateSet); 6044 } 6045 } 6046 } 6047 } 6048 6049 // C++ [over.built]p12: 6050 // 6051 // For every pair of promoted arithmetic types L and R, there 6052 // exist candidate operator functions of the form 6053 // 6054 // LR operator*(L, R); 6055 // LR operator/(L, R); 6056 // LR operator+(L, R); 6057 // LR operator-(L, R); 6058 // bool operator<(L, R); 6059 // bool operator>(L, R); 6060 // bool operator<=(L, R); 6061 // bool operator>=(L, R); 6062 // bool operator==(L, R); 6063 // bool operator!=(L, R); 6064 // 6065 // where LR is the result of the usual arithmetic conversions 6066 // between types L and R. 6067 // 6068 // C++ [over.built]p24: 6069 // 6070 // For every pair of promoted arithmetic types L and R, there exist 6071 // candidate operator functions of the form 6072 // 6073 // LR operator?(bool, L, R); 6074 // 6075 // where LR is the result of the usual arithmetic conversions 6076 // between types L and R. 6077 // Our candidates ignore the first parameter. 6078 void addGenericBinaryArithmeticOverloads(bool isComparison) { 6079 if (!HasArithmeticOrEnumeralCandidateType) 6080 return; 6081 6082 for (unsigned Left = FirstPromotedArithmeticType; 6083 Left < LastPromotedArithmeticType; ++Left) { 6084 for (unsigned Right = FirstPromotedArithmeticType; 6085 Right < LastPromotedArithmeticType; ++Right) { 6086 QualType LandR[2] = { getArithmeticType(Left), 6087 getArithmeticType(Right) }; 6088 QualType Result = 6089 isComparison ? S.Context.BoolTy 6090 : getUsualArithmeticConversions(Left, Right); 6091 S.AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet); 6092 } 6093 } 6094 6095 // Extension: Add the binary operators ==, !=, <, <=, >=, >, *, /, and the 6096 // conditional operator for vector types. 6097 for (BuiltinCandidateTypeSet::iterator 6098 Vec1 = CandidateTypes[0].vector_begin(), 6099 Vec1End = CandidateTypes[0].vector_end(); 6100 Vec1 != Vec1End; ++Vec1) { 6101 for (BuiltinCandidateTypeSet::iterator 6102 Vec2 = CandidateTypes[1].vector_begin(), 6103 Vec2End = CandidateTypes[1].vector_end(); 6104 Vec2 != Vec2End; ++Vec2) { 6105 QualType LandR[2] = { *Vec1, *Vec2 }; 6106 QualType Result = S.Context.BoolTy; 6107 if (!isComparison) { 6108 if ((*Vec1)->isExtVectorType() || !(*Vec2)->isExtVectorType()) 6109 Result = *Vec1; 6110 else 6111 Result = *Vec2; 6112 } 6113 6114 S.AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet); 6115 } 6116 } 6117 } 6118 6119 // C++ [over.built]p17: 6120 // 6121 // For every pair of promoted integral types L and R, there 6122 // exist candidate operator functions of the form 6123 // 6124 // LR operator%(L, R); 6125 // LR operator&(L, R); 6126 // LR operator^(L, R); 6127 // LR operator|(L, R); 6128 // L operator<<(L, R); 6129 // L operator>>(L, R); 6130 // 6131 // where LR is the result of the usual arithmetic conversions 6132 // between types L and R. 6133 void addBinaryBitwiseArithmeticOverloads(OverloadedOperatorKind Op) { 6134 if (!HasArithmeticOrEnumeralCandidateType) 6135 return; 6136 6137 for (unsigned Left = FirstPromotedIntegralType; 6138 Left < LastPromotedIntegralType; ++Left) { 6139 for (unsigned Right = FirstPromotedIntegralType; 6140 Right < LastPromotedIntegralType; ++Right) { 6141 QualType LandR[2] = { getArithmeticType(Left), 6142 getArithmeticType(Right) }; 6143 QualType Result = (Op == OO_LessLess || Op == OO_GreaterGreater) 6144 ? LandR[0] 6145 : getUsualArithmeticConversions(Left, Right); 6146 S.AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet); 6147 } 6148 } 6149 } 6150 6151 // C++ [over.built]p20: 6152 // 6153 // For every pair (T, VQ), where T is an enumeration or 6154 // pointer to member type and VQ is either volatile or 6155 // empty, there exist candidate operator functions of the form 6156 // 6157 // VQ T& operator=(VQ T&, T); 6158 void addAssignmentMemberPointerOrEnumeralOverloads() { 6159 /// Set of (canonical) types that we've already handled. 6160 llvm::SmallPtrSet<QualType, 8> AddedTypes; 6161 6162 for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) { 6163 for (BuiltinCandidateTypeSet::iterator 6164 Enum = CandidateTypes[ArgIdx].enumeration_begin(), 6165 EnumEnd = CandidateTypes[ArgIdx].enumeration_end(); 6166 Enum != EnumEnd; ++Enum) { 6167 if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum))) 6168 continue; 6169 6170 AddBuiltinAssignmentOperatorCandidates(S, *Enum, Args, 2, 6171 CandidateSet); 6172 } 6173 6174 for (BuiltinCandidateTypeSet::iterator 6175 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(), 6176 MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end(); 6177 MemPtr != MemPtrEnd; ++MemPtr) { 6178 if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr))) 6179 continue; 6180 6181 AddBuiltinAssignmentOperatorCandidates(S, *MemPtr, Args, 2, 6182 CandidateSet); 6183 } 6184 } 6185 } 6186 6187 // C++ [over.built]p19: 6188 // 6189 // For every pair (T, VQ), where T is any type and VQ is either 6190 // volatile or empty, there exist candidate operator functions 6191 // of the form 6192 // 6193 // T*VQ& operator=(T*VQ&, T*); 6194 // 6195 // C++ [over.built]p21: 6196 // 6197 // For every pair (T, VQ), where T is a cv-qualified or 6198 // cv-unqualified object type and VQ is either volatile or 6199 // empty, there exist candidate operator functions of the form 6200 // 6201 // T*VQ& operator+=(T*VQ&, ptrdiff_t); 6202 // T*VQ& operator-=(T*VQ&, ptrdiff_t); 6203 void addAssignmentPointerOverloads(bool isEqualOp) { 6204 /// Set of (canonical) types that we've already handled. 6205 llvm::SmallPtrSet<QualType, 8> AddedTypes; 6206 6207 for (BuiltinCandidateTypeSet::iterator 6208 Ptr = CandidateTypes[0].pointer_begin(), 6209 PtrEnd = CandidateTypes[0].pointer_end(); 6210 Ptr != PtrEnd; ++Ptr) { 6211 // If this is operator=, keep track of the builtin candidates we added. 6212 if (isEqualOp) 6213 AddedTypes.insert(S.Context.getCanonicalType(*Ptr)); 6214 else if (!(*Ptr)->getPointeeType()->isObjectType()) 6215 continue; 6216 6217 // non-volatile version 6218 QualType ParamTypes[2] = { 6219 S.Context.getLValueReferenceType(*Ptr), 6220 isEqualOp ? *Ptr : S.Context.getPointerDiffType(), 6221 }; 6222 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet, 6223 /*IsAssigmentOperator=*/ isEqualOp); 6224 6225 if (!S.Context.getCanonicalType(*Ptr).isVolatileQualified() && 6226 VisibleTypeConversionsQuals.hasVolatile()) { 6227 // volatile version 6228 ParamTypes[0] = 6229 S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr)); 6230 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet, 6231 /*IsAssigmentOperator=*/isEqualOp); 6232 } 6233 } 6234 6235 if (isEqualOp) { 6236 for (BuiltinCandidateTypeSet::iterator 6237 Ptr = CandidateTypes[1].pointer_begin(), 6238 PtrEnd = CandidateTypes[1].pointer_end(); 6239 Ptr != PtrEnd; ++Ptr) { 6240 // Make sure we don't add the same candidate twice. 6241 if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr))) 6242 continue; 6243 6244 QualType ParamTypes[2] = { 6245 S.Context.getLValueReferenceType(*Ptr), 6246 *Ptr, 6247 }; 6248 6249 // non-volatile version 6250 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet, 6251 /*IsAssigmentOperator=*/true); 6252 6253 if (!S.Context.getCanonicalType(*Ptr).isVolatileQualified() && 6254 VisibleTypeConversionsQuals.hasVolatile()) { 6255 // volatile version 6256 ParamTypes[0] = 6257 S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr)); 6258 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, 6259 CandidateSet, /*IsAssigmentOperator=*/true); 6260 } 6261 } 6262 } 6263 } 6264 6265 // C++ [over.built]p18: 6266 // 6267 // For every triple (L, VQ, R), where L is an arithmetic type, 6268 // VQ is either volatile or empty, and R is a promoted 6269 // arithmetic type, there exist candidate operator functions of 6270 // the form 6271 // 6272 // VQ L& operator=(VQ L&, R); 6273 // VQ L& operator*=(VQ L&, R); 6274 // VQ L& operator/=(VQ L&, R); 6275 // VQ L& operator+=(VQ L&, R); 6276 // VQ L& operator-=(VQ L&, R); 6277 void addAssignmentArithmeticOverloads(bool isEqualOp) { 6278 if (!HasArithmeticOrEnumeralCandidateType) 6279 return; 6280 6281 for (unsigned Left = 0; Left < NumArithmeticTypes; ++Left) { 6282 for (unsigned Right = FirstPromotedArithmeticType; 6283 Right < LastPromotedArithmeticType; ++Right) { 6284 QualType ParamTypes[2]; 6285 ParamTypes[1] = getArithmeticType(Right); 6286 6287 // Add this built-in operator as a candidate (VQ is empty). 6288 ParamTypes[0] = 6289 S.Context.getLValueReferenceType(getArithmeticType(Left)); 6290 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet, 6291 /*IsAssigmentOperator=*/isEqualOp); 6292 6293 // Add this built-in operator as a candidate (VQ is 'volatile'). 6294 if (VisibleTypeConversionsQuals.hasVolatile()) { 6295 ParamTypes[0] = 6296 S.Context.getVolatileType(getArithmeticType(Left)); 6297 ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]); 6298 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, 6299 CandidateSet, 6300 /*IsAssigmentOperator=*/isEqualOp); 6301 } 6302 } 6303 } 6304 6305 // Extension: Add the binary operators =, +=, -=, *=, /= for vector types. 6306 for (BuiltinCandidateTypeSet::iterator 6307 Vec1 = CandidateTypes[0].vector_begin(), 6308 Vec1End = CandidateTypes[0].vector_end(); 6309 Vec1 != Vec1End; ++Vec1) { 6310 for (BuiltinCandidateTypeSet::iterator 6311 Vec2 = CandidateTypes[1].vector_begin(), 6312 Vec2End = CandidateTypes[1].vector_end(); 6313 Vec2 != Vec2End; ++Vec2) { 6314 QualType ParamTypes[2]; 6315 ParamTypes[1] = *Vec2; 6316 // Add this built-in operator as a candidate (VQ is empty). 6317 ParamTypes[0] = S.Context.getLValueReferenceType(*Vec1); 6318 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet, 6319 /*IsAssigmentOperator=*/isEqualOp); 6320 6321 // Add this built-in operator as a candidate (VQ is 'volatile'). 6322 if (VisibleTypeConversionsQuals.hasVolatile()) { 6323 ParamTypes[0] = S.Context.getVolatileType(*Vec1); 6324 ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]); 6325 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, 6326 CandidateSet, 6327 /*IsAssigmentOperator=*/isEqualOp); 6328 } 6329 } 6330 } 6331 } 6332 6333 // C++ [over.built]p22: 6334 // 6335 // For every triple (L, VQ, R), where L is an integral type, VQ 6336 // is either volatile or empty, and R is a promoted integral 6337 // type, there exist candidate operator functions of the form 6338 // 6339 // VQ L& operator%=(VQ L&, R); 6340 // VQ L& operator<<=(VQ L&, R); 6341 // VQ L& operator>>=(VQ L&, R); 6342 // VQ L& operator&=(VQ L&, R); 6343 // VQ L& operator^=(VQ L&, R); 6344 // VQ L& operator|=(VQ L&, R); 6345 void addAssignmentIntegralOverloads() { 6346 if (!HasArithmeticOrEnumeralCandidateType) 6347 return; 6348 6349 for (unsigned Left = FirstIntegralType; Left < LastIntegralType; ++Left) { 6350 for (unsigned Right = FirstPromotedIntegralType; 6351 Right < LastPromotedIntegralType; ++Right) { 6352 QualType ParamTypes[2]; 6353 ParamTypes[1] = getArithmeticType(Right); 6354 6355 // Add this built-in operator as a candidate (VQ is empty). 6356 ParamTypes[0] = 6357 S.Context.getLValueReferenceType(getArithmeticType(Left)); 6358 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet); 6359 if (VisibleTypeConversionsQuals.hasVolatile()) { 6360 // Add this built-in operator as a candidate (VQ is 'volatile'). 6361 ParamTypes[0] = getArithmeticType(Left); 6362 ParamTypes[0] = S.Context.getVolatileType(ParamTypes[0]); 6363 ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]); 6364 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, 6365 CandidateSet); 6366 } 6367 } 6368 } 6369 } 6370 6371 // C++ [over.operator]p23: 6372 // 6373 // There also exist candidate operator functions of the form 6374 // 6375 // bool operator!(bool); 6376 // bool operator&&(bool, bool); 6377 // bool operator||(bool, bool); 6378 void addExclaimOverload() { 6379 QualType ParamTy = S.Context.BoolTy; 6380 S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, 1, CandidateSet, 6381 /*IsAssignmentOperator=*/false, 6382 /*NumContextualBoolArguments=*/1); 6383 } 6384 void addAmpAmpOrPipePipeOverload() { 6385 QualType ParamTypes[2] = { S.Context.BoolTy, S.Context.BoolTy }; 6386 S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2, CandidateSet, 6387 /*IsAssignmentOperator=*/false, 6388 /*NumContextualBoolArguments=*/2); 6389 } 6390 6391 // C++ [over.built]p13: 6392 // 6393 // For every cv-qualified or cv-unqualified object type T there 6394 // exist candidate operator functions of the form 6395 // 6396 // T* operator+(T*, ptrdiff_t); [ABOVE] 6397 // T& operator[](T*, ptrdiff_t); 6398 // T* operator-(T*, ptrdiff_t); [ABOVE] 6399 // T* operator+(ptrdiff_t, T*); [ABOVE] 6400 // T& operator[](ptrdiff_t, T*); 6401 void addSubscriptOverloads() { 6402 for (BuiltinCandidateTypeSet::iterator 6403 Ptr = CandidateTypes[0].pointer_begin(), 6404 PtrEnd = CandidateTypes[0].pointer_end(); 6405 Ptr != PtrEnd; ++Ptr) { 6406 QualType ParamTypes[2] = { *Ptr, S.Context.getPointerDiffType() }; 6407 QualType PointeeType = (*Ptr)->getPointeeType(); 6408 if (!PointeeType->isObjectType()) 6409 continue; 6410 6411 QualType ResultTy = S.Context.getLValueReferenceType(PointeeType); 6412 6413 // T& operator[](T*, ptrdiff_t) 6414 S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet); 6415 } 6416 6417 for (BuiltinCandidateTypeSet::iterator 6418 Ptr = CandidateTypes[1].pointer_begin(), 6419 PtrEnd = CandidateTypes[1].pointer_end(); 6420 Ptr != PtrEnd; ++Ptr) { 6421 QualType ParamTypes[2] = { S.Context.getPointerDiffType(), *Ptr }; 6422 QualType PointeeType = (*Ptr)->getPointeeType(); 6423 if (!PointeeType->isObjectType()) 6424 continue; 6425 6426 QualType ResultTy = S.Context.getLValueReferenceType(PointeeType); 6427 6428 // T& operator[](ptrdiff_t, T*) 6429 S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet); 6430 } 6431 } 6432 6433 // C++ [over.built]p11: 6434 // For every quintuple (C1, C2, T, CV1, CV2), where C2 is a class type, 6435 // C1 is the same type as C2 or is a derived class of C2, T is an object 6436 // type or a function type, and CV1 and CV2 are cv-qualifier-seqs, 6437 // there exist candidate operator functions of the form 6438 // 6439 // CV12 T& operator->*(CV1 C1*, CV2 T C2::*); 6440 // 6441 // where CV12 is the union of CV1 and CV2. 6442 void addArrowStarOverloads() { 6443 for (BuiltinCandidateTypeSet::iterator 6444 Ptr = CandidateTypes[0].pointer_begin(), 6445 PtrEnd = CandidateTypes[0].pointer_end(); 6446 Ptr != PtrEnd; ++Ptr) { 6447 QualType C1Ty = (*Ptr); 6448 QualType C1; 6449 QualifierCollector Q1; 6450 C1 = QualType(Q1.strip(C1Ty->getPointeeType()), 0); 6451 if (!isa<RecordType>(C1)) 6452 continue; 6453 // heuristic to reduce number of builtin candidates in the set. 6454 // Add volatile/restrict version only if there are conversions to a 6455 // volatile/restrict type. 6456 if (!VisibleTypeConversionsQuals.hasVolatile() && Q1.hasVolatile()) 6457 continue; 6458 if (!VisibleTypeConversionsQuals.hasRestrict() && Q1.hasRestrict()) 6459 continue; 6460 for (BuiltinCandidateTypeSet::iterator 6461 MemPtr = CandidateTypes[1].member_pointer_begin(), 6462 MemPtrEnd = CandidateTypes[1].member_pointer_end(); 6463 MemPtr != MemPtrEnd; ++MemPtr) { 6464 const MemberPointerType *mptr = cast<MemberPointerType>(*MemPtr); 6465 QualType C2 = QualType(mptr->getClass(), 0); 6466 C2 = C2.getUnqualifiedType(); 6467 if (C1 != C2 && !S.IsDerivedFrom(C1, C2)) 6468 break; 6469 QualType ParamTypes[2] = { *Ptr, *MemPtr }; 6470 // build CV12 T& 6471 QualType T = mptr->getPointeeType(); 6472 if (!VisibleTypeConversionsQuals.hasVolatile() && 6473 T.isVolatileQualified()) 6474 continue; 6475 if (!VisibleTypeConversionsQuals.hasRestrict() && 6476 T.isRestrictQualified()) 6477 continue; 6478 T = Q1.apply(S.Context, T); 6479 QualType ResultTy = S.Context.getLValueReferenceType(T); 6480 S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet); 6481 } 6482 } 6483 } 6484 6485 // Note that we don't consider the first argument, since it has been 6486 // contextually converted to bool long ago. The candidates below are 6487 // therefore added as binary. 6488 // 6489 // C++ [over.built]p25: 6490 // For every type T, where T is a pointer, pointer-to-member, or scoped 6491 // enumeration type, there exist candidate operator functions of the form 6492 // 6493 // T operator?(bool, T, T); 6494 // 6495 void addConditionalOperatorOverloads() { 6496 /// Set of (canonical) types that we've already handled. 6497 llvm::SmallPtrSet<QualType, 8> AddedTypes; 6498 6499 for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) { 6500 for (BuiltinCandidateTypeSet::iterator 6501 Ptr = CandidateTypes[ArgIdx].pointer_begin(), 6502 PtrEnd = CandidateTypes[ArgIdx].pointer_end(); 6503 Ptr != PtrEnd; ++Ptr) { 6504 if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr))) 6505 continue; 6506 6507 QualType ParamTypes[2] = { *Ptr, *Ptr }; 6508 S.AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet); 6509 } 6510 6511 for (BuiltinCandidateTypeSet::iterator 6512 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(), 6513 MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end(); 6514 MemPtr != MemPtrEnd; ++MemPtr) { 6515 if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr))) 6516 continue; 6517 6518 QualType ParamTypes[2] = { *MemPtr, *MemPtr }; 6519 S.AddBuiltinCandidate(*MemPtr, ParamTypes, Args, 2, CandidateSet); 6520 } 6521 6522 if (S.getLangOptions().CPlusPlus0x) { 6523 for (BuiltinCandidateTypeSet::iterator 6524 Enum = CandidateTypes[ArgIdx].enumeration_begin(), 6525 EnumEnd = CandidateTypes[ArgIdx].enumeration_end(); 6526 Enum != EnumEnd; ++Enum) { 6527 if (!(*Enum)->getAs<EnumType>()->getDecl()->isScoped()) 6528 continue; 6529 6530 if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum))) 6531 continue; 6532 6533 QualType ParamTypes[2] = { *Enum, *Enum }; 6534 S.AddBuiltinCandidate(*Enum, ParamTypes, Args, 2, CandidateSet); 6535 } 6536 } 6537 } 6538 } 6539}; 6540 6541} // end anonymous namespace 6542 6543/// AddBuiltinOperatorCandidates - Add the appropriate built-in 6544/// operator overloads to the candidate set (C++ [over.built]), based 6545/// on the operator @p Op and the arguments given. For example, if the 6546/// operator is a binary '+', this routine might add "int 6547/// operator+(int, int)" to cover integer addition. 6548void 6549Sema::AddBuiltinOperatorCandidates(OverloadedOperatorKind Op, 6550 SourceLocation OpLoc, 6551 Expr **Args, unsigned NumArgs, 6552 OverloadCandidateSet& CandidateSet) { 6553 // Find all of the types that the arguments can convert to, but only 6554 // if the operator we're looking at has built-in operator candidates 6555 // that make use of these types. Also record whether we encounter non-record 6556 // candidate types or either arithmetic or enumeral candidate types. 6557 Qualifiers VisibleTypeConversionsQuals; 6558 VisibleTypeConversionsQuals.addConst(); 6559 for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) 6560 VisibleTypeConversionsQuals += CollectVRQualifiers(Context, Args[ArgIdx]); 6561 6562 bool HasNonRecordCandidateType = false; 6563 bool HasArithmeticOrEnumeralCandidateType = false; 6564 SmallVector<BuiltinCandidateTypeSet, 2> CandidateTypes; 6565 for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) { 6566 CandidateTypes.push_back(BuiltinCandidateTypeSet(*this)); 6567 CandidateTypes[ArgIdx].AddTypesConvertedFrom(Args[ArgIdx]->getType(), 6568 OpLoc, 6569 true, 6570 (Op == OO_Exclaim || 6571 Op == OO_AmpAmp || 6572 Op == OO_PipePipe), 6573 VisibleTypeConversionsQuals); 6574 HasNonRecordCandidateType = HasNonRecordCandidateType || 6575 CandidateTypes[ArgIdx].hasNonRecordTypes(); 6576 HasArithmeticOrEnumeralCandidateType = 6577 HasArithmeticOrEnumeralCandidateType || 6578 CandidateTypes[ArgIdx].hasArithmeticOrEnumeralTypes(); 6579 } 6580 6581 // Exit early when no non-record types have been added to the candidate set 6582 // for any of the arguments to the operator. 6583 // 6584 // We can't exit early for !, ||, or &&, since there we have always have 6585 // 'bool' overloads. 6586 if (!HasNonRecordCandidateType && 6587 !(Op == OO_Exclaim || Op == OO_AmpAmp || Op == OO_PipePipe)) 6588 return; 6589 6590 // Setup an object to manage the common state for building overloads. 6591 BuiltinOperatorOverloadBuilder OpBuilder(*this, Args, NumArgs, 6592 VisibleTypeConversionsQuals, 6593 HasArithmeticOrEnumeralCandidateType, 6594 CandidateTypes, CandidateSet); 6595 6596 // Dispatch over the operation to add in only those overloads which apply. 6597 switch (Op) { 6598 case OO_None: 6599 case NUM_OVERLOADED_OPERATORS: 6600 llvm_unreachable("Expected an overloaded operator"); 6601 6602 case OO_New: 6603 case OO_Delete: 6604 case OO_Array_New: 6605 case OO_Array_Delete: 6606 case OO_Call: 6607 llvm_unreachable( 6608 "Special operators don't use AddBuiltinOperatorCandidates"); 6609 6610 case OO_Comma: 6611 case OO_Arrow: 6612 // C++ [over.match.oper]p3: 6613 // -- For the operator ',', the unary operator '&', or the 6614 // operator '->', the built-in candidates set is empty. 6615 break; 6616 6617 case OO_Plus: // '+' is either unary or binary 6618 if (NumArgs == 1) 6619 OpBuilder.addUnaryPlusPointerOverloads(); 6620 // Fall through. 6621 6622 case OO_Minus: // '-' is either unary or binary 6623 if (NumArgs == 1) { 6624 OpBuilder.addUnaryPlusOrMinusArithmeticOverloads(); 6625 } else { 6626 OpBuilder.addBinaryPlusOrMinusPointerOverloads(Op); 6627 OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false); 6628 } 6629 break; 6630 6631 case OO_Star: // '*' is either unary or binary 6632 if (NumArgs == 1) 6633 OpBuilder.addUnaryStarPointerOverloads(); 6634 else 6635 OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false); 6636 break; 6637 6638 case OO_Slash: 6639 OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false); 6640 break; 6641 6642 case OO_PlusPlus: 6643 case OO_MinusMinus: 6644 OpBuilder.addPlusPlusMinusMinusArithmeticOverloads(Op); 6645 OpBuilder.addPlusPlusMinusMinusPointerOverloads(); 6646 break; 6647 6648 case OO_EqualEqual: 6649 case OO_ExclaimEqual: 6650 OpBuilder.addEqualEqualOrNotEqualMemberPointerOverloads(); 6651 // Fall through. 6652 6653 case OO_Less: 6654 case OO_Greater: 6655 case OO_LessEqual: 6656 case OO_GreaterEqual: 6657 OpBuilder.addRelationalPointerOrEnumeralOverloads(); 6658 OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/true); 6659 break; 6660 6661 case OO_Percent: 6662 case OO_Caret: 6663 case OO_Pipe: 6664 case OO_LessLess: 6665 case OO_GreaterGreater: 6666 OpBuilder.addBinaryBitwiseArithmeticOverloads(Op); 6667 break; 6668 6669 case OO_Amp: // '&' is either unary or binary 6670 if (NumArgs == 1) 6671 // C++ [over.match.oper]p3: 6672 // -- For the operator ',', the unary operator '&', or the 6673 // operator '->', the built-in candidates set is empty. 6674 break; 6675 6676 OpBuilder.addBinaryBitwiseArithmeticOverloads(Op); 6677 break; 6678 6679 case OO_Tilde: 6680 OpBuilder.addUnaryTildePromotedIntegralOverloads(); 6681 break; 6682 6683 case OO_Equal: 6684 OpBuilder.addAssignmentMemberPointerOrEnumeralOverloads(); 6685 // Fall through. 6686 6687 case OO_PlusEqual: 6688 case OO_MinusEqual: 6689 OpBuilder.addAssignmentPointerOverloads(Op == OO_Equal); 6690 // Fall through. 6691 6692 case OO_StarEqual: 6693 case OO_SlashEqual: 6694 OpBuilder.addAssignmentArithmeticOverloads(Op == OO_Equal); 6695 break; 6696 6697 case OO_PercentEqual: 6698 case OO_LessLessEqual: 6699 case OO_GreaterGreaterEqual: 6700 case OO_AmpEqual: 6701 case OO_CaretEqual: 6702 case OO_PipeEqual: 6703 OpBuilder.addAssignmentIntegralOverloads(); 6704 break; 6705 6706 case OO_Exclaim: 6707 OpBuilder.addExclaimOverload(); 6708 break; 6709 6710 case OO_AmpAmp: 6711 case OO_PipePipe: 6712 OpBuilder.addAmpAmpOrPipePipeOverload(); 6713 break; 6714 6715 case OO_Subscript: 6716 OpBuilder.addSubscriptOverloads(); 6717 break; 6718 6719 case OO_ArrowStar: 6720 OpBuilder.addArrowStarOverloads(); 6721 break; 6722 6723 case OO_Conditional: 6724 OpBuilder.addConditionalOperatorOverloads(); 6725 OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false); 6726 break; 6727 } 6728} 6729 6730/// \brief Add function candidates found via argument-dependent lookup 6731/// to the set of overloading candidates. 6732/// 6733/// This routine performs argument-dependent name lookup based on the 6734/// given function name (which may also be an operator name) and adds 6735/// all of the overload candidates found by ADL to the overload 6736/// candidate set (C++ [basic.lookup.argdep]). 6737void 6738Sema::AddArgumentDependentLookupCandidates(DeclarationName Name, 6739 bool Operator, 6740 Expr **Args, unsigned NumArgs, 6741 TemplateArgumentListInfo *ExplicitTemplateArgs, 6742 OverloadCandidateSet& CandidateSet, 6743 bool PartialOverloading, 6744 bool StdNamespaceIsAssociated) { 6745 ADLResult Fns; 6746 6747 // FIXME: This approach for uniquing ADL results (and removing 6748 // redundant candidates from the set) relies on pointer-equality, 6749 // which means we need to key off the canonical decl. However, 6750 // always going back to the canonical decl might not get us the 6751 // right set of default arguments. What default arguments are 6752 // we supposed to consider on ADL candidates, anyway? 6753 6754 // FIXME: Pass in the explicit template arguments? 6755 ArgumentDependentLookup(Name, Operator, Args, NumArgs, Fns, 6756 StdNamespaceIsAssociated); 6757 6758 // Erase all of the candidates we already knew about. 6759 for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(), 6760 CandEnd = CandidateSet.end(); 6761 Cand != CandEnd; ++Cand) 6762 if (Cand->Function) { 6763 Fns.erase(Cand->Function); 6764 if (FunctionTemplateDecl *FunTmpl = Cand->Function->getPrimaryTemplate()) 6765 Fns.erase(FunTmpl); 6766 } 6767 6768 // For each of the ADL candidates we found, add it to the overload 6769 // set. 6770 for (ADLResult::iterator I = Fns.begin(), E = Fns.end(); I != E; ++I) { 6771 DeclAccessPair FoundDecl = DeclAccessPair::make(*I, AS_none); 6772 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) { 6773 if (ExplicitTemplateArgs) 6774 continue; 6775 6776 AddOverloadCandidate(FD, FoundDecl, Args, NumArgs, CandidateSet, 6777 false, PartialOverloading); 6778 } else 6779 AddTemplateOverloadCandidate(cast<FunctionTemplateDecl>(*I), 6780 FoundDecl, ExplicitTemplateArgs, 6781 Args, NumArgs, CandidateSet); 6782 } 6783} 6784 6785/// isBetterOverloadCandidate - Determines whether the first overload 6786/// candidate is a better candidate than the second (C++ 13.3.3p1). 6787bool 6788isBetterOverloadCandidate(Sema &S, 6789 const OverloadCandidate &Cand1, 6790 const OverloadCandidate &Cand2, 6791 SourceLocation Loc, 6792 bool UserDefinedConversion) { 6793 // Define viable functions to be better candidates than non-viable 6794 // functions. 6795 if (!Cand2.Viable) 6796 return Cand1.Viable; 6797 else if (!Cand1.Viable) 6798 return false; 6799 6800 // C++ [over.match.best]p1: 6801 // 6802 // -- if F is a static member function, ICS1(F) is defined such 6803 // that ICS1(F) is neither better nor worse than ICS1(G) for 6804 // any function G, and, symmetrically, ICS1(G) is neither 6805 // better nor worse than ICS1(F). 6806 unsigned StartArg = 0; 6807 if (Cand1.IgnoreObjectArgument || Cand2.IgnoreObjectArgument) 6808 StartArg = 1; 6809 6810 // C++ [over.match.best]p1: 6811 // A viable function F1 is defined to be a better function than another 6812 // viable function F2 if for all arguments i, ICSi(F1) is not a worse 6813 // conversion sequence than ICSi(F2), and then... 6814 unsigned NumArgs = Cand1.Conversions.size(); 6815 assert(Cand2.Conversions.size() == NumArgs && "Overload candidate mismatch"); 6816 bool HasBetterConversion = false; 6817 for (unsigned ArgIdx = StartArg; ArgIdx < NumArgs; ++ArgIdx) { 6818 switch (CompareImplicitConversionSequences(S, 6819 Cand1.Conversions[ArgIdx], 6820 Cand2.Conversions[ArgIdx])) { 6821 case ImplicitConversionSequence::Better: 6822 // Cand1 has a better conversion sequence. 6823 HasBetterConversion = true; 6824 break; 6825 6826 case ImplicitConversionSequence::Worse: 6827 // Cand1 can't be better than Cand2. 6828 return false; 6829 6830 case ImplicitConversionSequence::Indistinguishable: 6831 // Do nothing. 6832 break; 6833 } 6834 } 6835 6836 // -- for some argument j, ICSj(F1) is a better conversion sequence than 6837 // ICSj(F2), or, if not that, 6838 if (HasBetterConversion) 6839 return true; 6840 6841 // - F1 is a non-template function and F2 is a function template 6842 // specialization, or, if not that, 6843 if ((!Cand1.Function || !Cand1.Function->getPrimaryTemplate()) && 6844 Cand2.Function && Cand2.Function->getPrimaryTemplate()) 6845 return true; 6846 6847 // -- F1 and F2 are function template specializations, and the function 6848 // template for F1 is more specialized than the template for F2 6849 // according to the partial ordering rules described in 14.5.5.2, or, 6850 // if not that, 6851 if (Cand1.Function && Cand1.Function->getPrimaryTemplate() && 6852 Cand2.Function && Cand2.Function->getPrimaryTemplate()) { 6853 if (FunctionTemplateDecl *BetterTemplate 6854 = S.getMoreSpecializedTemplate(Cand1.Function->getPrimaryTemplate(), 6855 Cand2.Function->getPrimaryTemplate(), 6856 Loc, 6857 isa<CXXConversionDecl>(Cand1.Function)? TPOC_Conversion 6858 : TPOC_Call, 6859 Cand1.ExplicitCallArguments)) 6860 return BetterTemplate == Cand1.Function->getPrimaryTemplate(); 6861 } 6862 6863 // -- the context is an initialization by user-defined conversion 6864 // (see 8.5, 13.3.1.5) and the standard conversion sequence 6865 // from the return type of F1 to the destination type (i.e., 6866 // the type of the entity being initialized) is a better 6867 // conversion sequence than the standard conversion sequence 6868 // from the return type of F2 to the destination type. 6869 if (UserDefinedConversion && Cand1.Function && Cand2.Function && 6870 isa<CXXConversionDecl>(Cand1.Function) && 6871 isa<CXXConversionDecl>(Cand2.Function)) { 6872 switch (CompareStandardConversionSequences(S, 6873 Cand1.FinalConversion, 6874 Cand2.FinalConversion)) { 6875 case ImplicitConversionSequence::Better: 6876 // Cand1 has a better conversion sequence. 6877 return true; 6878 6879 case ImplicitConversionSequence::Worse: 6880 // Cand1 can't be better than Cand2. 6881 return false; 6882 6883 case ImplicitConversionSequence::Indistinguishable: 6884 // Do nothing 6885 break; 6886 } 6887 } 6888 6889 return false; 6890} 6891 6892/// \brief Computes the best viable function (C++ 13.3.3) 6893/// within an overload candidate set. 6894/// 6895/// \param CandidateSet the set of candidate functions. 6896/// 6897/// \param Loc the location of the function name (or operator symbol) for 6898/// which overload resolution occurs. 6899/// 6900/// \param Best f overload resolution was successful or found a deleted 6901/// function, Best points to the candidate function found. 6902/// 6903/// \returns The result of overload resolution. 6904OverloadingResult 6905OverloadCandidateSet::BestViableFunction(Sema &S, SourceLocation Loc, 6906 iterator &Best, 6907 bool UserDefinedConversion) { 6908 // Find the best viable function. 6909 Best = end(); 6910 for (iterator Cand = begin(); Cand != end(); ++Cand) { 6911 if (Cand->Viable) 6912 if (Best == end() || isBetterOverloadCandidate(S, *Cand, *Best, Loc, 6913 UserDefinedConversion)) 6914 Best = Cand; 6915 } 6916 6917 // If we didn't find any viable functions, abort. 6918 if (Best == end()) 6919 return OR_No_Viable_Function; 6920 6921 // Make sure that this function is better than every other viable 6922 // function. If not, we have an ambiguity. 6923 for (iterator Cand = begin(); Cand != end(); ++Cand) { 6924 if (Cand->Viable && 6925 Cand != Best && 6926 !isBetterOverloadCandidate(S, *Best, *Cand, Loc, 6927 UserDefinedConversion)) { 6928 Best = end(); 6929 return OR_Ambiguous; 6930 } 6931 } 6932 6933 // Best is the best viable function. 6934 if (Best->Function && 6935 (Best->Function->isDeleted() || 6936 S.isFunctionConsideredUnavailable(Best->Function))) 6937 return OR_Deleted; 6938 6939 return OR_Success; 6940} 6941 6942namespace { 6943 6944enum OverloadCandidateKind { 6945 oc_function, 6946 oc_method, 6947 oc_constructor, 6948 oc_function_template, 6949 oc_method_template, 6950 oc_constructor_template, 6951 oc_implicit_default_constructor, 6952 oc_implicit_copy_constructor, 6953 oc_implicit_move_constructor, 6954 oc_implicit_copy_assignment, 6955 oc_implicit_move_assignment, 6956 oc_implicit_inherited_constructor 6957}; 6958 6959OverloadCandidateKind ClassifyOverloadCandidate(Sema &S, 6960 FunctionDecl *Fn, 6961 std::string &Description) { 6962 bool isTemplate = false; 6963 6964 if (FunctionTemplateDecl *FunTmpl = Fn->getPrimaryTemplate()) { 6965 isTemplate = true; 6966 Description = S.getTemplateArgumentBindingsText( 6967 FunTmpl->getTemplateParameters(), *Fn->getTemplateSpecializationArgs()); 6968 } 6969 6970 if (CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn)) { 6971 if (!Ctor->isImplicit()) 6972 return isTemplate ? oc_constructor_template : oc_constructor; 6973 6974 if (Ctor->getInheritedConstructor()) 6975 return oc_implicit_inherited_constructor; 6976 6977 if (Ctor->isDefaultConstructor()) 6978 return oc_implicit_default_constructor; 6979 6980 if (Ctor->isMoveConstructor()) 6981 return oc_implicit_move_constructor; 6982 6983 assert(Ctor->isCopyConstructor() && 6984 "unexpected sort of implicit constructor"); 6985 return oc_implicit_copy_constructor; 6986 } 6987 6988 if (CXXMethodDecl *Meth = dyn_cast<CXXMethodDecl>(Fn)) { 6989 // This actually gets spelled 'candidate function' for now, but 6990 // it doesn't hurt to split it out. 6991 if (!Meth->isImplicit()) 6992 return isTemplate ? oc_method_template : oc_method; 6993 6994 if (Meth->isMoveAssignmentOperator()) 6995 return oc_implicit_move_assignment; 6996 6997 assert(Meth->isCopyAssignmentOperator() 6998 && "implicit method is not copy assignment operator?"); 6999 return oc_implicit_copy_assignment; 7000 } 7001 7002 return isTemplate ? oc_function_template : oc_function; 7003} 7004 7005void MaybeEmitInheritedConstructorNote(Sema &S, FunctionDecl *Fn) { 7006 const CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn); 7007 if (!Ctor) return; 7008 7009 Ctor = Ctor->getInheritedConstructor(); 7010 if (!Ctor) return; 7011 7012 S.Diag(Ctor->getLocation(), diag::note_ovl_candidate_inherited_constructor); 7013} 7014 7015} // end anonymous namespace 7016 7017// Notes the location of an overload candidate. 7018void Sema::NoteOverloadCandidate(FunctionDecl *Fn) { 7019 std::string FnDesc; 7020 OverloadCandidateKind K = ClassifyOverloadCandidate(*this, Fn, FnDesc); 7021 Diag(Fn->getLocation(), diag::note_ovl_candidate) 7022 << (unsigned) K << FnDesc; 7023 MaybeEmitInheritedConstructorNote(*this, Fn); 7024} 7025 7026//Notes the location of all overload candidates designated through 7027// OverloadedExpr 7028void Sema::NoteAllOverloadCandidates(Expr* OverloadedExpr) { 7029 assert(OverloadedExpr->getType() == Context.OverloadTy); 7030 7031 OverloadExpr::FindResult Ovl = OverloadExpr::find(OverloadedExpr); 7032 OverloadExpr *OvlExpr = Ovl.Expression; 7033 7034 for (UnresolvedSetIterator I = OvlExpr->decls_begin(), 7035 IEnd = OvlExpr->decls_end(); 7036 I != IEnd; ++I) { 7037 if (FunctionTemplateDecl *FunTmpl = 7038 dyn_cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl()) ) { 7039 NoteOverloadCandidate(FunTmpl->getTemplatedDecl()); 7040 } else if (FunctionDecl *Fun 7041 = dyn_cast<FunctionDecl>((*I)->getUnderlyingDecl()) ) { 7042 NoteOverloadCandidate(Fun); 7043 } 7044 } 7045} 7046 7047/// Diagnoses an ambiguous conversion. The partial diagnostic is the 7048/// "lead" diagnostic; it will be given two arguments, the source and 7049/// target types of the conversion. 7050void ImplicitConversionSequence::DiagnoseAmbiguousConversion( 7051 Sema &S, 7052 SourceLocation CaretLoc, 7053 const PartialDiagnostic &PDiag) const { 7054 S.Diag(CaretLoc, PDiag) 7055 << Ambiguous.getFromType() << Ambiguous.getToType(); 7056 for (AmbiguousConversionSequence::const_iterator 7057 I = Ambiguous.begin(), E = Ambiguous.end(); I != E; ++I) { 7058 S.NoteOverloadCandidate(*I); 7059 } 7060} 7061 7062namespace { 7063 7064void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I) { 7065 const ImplicitConversionSequence &Conv = Cand->Conversions[I]; 7066 assert(Conv.isBad()); 7067 assert(Cand->Function && "for now, candidate must be a function"); 7068 FunctionDecl *Fn = Cand->Function; 7069 7070 // There's a conversion slot for the object argument if this is a 7071 // non-constructor method. Note that 'I' corresponds the 7072 // conversion-slot index. 7073 bool isObjectArgument = false; 7074 if (isa<CXXMethodDecl>(Fn) && !isa<CXXConstructorDecl>(Fn)) { 7075 if (I == 0) 7076 isObjectArgument = true; 7077 else 7078 I--; 7079 } 7080 7081 std::string FnDesc; 7082 OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc); 7083 7084 Expr *FromExpr = Conv.Bad.FromExpr; 7085 QualType FromTy = Conv.Bad.getFromType(); 7086 QualType ToTy = Conv.Bad.getToType(); 7087 7088 if (FromTy == S.Context.OverloadTy) { 7089 assert(FromExpr && "overload set argument came from implicit argument?"); 7090 Expr *E = FromExpr->IgnoreParens(); 7091 if (isa<UnaryOperator>(E)) 7092 E = cast<UnaryOperator>(E)->getSubExpr()->IgnoreParens(); 7093 DeclarationName Name = cast<OverloadExpr>(E)->getName(); 7094 7095 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_overload) 7096 << (unsigned) FnKind << FnDesc 7097 << (FromExpr ? FromExpr->getSourceRange() : SourceRange()) 7098 << ToTy << Name << I+1; 7099 MaybeEmitInheritedConstructorNote(S, Fn); 7100 return; 7101 } 7102 7103 // Do some hand-waving analysis to see if the non-viability is due 7104 // to a qualifier mismatch. 7105 CanQualType CFromTy = S.Context.getCanonicalType(FromTy); 7106 CanQualType CToTy = S.Context.getCanonicalType(ToTy); 7107 if (CanQual<ReferenceType> RT = CToTy->getAs<ReferenceType>()) 7108 CToTy = RT->getPointeeType(); 7109 else { 7110 // TODO: detect and diagnose the full richness of const mismatches. 7111 if (CanQual<PointerType> FromPT = CFromTy->getAs<PointerType>()) 7112 if (CanQual<PointerType> ToPT = CToTy->getAs<PointerType>()) 7113 CFromTy = FromPT->getPointeeType(), CToTy = ToPT->getPointeeType(); 7114 } 7115 7116 if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && 7117 !CToTy.isAtLeastAsQualifiedAs(CFromTy)) { 7118 // It is dumb that we have to do this here. 7119 while (isa<ArrayType>(CFromTy)) 7120 CFromTy = CFromTy->getAs<ArrayType>()->getElementType(); 7121 while (isa<ArrayType>(CToTy)) 7122 CToTy = CFromTy->getAs<ArrayType>()->getElementType(); 7123 7124 Qualifiers FromQs = CFromTy.getQualifiers(); 7125 Qualifiers ToQs = CToTy.getQualifiers(); 7126 7127 if (FromQs.getAddressSpace() != ToQs.getAddressSpace()) { 7128 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_addrspace) 7129 << (unsigned) FnKind << FnDesc 7130 << (FromExpr ? FromExpr->getSourceRange() : SourceRange()) 7131 << FromTy 7132 << FromQs.getAddressSpace() << ToQs.getAddressSpace() 7133 << (unsigned) isObjectArgument << I+1; 7134 MaybeEmitInheritedConstructorNote(S, Fn); 7135 return; 7136 } 7137 7138 if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) { 7139 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_ownership) 7140 << (unsigned) FnKind << FnDesc 7141 << (FromExpr ? FromExpr->getSourceRange() : SourceRange()) 7142 << FromTy 7143 << FromQs.getObjCLifetime() << ToQs.getObjCLifetime() 7144 << (unsigned) isObjectArgument << I+1; 7145 MaybeEmitInheritedConstructorNote(S, Fn); 7146 return; 7147 } 7148 7149 if (FromQs.getObjCGCAttr() != ToQs.getObjCGCAttr()) { 7150 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_gc) 7151 << (unsigned) FnKind << FnDesc 7152 << (FromExpr ? FromExpr->getSourceRange() : SourceRange()) 7153 << FromTy 7154 << FromQs.getObjCGCAttr() << ToQs.getObjCGCAttr() 7155 << (unsigned) isObjectArgument << I+1; 7156 MaybeEmitInheritedConstructorNote(S, Fn); 7157 return; 7158 } 7159 7160 unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers(); 7161 assert(CVR && "unexpected qualifiers mismatch"); 7162 7163 if (isObjectArgument) { 7164 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr_this) 7165 << (unsigned) FnKind << FnDesc 7166 << (FromExpr ? FromExpr->getSourceRange() : SourceRange()) 7167 << FromTy << (CVR - 1); 7168 } else { 7169 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr) 7170 << (unsigned) FnKind << FnDesc 7171 << (FromExpr ? FromExpr->getSourceRange() : SourceRange()) 7172 << FromTy << (CVR - 1) << I+1; 7173 } 7174 MaybeEmitInheritedConstructorNote(S, Fn); 7175 return; 7176 } 7177 7178 // Special diagnostic for failure to convert an initializer list, since 7179 // telling the user that it has type void is not useful. 7180 if (FromExpr && isa<InitListExpr>(FromExpr)) { 7181 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_list_argument) 7182 << (unsigned) FnKind << FnDesc 7183 << (FromExpr ? FromExpr->getSourceRange() : SourceRange()) 7184 << FromTy << ToTy << (unsigned) isObjectArgument << I+1; 7185 MaybeEmitInheritedConstructorNote(S, Fn); 7186 return; 7187 } 7188 7189 // Diagnose references or pointers to incomplete types differently, 7190 // since it's far from impossible that the incompleteness triggered 7191 // the failure. 7192 QualType TempFromTy = FromTy.getNonReferenceType(); 7193 if (const PointerType *PTy = TempFromTy->getAs<PointerType>()) 7194 TempFromTy = PTy->getPointeeType(); 7195 if (TempFromTy->isIncompleteType()) { 7196 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_conv_incomplete) 7197 << (unsigned) FnKind << FnDesc 7198 << (FromExpr ? FromExpr->getSourceRange() : SourceRange()) 7199 << FromTy << ToTy << (unsigned) isObjectArgument << I+1; 7200 MaybeEmitInheritedConstructorNote(S, Fn); 7201 return; 7202 } 7203 7204 // Diagnose base -> derived pointer conversions. 7205 unsigned BaseToDerivedConversion = 0; 7206 if (const PointerType *FromPtrTy = FromTy->getAs<PointerType>()) { 7207 if (const PointerType *ToPtrTy = ToTy->getAs<PointerType>()) { 7208 if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs( 7209 FromPtrTy->getPointeeType()) && 7210 !FromPtrTy->getPointeeType()->isIncompleteType() && 7211 !ToPtrTy->getPointeeType()->isIncompleteType() && 7212 S.IsDerivedFrom(ToPtrTy->getPointeeType(), 7213 FromPtrTy->getPointeeType())) 7214 BaseToDerivedConversion = 1; 7215 } 7216 } else if (const ObjCObjectPointerType *FromPtrTy 7217 = FromTy->getAs<ObjCObjectPointerType>()) { 7218 if (const ObjCObjectPointerType *ToPtrTy 7219 = ToTy->getAs<ObjCObjectPointerType>()) 7220 if (const ObjCInterfaceDecl *FromIface = FromPtrTy->getInterfaceDecl()) 7221 if (const ObjCInterfaceDecl *ToIface = ToPtrTy->getInterfaceDecl()) 7222 if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs( 7223 FromPtrTy->getPointeeType()) && 7224 FromIface->isSuperClassOf(ToIface)) 7225 BaseToDerivedConversion = 2; 7226 } else if (const ReferenceType *ToRefTy = ToTy->getAs<ReferenceType>()) { 7227 if (ToRefTy->getPointeeType().isAtLeastAsQualifiedAs(FromTy) && 7228 !FromTy->isIncompleteType() && 7229 !ToRefTy->getPointeeType()->isIncompleteType() && 7230 S.IsDerivedFrom(ToRefTy->getPointeeType(), FromTy)) 7231 BaseToDerivedConversion = 3; 7232 } 7233 7234 if (BaseToDerivedConversion) { 7235 S.Diag(Fn->getLocation(), 7236 diag::note_ovl_candidate_bad_base_to_derived_conv) 7237 << (unsigned) FnKind << FnDesc 7238 << (FromExpr ? FromExpr->getSourceRange() : SourceRange()) 7239 << (BaseToDerivedConversion - 1) 7240 << FromTy << ToTy << I+1; 7241 MaybeEmitInheritedConstructorNote(S, Fn); 7242 return; 7243 } 7244 7245 if (isa<ObjCObjectPointerType>(CFromTy) && 7246 isa<PointerType>(CToTy)) { 7247 Qualifiers FromQs = CFromTy.getQualifiers(); 7248 Qualifiers ToQs = CToTy.getQualifiers(); 7249 if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) { 7250 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_arc_conv) 7251 << (unsigned) FnKind << FnDesc 7252 << (FromExpr ? FromExpr->getSourceRange() : SourceRange()) 7253 << FromTy << ToTy << (unsigned) isObjectArgument << I+1; 7254 MaybeEmitInheritedConstructorNote(S, Fn); 7255 return; 7256 } 7257 } 7258 7259 // Emit the generic diagnostic and, optionally, add the hints to it. 7260 PartialDiagnostic FDiag = S.PDiag(diag::note_ovl_candidate_bad_conv); 7261 FDiag << (unsigned) FnKind << FnDesc 7262 << (FromExpr ? FromExpr->getSourceRange() : SourceRange()) 7263 << FromTy << ToTy << (unsigned) isObjectArgument << I + 1 7264 << (unsigned) (Cand->Fix.Kind); 7265 7266 // If we can fix the conversion, suggest the FixIts. 7267 for (SmallVector<FixItHint, 1>::iterator 7268 HI = Cand->Fix.Hints.begin(), HE = Cand->Fix.Hints.end(); 7269 HI != HE; ++HI) 7270 FDiag << *HI; 7271 S.Diag(Fn->getLocation(), FDiag); 7272 7273 MaybeEmitInheritedConstructorNote(S, Fn); 7274} 7275 7276void DiagnoseArityMismatch(Sema &S, OverloadCandidate *Cand, 7277 unsigned NumFormalArgs) { 7278 // TODO: treat calls to a missing default constructor as a special case 7279 7280 FunctionDecl *Fn = Cand->Function; 7281 const FunctionProtoType *FnTy = Fn->getType()->getAs<FunctionProtoType>(); 7282 7283 unsigned MinParams = Fn->getMinRequiredArguments(); 7284 7285 // With invalid overloaded operators, it's possible that we think we 7286 // have an arity mismatch when it fact it looks like we have the 7287 // right number of arguments, because only overloaded operators have 7288 // the weird behavior of overloading member and non-member functions. 7289 // Just don't report anything. 7290 if (Fn->isInvalidDecl() && 7291 Fn->getDeclName().getNameKind() == DeclarationName::CXXOperatorName) 7292 return; 7293 7294 // at least / at most / exactly 7295 unsigned mode, modeCount; 7296 if (NumFormalArgs < MinParams) { 7297 assert((Cand->FailureKind == ovl_fail_too_few_arguments) || 7298 (Cand->FailureKind == ovl_fail_bad_deduction && 7299 Cand->DeductionFailure.Result == Sema::TDK_TooFewArguments)); 7300 if (MinParams != FnTy->getNumArgs() || 7301 FnTy->isVariadic() || FnTy->isTemplateVariadic()) 7302 mode = 0; // "at least" 7303 else 7304 mode = 2; // "exactly" 7305 modeCount = MinParams; 7306 } else { 7307 assert((Cand->FailureKind == ovl_fail_too_many_arguments) || 7308 (Cand->FailureKind == ovl_fail_bad_deduction && 7309 Cand->DeductionFailure.Result == Sema::TDK_TooManyArguments)); 7310 if (MinParams != FnTy->getNumArgs()) 7311 mode = 1; // "at most" 7312 else 7313 mode = 2; // "exactly" 7314 modeCount = FnTy->getNumArgs(); 7315 } 7316 7317 std::string Description; 7318 OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, Description); 7319 7320 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity) 7321 << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != 0) << mode 7322 << modeCount << NumFormalArgs; 7323 MaybeEmitInheritedConstructorNote(S, Fn); 7324} 7325 7326/// Diagnose a failed template-argument deduction. 7327void DiagnoseBadDeduction(Sema &S, OverloadCandidate *Cand, 7328 Expr **Args, unsigned NumArgs) { 7329 FunctionDecl *Fn = Cand->Function; // pattern 7330 7331 TemplateParameter Param = Cand->DeductionFailure.getTemplateParameter(); 7332 NamedDecl *ParamD; 7333 (ParamD = Param.dyn_cast<TemplateTypeParmDecl*>()) || 7334 (ParamD = Param.dyn_cast<NonTypeTemplateParmDecl*>()) || 7335 (ParamD = Param.dyn_cast<TemplateTemplateParmDecl*>()); 7336 switch (Cand->DeductionFailure.Result) { 7337 case Sema::TDK_Success: 7338 llvm_unreachable("TDK_success while diagnosing bad deduction"); 7339 7340 case Sema::TDK_Incomplete: { 7341 assert(ParamD && "no parameter found for incomplete deduction result"); 7342 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_incomplete_deduction) 7343 << ParamD->getDeclName(); 7344 MaybeEmitInheritedConstructorNote(S, Fn); 7345 return; 7346 } 7347 7348 case Sema::TDK_Underqualified: { 7349 assert(ParamD && "no parameter found for bad qualifiers deduction result"); 7350 TemplateTypeParmDecl *TParam = cast<TemplateTypeParmDecl>(ParamD); 7351 7352 QualType Param = Cand->DeductionFailure.getFirstArg()->getAsType(); 7353 7354 // Param will have been canonicalized, but it should just be a 7355 // qualified version of ParamD, so move the qualifiers to that. 7356 QualifierCollector Qs; 7357 Qs.strip(Param); 7358 QualType NonCanonParam = Qs.apply(S.Context, TParam->getTypeForDecl()); 7359 assert(S.Context.hasSameType(Param, NonCanonParam)); 7360 7361 // Arg has also been canonicalized, but there's nothing we can do 7362 // about that. It also doesn't matter as much, because it won't 7363 // have any template parameters in it (because deduction isn't 7364 // done on dependent types). 7365 QualType Arg = Cand->DeductionFailure.getSecondArg()->getAsType(); 7366 7367 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_underqualified) 7368 << ParamD->getDeclName() << Arg << NonCanonParam; 7369 MaybeEmitInheritedConstructorNote(S, Fn); 7370 return; 7371 } 7372 7373 case Sema::TDK_Inconsistent: { 7374 assert(ParamD && "no parameter found for inconsistent deduction result"); 7375 int which = 0; 7376 if (isa<TemplateTypeParmDecl>(ParamD)) 7377 which = 0; 7378 else if (isa<NonTypeTemplateParmDecl>(ParamD)) 7379 which = 1; 7380 else { 7381 which = 2; 7382 } 7383 7384 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_inconsistent_deduction) 7385 << which << ParamD->getDeclName() 7386 << *Cand->DeductionFailure.getFirstArg() 7387 << *Cand->DeductionFailure.getSecondArg(); 7388 MaybeEmitInheritedConstructorNote(S, Fn); 7389 return; 7390 } 7391 7392 case Sema::TDK_InvalidExplicitArguments: 7393 assert(ParamD && "no parameter found for invalid explicit arguments"); 7394 if (ParamD->getDeclName()) 7395 S.Diag(Fn->getLocation(), 7396 diag::note_ovl_candidate_explicit_arg_mismatch_named) 7397 << ParamD->getDeclName(); 7398 else { 7399 int index = 0; 7400 if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(ParamD)) 7401 index = TTP->getIndex(); 7402 else if (NonTypeTemplateParmDecl *NTTP 7403 = dyn_cast<NonTypeTemplateParmDecl>(ParamD)) 7404 index = NTTP->getIndex(); 7405 else 7406 index = cast<TemplateTemplateParmDecl>(ParamD)->getIndex(); 7407 S.Diag(Fn->getLocation(), 7408 diag::note_ovl_candidate_explicit_arg_mismatch_unnamed) 7409 << (index + 1); 7410 } 7411 MaybeEmitInheritedConstructorNote(S, Fn); 7412 return; 7413 7414 case Sema::TDK_TooManyArguments: 7415 case Sema::TDK_TooFewArguments: 7416 DiagnoseArityMismatch(S, Cand, NumArgs); 7417 return; 7418 7419 case Sema::TDK_InstantiationDepth: 7420 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_instantiation_depth); 7421 MaybeEmitInheritedConstructorNote(S, Fn); 7422 return; 7423 7424 case Sema::TDK_SubstitutionFailure: { 7425 std::string ArgString; 7426 if (TemplateArgumentList *Args 7427 = Cand->DeductionFailure.getTemplateArgumentList()) 7428 ArgString = S.getTemplateArgumentBindingsText( 7429 Fn->getDescribedFunctionTemplate()->getTemplateParameters(), 7430 *Args); 7431 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_substitution_failure) 7432 << ArgString; 7433 MaybeEmitInheritedConstructorNote(S, Fn); 7434 return; 7435 } 7436 7437 // TODO: diagnose these individually, then kill off 7438 // note_ovl_candidate_bad_deduction, which is uselessly vague. 7439 case Sema::TDK_NonDeducedMismatch: 7440 case Sema::TDK_FailedOverloadResolution: 7441 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_deduction); 7442 MaybeEmitInheritedConstructorNote(S, Fn); 7443 return; 7444 } 7445} 7446 7447/// CUDA: diagnose an invalid call across targets. 7448void DiagnoseBadTarget(Sema &S, OverloadCandidate *Cand) { 7449 FunctionDecl *Caller = cast<FunctionDecl>(S.CurContext); 7450 FunctionDecl *Callee = Cand->Function; 7451 7452 Sema::CUDAFunctionTarget CallerTarget = S.IdentifyCUDATarget(Caller), 7453 CalleeTarget = S.IdentifyCUDATarget(Callee); 7454 7455 std::string FnDesc; 7456 OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Callee, FnDesc); 7457 7458 S.Diag(Callee->getLocation(), diag::note_ovl_candidate_bad_target) 7459 << (unsigned) FnKind << CalleeTarget << CallerTarget; 7460} 7461 7462/// Generates a 'note' diagnostic for an overload candidate. We've 7463/// already generated a primary error at the call site. 7464/// 7465/// It really does need to be a single diagnostic with its caret 7466/// pointed at the candidate declaration. Yes, this creates some 7467/// major challenges of technical writing. Yes, this makes pointing 7468/// out problems with specific arguments quite awkward. It's still 7469/// better than generating twenty screens of text for every failed 7470/// overload. 7471/// 7472/// It would be great to be able to express per-candidate problems 7473/// more richly for those diagnostic clients that cared, but we'd 7474/// still have to be just as careful with the default diagnostics. 7475void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand, 7476 Expr **Args, unsigned NumArgs) { 7477 FunctionDecl *Fn = Cand->Function; 7478 7479 // Note deleted candidates, but only if they're viable. 7480 if (Cand->Viable && (Fn->isDeleted() || 7481 S.isFunctionConsideredUnavailable(Fn))) { 7482 std::string FnDesc; 7483 OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc); 7484 7485 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_deleted) 7486 << FnKind << FnDesc << Fn->isDeleted(); 7487 MaybeEmitInheritedConstructorNote(S, Fn); 7488 return; 7489 } 7490 7491 // We don't really have anything else to say about viable candidates. 7492 if (Cand->Viable) { 7493 S.NoteOverloadCandidate(Fn); 7494 return; 7495 } 7496 7497 switch (Cand->FailureKind) { 7498 case ovl_fail_too_many_arguments: 7499 case ovl_fail_too_few_arguments: 7500 return DiagnoseArityMismatch(S, Cand, NumArgs); 7501 7502 case ovl_fail_bad_deduction: 7503 return DiagnoseBadDeduction(S, Cand, Args, NumArgs); 7504 7505 case ovl_fail_trivial_conversion: 7506 case ovl_fail_bad_final_conversion: 7507 case ovl_fail_final_conversion_not_exact: 7508 return S.NoteOverloadCandidate(Fn); 7509 7510 case ovl_fail_bad_conversion: { 7511 unsigned I = (Cand->IgnoreObjectArgument ? 1 : 0); 7512 for (unsigned N = Cand->Conversions.size(); I != N; ++I) 7513 if (Cand->Conversions[I].isBad()) 7514 return DiagnoseBadConversion(S, Cand, I); 7515 7516 // FIXME: this currently happens when we're called from SemaInit 7517 // when user-conversion overload fails. Figure out how to handle 7518 // those conditions and diagnose them well. 7519 return S.NoteOverloadCandidate(Fn); 7520 } 7521 7522 case ovl_fail_bad_target: 7523 return DiagnoseBadTarget(S, Cand); 7524 } 7525} 7526 7527void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) { 7528 // Desugar the type of the surrogate down to a function type, 7529 // retaining as many typedefs as possible while still showing 7530 // the function type (and, therefore, its parameter types). 7531 QualType FnType = Cand->Surrogate->getConversionType(); 7532 bool isLValueReference = false; 7533 bool isRValueReference = false; 7534 bool isPointer = false; 7535 if (const LValueReferenceType *FnTypeRef = 7536 FnType->getAs<LValueReferenceType>()) { 7537 FnType = FnTypeRef->getPointeeType(); 7538 isLValueReference = true; 7539 } else if (const RValueReferenceType *FnTypeRef = 7540 FnType->getAs<RValueReferenceType>()) { 7541 FnType = FnTypeRef->getPointeeType(); 7542 isRValueReference = true; 7543 } 7544 if (const PointerType *FnTypePtr = FnType->getAs<PointerType>()) { 7545 FnType = FnTypePtr->getPointeeType(); 7546 isPointer = true; 7547 } 7548 // Desugar down to a function type. 7549 FnType = QualType(FnType->getAs<FunctionType>(), 0); 7550 // Reconstruct the pointer/reference as appropriate. 7551 if (isPointer) FnType = S.Context.getPointerType(FnType); 7552 if (isRValueReference) FnType = S.Context.getRValueReferenceType(FnType); 7553 if (isLValueReference) FnType = S.Context.getLValueReferenceType(FnType); 7554 7555 S.Diag(Cand->Surrogate->getLocation(), diag::note_ovl_surrogate_cand) 7556 << FnType; 7557 MaybeEmitInheritedConstructorNote(S, Cand->Surrogate); 7558} 7559 7560void NoteBuiltinOperatorCandidate(Sema &S, 7561 const char *Opc, 7562 SourceLocation OpLoc, 7563 OverloadCandidate *Cand) { 7564 assert(Cand->Conversions.size() <= 2 && "builtin operator is not binary"); 7565 std::string TypeStr("operator"); 7566 TypeStr += Opc; 7567 TypeStr += "("; 7568 TypeStr += Cand->BuiltinTypes.ParamTypes[0].getAsString(); 7569 if (Cand->Conversions.size() == 1) { 7570 TypeStr += ")"; 7571 S.Diag(OpLoc, diag::note_ovl_builtin_unary_candidate) << TypeStr; 7572 } else { 7573 TypeStr += ", "; 7574 TypeStr += Cand->BuiltinTypes.ParamTypes[1].getAsString(); 7575 TypeStr += ")"; 7576 S.Diag(OpLoc, diag::note_ovl_builtin_binary_candidate) << TypeStr; 7577 } 7578} 7579 7580void NoteAmbiguousUserConversions(Sema &S, SourceLocation OpLoc, 7581 OverloadCandidate *Cand) { 7582 unsigned NoOperands = Cand->Conversions.size(); 7583 for (unsigned ArgIdx = 0; ArgIdx < NoOperands; ++ArgIdx) { 7584 const ImplicitConversionSequence &ICS = Cand->Conversions[ArgIdx]; 7585 if (ICS.isBad()) break; // all meaningless after first invalid 7586 if (!ICS.isAmbiguous()) continue; 7587 7588 ICS.DiagnoseAmbiguousConversion(S, OpLoc, 7589 S.PDiag(diag::note_ambiguous_type_conversion)); 7590 } 7591} 7592 7593SourceLocation GetLocationForCandidate(const OverloadCandidate *Cand) { 7594 if (Cand->Function) 7595 return Cand->Function->getLocation(); 7596 if (Cand->IsSurrogate) 7597 return Cand->Surrogate->getLocation(); 7598 return SourceLocation(); 7599} 7600 7601static unsigned 7602RankDeductionFailure(const OverloadCandidate::DeductionFailureInfo &DFI) { 7603 switch ((Sema::TemplateDeductionResult)DFI.Result) { 7604 case Sema::TDK_Success: 7605 llvm_unreachable("TDK_success while diagnosing bad deduction"); 7606 7607 case Sema::TDK_Incomplete: 7608 return 1; 7609 7610 case Sema::TDK_Underqualified: 7611 case Sema::TDK_Inconsistent: 7612 return 2; 7613 7614 case Sema::TDK_SubstitutionFailure: 7615 case Sema::TDK_NonDeducedMismatch: 7616 return 3; 7617 7618 case Sema::TDK_InstantiationDepth: 7619 case Sema::TDK_FailedOverloadResolution: 7620 return 4; 7621 7622 case Sema::TDK_InvalidExplicitArguments: 7623 return 5; 7624 7625 case Sema::TDK_TooManyArguments: 7626 case Sema::TDK_TooFewArguments: 7627 return 6; 7628 } 7629 llvm_unreachable("Unhandled deduction result"); 7630} 7631 7632struct CompareOverloadCandidatesForDisplay { 7633 Sema &S; 7634 CompareOverloadCandidatesForDisplay(Sema &S) : S(S) {} 7635 7636 bool operator()(const OverloadCandidate *L, 7637 const OverloadCandidate *R) { 7638 // Fast-path this check. 7639 if (L == R) return false; 7640 7641 // Order first by viability. 7642 if (L->Viable) { 7643 if (!R->Viable) return true; 7644 7645 // TODO: introduce a tri-valued comparison for overload 7646 // candidates. Would be more worthwhile if we had a sort 7647 // that could exploit it. 7648 if (isBetterOverloadCandidate(S, *L, *R, SourceLocation())) return true; 7649 if (isBetterOverloadCandidate(S, *R, *L, SourceLocation())) return false; 7650 } else if (R->Viable) 7651 return false; 7652 7653 assert(L->Viable == R->Viable); 7654 7655 // Criteria by which we can sort non-viable candidates: 7656 if (!L->Viable) { 7657 // 1. Arity mismatches come after other candidates. 7658 if (L->FailureKind == ovl_fail_too_many_arguments || 7659 L->FailureKind == ovl_fail_too_few_arguments) 7660 return false; 7661 if (R->FailureKind == ovl_fail_too_many_arguments || 7662 R->FailureKind == ovl_fail_too_few_arguments) 7663 return true; 7664 7665 // 2. Bad conversions come first and are ordered by the number 7666 // of bad conversions and quality of good conversions. 7667 if (L->FailureKind == ovl_fail_bad_conversion) { 7668 if (R->FailureKind != ovl_fail_bad_conversion) 7669 return true; 7670 7671 // The conversion that can be fixed with a smaller number of changes, 7672 // comes first. 7673 unsigned numLFixes = L->Fix.NumConversionsFixed; 7674 unsigned numRFixes = R->Fix.NumConversionsFixed; 7675 numLFixes = (numLFixes == 0) ? UINT_MAX : numLFixes; 7676 numRFixes = (numRFixes == 0) ? UINT_MAX : numRFixes; 7677 if (numLFixes != numRFixes) { 7678 if (numLFixes < numRFixes) 7679 return true; 7680 else 7681 return false; 7682 } 7683 7684 // If there's any ordering between the defined conversions... 7685 // FIXME: this might not be transitive. 7686 assert(L->Conversions.size() == R->Conversions.size()); 7687 7688 int leftBetter = 0; 7689 unsigned I = (L->IgnoreObjectArgument || R->IgnoreObjectArgument); 7690 for (unsigned E = L->Conversions.size(); I != E; ++I) { 7691 switch (CompareImplicitConversionSequences(S, 7692 L->Conversions[I], 7693 R->Conversions[I])) { 7694 case ImplicitConversionSequence::Better: 7695 leftBetter++; 7696 break; 7697 7698 case ImplicitConversionSequence::Worse: 7699 leftBetter--; 7700 break; 7701 7702 case ImplicitConversionSequence::Indistinguishable: 7703 break; 7704 } 7705 } 7706 if (leftBetter > 0) return true; 7707 if (leftBetter < 0) return false; 7708 7709 } else if (R->FailureKind == ovl_fail_bad_conversion) 7710 return false; 7711 7712 if (L->FailureKind == ovl_fail_bad_deduction) { 7713 if (R->FailureKind != ovl_fail_bad_deduction) 7714 return true; 7715 7716 if (L->DeductionFailure.Result != R->DeductionFailure.Result) 7717 return RankDeductionFailure(L->DeductionFailure) 7718 < RankDeductionFailure(R->DeductionFailure); 7719 } else if (R->FailureKind == ovl_fail_bad_deduction) 7720 return false; 7721 7722 // TODO: others? 7723 } 7724 7725 // Sort everything else by location. 7726 SourceLocation LLoc = GetLocationForCandidate(L); 7727 SourceLocation RLoc = GetLocationForCandidate(R); 7728 7729 // Put candidates without locations (e.g. builtins) at the end. 7730 if (LLoc.isInvalid()) return false; 7731 if (RLoc.isInvalid()) return true; 7732 7733 return S.SourceMgr.isBeforeInTranslationUnit(LLoc, RLoc); 7734 } 7735}; 7736 7737/// CompleteNonViableCandidate - Normally, overload resolution only 7738/// computes up to the first. Produces the FixIt set if possible. 7739void CompleteNonViableCandidate(Sema &S, OverloadCandidate *Cand, 7740 Expr **Args, unsigned NumArgs) { 7741 assert(!Cand->Viable); 7742 7743 // Don't do anything on failures other than bad conversion. 7744 if (Cand->FailureKind != ovl_fail_bad_conversion) return; 7745 7746 // We only want the FixIts if all the arguments can be corrected. 7747 bool Unfixable = false; 7748 // Use a implicit copy initialization to check conversion fixes. 7749 Cand->Fix.setConversionChecker(TryCopyInitialization); 7750 7751 // Skip forward to the first bad conversion. 7752 unsigned ConvIdx = (Cand->IgnoreObjectArgument ? 1 : 0); 7753 unsigned ConvCount = Cand->Conversions.size(); 7754 while (true) { 7755 assert(ConvIdx != ConvCount && "no bad conversion in candidate"); 7756 ConvIdx++; 7757 if (Cand->Conversions[ConvIdx - 1].isBad()) { 7758 Unfixable = !Cand->TryToFixBadConversion(ConvIdx - 1, S); 7759 break; 7760 } 7761 } 7762 7763 if (ConvIdx == ConvCount) 7764 return; 7765 7766 assert(!Cand->Conversions[ConvIdx].isInitialized() && 7767 "remaining conversion is initialized?"); 7768 7769 // FIXME: this should probably be preserved from the overload 7770 // operation somehow. 7771 bool SuppressUserConversions = false; 7772 7773 const FunctionProtoType* Proto; 7774 unsigned ArgIdx = ConvIdx; 7775 7776 if (Cand->IsSurrogate) { 7777 QualType ConvType 7778 = Cand->Surrogate->getConversionType().getNonReferenceType(); 7779 if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>()) 7780 ConvType = ConvPtrType->getPointeeType(); 7781 Proto = ConvType->getAs<FunctionProtoType>(); 7782 ArgIdx--; 7783 } else if (Cand->Function) { 7784 Proto = Cand->Function->getType()->getAs<FunctionProtoType>(); 7785 if (isa<CXXMethodDecl>(Cand->Function) && 7786 !isa<CXXConstructorDecl>(Cand->Function)) 7787 ArgIdx--; 7788 } else { 7789 // Builtin binary operator with a bad first conversion. 7790 assert(ConvCount <= 3); 7791 for (; ConvIdx != ConvCount; ++ConvIdx) 7792 Cand->Conversions[ConvIdx] 7793 = TryCopyInitialization(S, Args[ConvIdx], 7794 Cand->BuiltinTypes.ParamTypes[ConvIdx], 7795 SuppressUserConversions, 7796 /*InOverloadResolution*/ true, 7797 /*AllowObjCWritebackConversion=*/ 7798 S.getLangOptions().ObjCAutoRefCount); 7799 return; 7800 } 7801 7802 // Fill in the rest of the conversions. 7803 unsigned NumArgsInProto = Proto->getNumArgs(); 7804 for (; ConvIdx != ConvCount; ++ConvIdx, ++ArgIdx) { 7805 if (ArgIdx < NumArgsInProto) { 7806 Cand->Conversions[ConvIdx] 7807 = TryCopyInitialization(S, Args[ArgIdx], Proto->getArgType(ArgIdx), 7808 SuppressUserConversions, 7809 /*InOverloadResolution=*/true, 7810 /*AllowObjCWritebackConversion=*/ 7811 S.getLangOptions().ObjCAutoRefCount); 7812 // Store the FixIt in the candidate if it exists. 7813 if (!Unfixable && Cand->Conversions[ConvIdx].isBad()) 7814 Unfixable = !Cand->TryToFixBadConversion(ConvIdx, S); 7815 } 7816 else 7817 Cand->Conversions[ConvIdx].setEllipsis(); 7818 } 7819} 7820 7821} // end anonymous namespace 7822 7823/// PrintOverloadCandidates - When overload resolution fails, prints 7824/// diagnostic messages containing the candidates in the candidate 7825/// set. 7826void OverloadCandidateSet::NoteCandidates(Sema &S, 7827 OverloadCandidateDisplayKind OCD, 7828 Expr **Args, unsigned NumArgs, 7829 const char *Opc, 7830 SourceLocation OpLoc) { 7831 // Sort the candidates by viability and position. Sorting directly would 7832 // be prohibitive, so we make a set of pointers and sort those. 7833 SmallVector<OverloadCandidate*, 32> Cands; 7834 if (OCD == OCD_AllCandidates) Cands.reserve(size()); 7835 for (iterator Cand = begin(), LastCand = end(); Cand != LastCand; ++Cand) { 7836 if (Cand->Viable) 7837 Cands.push_back(Cand); 7838 else if (OCD == OCD_AllCandidates) { 7839 CompleteNonViableCandidate(S, Cand, Args, NumArgs); 7840 if (Cand->Function || Cand->IsSurrogate) 7841 Cands.push_back(Cand); 7842 // Otherwise, this a non-viable builtin candidate. We do not, in general, 7843 // want to list every possible builtin candidate. 7844 } 7845 } 7846 7847 std::sort(Cands.begin(), Cands.end(), 7848 CompareOverloadCandidatesForDisplay(S)); 7849 7850 bool ReportedAmbiguousConversions = false; 7851 7852 SmallVectorImpl<OverloadCandidate*>::iterator I, E; 7853 const DiagnosticsEngine::OverloadsShown ShowOverloads = 7854 S.Diags.getShowOverloads(); 7855 unsigned CandsShown = 0; 7856 for (I = Cands.begin(), E = Cands.end(); I != E; ++I) { 7857 OverloadCandidate *Cand = *I; 7858 7859 // Set an arbitrary limit on the number of candidate functions we'll spam 7860 // the user with. FIXME: This limit should depend on details of the 7861 // candidate list. 7862 if (CandsShown >= 4 && ShowOverloads == DiagnosticsEngine::Ovl_Best) { 7863 break; 7864 } 7865 ++CandsShown; 7866 7867 if (Cand->Function) 7868 NoteFunctionCandidate(S, Cand, Args, NumArgs); 7869 else if (Cand->IsSurrogate) 7870 NoteSurrogateCandidate(S, Cand); 7871 else { 7872 assert(Cand->Viable && 7873 "Non-viable built-in candidates are not added to Cands."); 7874 // Generally we only see ambiguities including viable builtin 7875 // operators if overload resolution got screwed up by an 7876 // ambiguous user-defined conversion. 7877 // 7878 // FIXME: It's quite possible for different conversions to see 7879 // different ambiguities, though. 7880 if (!ReportedAmbiguousConversions) { 7881 NoteAmbiguousUserConversions(S, OpLoc, Cand); 7882 ReportedAmbiguousConversions = true; 7883 } 7884 7885 // If this is a viable builtin, print it. 7886 NoteBuiltinOperatorCandidate(S, Opc, OpLoc, Cand); 7887 } 7888 } 7889 7890 if (I != E) 7891 S.Diag(OpLoc, diag::note_ovl_too_many_candidates) << int(E - I); 7892} 7893 7894// [PossiblyAFunctionType] --> [Return] 7895// NonFunctionType --> NonFunctionType 7896// R (A) --> R(A) 7897// R (*)(A) --> R (A) 7898// R (&)(A) --> R (A) 7899// R (S::*)(A) --> R (A) 7900QualType Sema::ExtractUnqualifiedFunctionType(QualType PossiblyAFunctionType) { 7901 QualType Ret = PossiblyAFunctionType; 7902 if (const PointerType *ToTypePtr = 7903 PossiblyAFunctionType->getAs<PointerType>()) 7904 Ret = ToTypePtr->getPointeeType(); 7905 else if (const ReferenceType *ToTypeRef = 7906 PossiblyAFunctionType->getAs<ReferenceType>()) 7907 Ret = ToTypeRef->getPointeeType(); 7908 else if (const MemberPointerType *MemTypePtr = 7909 PossiblyAFunctionType->getAs<MemberPointerType>()) 7910 Ret = MemTypePtr->getPointeeType(); 7911 Ret = 7912 Context.getCanonicalType(Ret).getUnqualifiedType(); 7913 return Ret; 7914} 7915 7916// A helper class to help with address of function resolution 7917// - allows us to avoid passing around all those ugly parameters 7918class AddressOfFunctionResolver 7919{ 7920 Sema& S; 7921 Expr* SourceExpr; 7922 const QualType& TargetType; 7923 QualType TargetFunctionType; // Extracted function type from target type 7924 7925 bool Complain; 7926 //DeclAccessPair& ResultFunctionAccessPair; 7927 ASTContext& Context; 7928 7929 bool TargetTypeIsNonStaticMemberFunction; 7930 bool FoundNonTemplateFunction; 7931 7932 OverloadExpr::FindResult OvlExprInfo; 7933 OverloadExpr *OvlExpr; 7934 TemplateArgumentListInfo OvlExplicitTemplateArgs; 7935 SmallVector<std::pair<DeclAccessPair, FunctionDecl*>, 4> Matches; 7936 7937public: 7938 AddressOfFunctionResolver(Sema &S, Expr* SourceExpr, 7939 const QualType& TargetType, bool Complain) 7940 : S(S), SourceExpr(SourceExpr), TargetType(TargetType), 7941 Complain(Complain), Context(S.getASTContext()), 7942 TargetTypeIsNonStaticMemberFunction( 7943 !!TargetType->getAs<MemberPointerType>()), 7944 FoundNonTemplateFunction(false), 7945 OvlExprInfo(OverloadExpr::find(SourceExpr)), 7946 OvlExpr(OvlExprInfo.Expression) 7947 { 7948 ExtractUnqualifiedFunctionTypeFromTargetType(); 7949 7950 if (!TargetFunctionType->isFunctionType()) { 7951 if (OvlExpr->hasExplicitTemplateArgs()) { 7952 DeclAccessPair dap; 7953 if (FunctionDecl* Fn = S.ResolveSingleFunctionTemplateSpecialization( 7954 OvlExpr, false, &dap) ) { 7955 7956 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) { 7957 if (!Method->isStatic()) { 7958 // If the target type is a non-function type and the function 7959 // found is a non-static member function, pretend as if that was 7960 // the target, it's the only possible type to end up with. 7961 TargetTypeIsNonStaticMemberFunction = true; 7962 7963 // And skip adding the function if its not in the proper form. 7964 // We'll diagnose this due to an empty set of functions. 7965 if (!OvlExprInfo.HasFormOfMemberPointer) 7966 return; 7967 } 7968 } 7969 7970 Matches.push_back(std::make_pair(dap,Fn)); 7971 } 7972 } 7973 return; 7974 } 7975 7976 if (OvlExpr->hasExplicitTemplateArgs()) 7977 OvlExpr->getExplicitTemplateArgs().copyInto(OvlExplicitTemplateArgs); 7978 7979 if (FindAllFunctionsThatMatchTargetTypeExactly()) { 7980 // C++ [over.over]p4: 7981 // If more than one function is selected, [...] 7982 if (Matches.size() > 1) { 7983 if (FoundNonTemplateFunction) 7984 EliminateAllTemplateMatches(); 7985 else 7986 EliminateAllExceptMostSpecializedTemplate(); 7987 } 7988 } 7989 } 7990 7991private: 7992 bool isTargetTypeAFunction() const { 7993 return TargetFunctionType->isFunctionType(); 7994 } 7995 7996 // [ToType] [Return] 7997 7998 // R (*)(A) --> R (A), IsNonStaticMemberFunction = false 7999 // R (&)(A) --> R (A), IsNonStaticMemberFunction = false 8000 // R (S::*)(A) --> R (A), IsNonStaticMemberFunction = true 8001 void inline ExtractUnqualifiedFunctionTypeFromTargetType() { 8002 TargetFunctionType = S.ExtractUnqualifiedFunctionType(TargetType); 8003 } 8004 8005 // return true if any matching specializations were found 8006 bool AddMatchingTemplateFunction(FunctionTemplateDecl* FunctionTemplate, 8007 const DeclAccessPair& CurAccessFunPair) { 8008 if (CXXMethodDecl *Method 8009 = dyn_cast<CXXMethodDecl>(FunctionTemplate->getTemplatedDecl())) { 8010 // Skip non-static function templates when converting to pointer, and 8011 // static when converting to member pointer. 8012 if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction) 8013 return false; 8014 } 8015 else if (TargetTypeIsNonStaticMemberFunction) 8016 return false; 8017 8018 // C++ [over.over]p2: 8019 // If the name is a function template, template argument deduction is 8020 // done (14.8.2.2), and if the argument deduction succeeds, the 8021 // resulting template argument list is used to generate a single 8022 // function template specialization, which is added to the set of 8023 // overloaded functions considered. 8024 FunctionDecl *Specialization = 0; 8025 TemplateDeductionInfo Info(Context, OvlExpr->getNameLoc()); 8026 if (Sema::TemplateDeductionResult Result 8027 = S.DeduceTemplateArguments(FunctionTemplate, 8028 &OvlExplicitTemplateArgs, 8029 TargetFunctionType, Specialization, 8030 Info)) { 8031 // FIXME: make a note of the failed deduction for diagnostics. 8032 (void)Result; 8033 return false; 8034 } 8035 8036 // Template argument deduction ensures that we have an exact match. 8037 // This function template specicalization works. 8038 Specialization = cast<FunctionDecl>(Specialization->getCanonicalDecl()); 8039 assert(TargetFunctionType 8040 == Context.getCanonicalType(Specialization->getType())); 8041 Matches.push_back(std::make_pair(CurAccessFunPair, Specialization)); 8042 return true; 8043 } 8044 8045 bool AddMatchingNonTemplateFunction(NamedDecl* Fn, 8046 const DeclAccessPair& CurAccessFunPair) { 8047 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) { 8048 // Skip non-static functions when converting to pointer, and static 8049 // when converting to member pointer. 8050 if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction) 8051 return false; 8052 } 8053 else if (TargetTypeIsNonStaticMemberFunction) 8054 return false; 8055 8056 if (FunctionDecl *FunDecl = dyn_cast<FunctionDecl>(Fn)) { 8057 if (S.getLangOptions().CUDA) 8058 if (FunctionDecl *Caller = dyn_cast<FunctionDecl>(S.CurContext)) 8059 if (S.CheckCUDATarget(Caller, FunDecl)) 8060 return false; 8061 8062 QualType ResultTy; 8063 if (Context.hasSameUnqualifiedType(TargetFunctionType, 8064 FunDecl->getType()) || 8065 S.IsNoReturnConversion(FunDecl->getType(), TargetFunctionType, 8066 ResultTy)) { 8067 Matches.push_back(std::make_pair(CurAccessFunPair, 8068 cast<FunctionDecl>(FunDecl->getCanonicalDecl()))); 8069 FoundNonTemplateFunction = true; 8070 return true; 8071 } 8072 } 8073 8074 return false; 8075 } 8076 8077 bool FindAllFunctionsThatMatchTargetTypeExactly() { 8078 bool Ret = false; 8079 8080 // If the overload expression doesn't have the form of a pointer to 8081 // member, don't try to convert it to a pointer-to-member type. 8082 if (IsInvalidFormOfPointerToMemberFunction()) 8083 return false; 8084 8085 for (UnresolvedSetIterator I = OvlExpr->decls_begin(), 8086 E = OvlExpr->decls_end(); 8087 I != E; ++I) { 8088 // Look through any using declarations to find the underlying function. 8089 NamedDecl *Fn = (*I)->getUnderlyingDecl(); 8090 8091 // C++ [over.over]p3: 8092 // Non-member functions and static member functions match 8093 // targets of type "pointer-to-function" or "reference-to-function." 8094 // Nonstatic member functions match targets of 8095 // type "pointer-to-member-function." 8096 // Note that according to DR 247, the containing class does not matter. 8097 if (FunctionTemplateDecl *FunctionTemplate 8098 = dyn_cast<FunctionTemplateDecl>(Fn)) { 8099 if (AddMatchingTemplateFunction(FunctionTemplate, I.getPair())) 8100 Ret = true; 8101 } 8102 // If we have explicit template arguments supplied, skip non-templates. 8103 else if (!OvlExpr->hasExplicitTemplateArgs() && 8104 AddMatchingNonTemplateFunction(Fn, I.getPair())) 8105 Ret = true; 8106 } 8107 assert(Ret || Matches.empty()); 8108 return Ret; 8109 } 8110 8111 void EliminateAllExceptMostSpecializedTemplate() { 8112 // [...] and any given function template specialization F1 is 8113 // eliminated if the set contains a second function template 8114 // specialization whose function template is more specialized 8115 // than the function template of F1 according to the partial 8116 // ordering rules of 14.5.5.2. 8117 8118 // The algorithm specified above is quadratic. We instead use a 8119 // two-pass algorithm (similar to the one used to identify the 8120 // best viable function in an overload set) that identifies the 8121 // best function template (if it exists). 8122 8123 UnresolvedSet<4> MatchesCopy; // TODO: avoid! 8124 for (unsigned I = 0, E = Matches.size(); I != E; ++I) 8125 MatchesCopy.addDecl(Matches[I].second, Matches[I].first.getAccess()); 8126 8127 UnresolvedSetIterator Result = 8128 S.getMostSpecialized(MatchesCopy.begin(), MatchesCopy.end(), 8129 TPOC_Other, 0, SourceExpr->getLocStart(), 8130 S.PDiag(), 8131 S.PDiag(diag::err_addr_ovl_ambiguous) 8132 << Matches[0].second->getDeclName(), 8133 S.PDiag(diag::note_ovl_candidate) 8134 << (unsigned) oc_function_template, 8135 Complain); 8136 8137 if (Result != MatchesCopy.end()) { 8138 // Make it the first and only element 8139 Matches[0].first = Matches[Result - MatchesCopy.begin()].first; 8140 Matches[0].second = cast<FunctionDecl>(*Result); 8141 Matches.resize(1); 8142 } 8143 } 8144 8145 void EliminateAllTemplateMatches() { 8146 // [...] any function template specializations in the set are 8147 // eliminated if the set also contains a non-template function, [...] 8148 for (unsigned I = 0, N = Matches.size(); I != N; ) { 8149 if (Matches[I].second->getPrimaryTemplate() == 0) 8150 ++I; 8151 else { 8152 Matches[I] = Matches[--N]; 8153 Matches.set_size(N); 8154 } 8155 } 8156 } 8157 8158public: 8159 void ComplainNoMatchesFound() const { 8160 assert(Matches.empty()); 8161 S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_no_viable) 8162 << OvlExpr->getName() << TargetFunctionType 8163 << OvlExpr->getSourceRange(); 8164 S.NoteAllOverloadCandidates(OvlExpr); 8165 } 8166 8167 bool IsInvalidFormOfPointerToMemberFunction() const { 8168 return TargetTypeIsNonStaticMemberFunction && 8169 !OvlExprInfo.HasFormOfMemberPointer; 8170 } 8171 8172 void ComplainIsInvalidFormOfPointerToMemberFunction() const { 8173 // TODO: Should we condition this on whether any functions might 8174 // have matched, or is it more appropriate to do that in callers? 8175 // TODO: a fixit wouldn't hurt. 8176 S.Diag(OvlExpr->getNameLoc(), diag::err_addr_ovl_no_qualifier) 8177 << TargetType << OvlExpr->getSourceRange(); 8178 } 8179 8180 void ComplainOfInvalidConversion() const { 8181 S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_not_func_ptrref) 8182 << OvlExpr->getName() << TargetType; 8183 } 8184 8185 void ComplainMultipleMatchesFound() const { 8186 assert(Matches.size() > 1); 8187 S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_ambiguous) 8188 << OvlExpr->getName() 8189 << OvlExpr->getSourceRange(); 8190 S.NoteAllOverloadCandidates(OvlExpr); 8191 } 8192 8193 bool hadMultipleCandidates() const { return (OvlExpr->getNumDecls() > 1); } 8194 8195 int getNumMatches() const { return Matches.size(); } 8196 8197 FunctionDecl* getMatchingFunctionDecl() const { 8198 if (Matches.size() != 1) return 0; 8199 return Matches[0].second; 8200 } 8201 8202 const DeclAccessPair* getMatchingFunctionAccessPair() const { 8203 if (Matches.size() != 1) return 0; 8204 return &Matches[0].first; 8205 } 8206}; 8207 8208/// ResolveAddressOfOverloadedFunction - Try to resolve the address of 8209/// an overloaded function (C++ [over.over]), where @p From is an 8210/// expression with overloaded function type and @p ToType is the type 8211/// we're trying to resolve to. For example: 8212/// 8213/// @code 8214/// int f(double); 8215/// int f(int); 8216/// 8217/// int (*pfd)(double) = f; // selects f(double) 8218/// @endcode 8219/// 8220/// This routine returns the resulting FunctionDecl if it could be 8221/// resolved, and NULL otherwise. When @p Complain is true, this 8222/// routine will emit diagnostics if there is an error. 8223FunctionDecl * 8224Sema::ResolveAddressOfOverloadedFunction(Expr *AddressOfExpr, 8225 QualType TargetType, 8226 bool Complain, 8227 DeclAccessPair &FoundResult, 8228 bool *pHadMultipleCandidates) { 8229 assert(AddressOfExpr->getType() == Context.OverloadTy); 8230 8231 AddressOfFunctionResolver Resolver(*this, AddressOfExpr, TargetType, 8232 Complain); 8233 int NumMatches = Resolver.getNumMatches(); 8234 FunctionDecl* Fn = 0; 8235 if (NumMatches == 0 && Complain) { 8236 if (Resolver.IsInvalidFormOfPointerToMemberFunction()) 8237 Resolver.ComplainIsInvalidFormOfPointerToMemberFunction(); 8238 else 8239 Resolver.ComplainNoMatchesFound(); 8240 } 8241 else if (NumMatches > 1 && Complain) 8242 Resolver.ComplainMultipleMatchesFound(); 8243 else if (NumMatches == 1) { 8244 Fn = Resolver.getMatchingFunctionDecl(); 8245 assert(Fn); 8246 FoundResult = *Resolver.getMatchingFunctionAccessPair(); 8247 MarkDeclarationReferenced(AddressOfExpr->getLocStart(), Fn); 8248 if (Complain) 8249 CheckAddressOfMemberAccess(AddressOfExpr, FoundResult); 8250 } 8251 8252 if (pHadMultipleCandidates) 8253 *pHadMultipleCandidates = Resolver.hadMultipleCandidates(); 8254 return Fn; 8255} 8256 8257/// \brief Given an expression that refers to an overloaded function, try to 8258/// resolve that overloaded function expression down to a single function. 8259/// 8260/// This routine can only resolve template-ids that refer to a single function 8261/// template, where that template-id refers to a single template whose template 8262/// arguments are either provided by the template-id or have defaults, 8263/// as described in C++0x [temp.arg.explicit]p3. 8264FunctionDecl * 8265Sema::ResolveSingleFunctionTemplateSpecialization(OverloadExpr *ovl, 8266 bool Complain, 8267 DeclAccessPair *FoundResult) { 8268 // C++ [over.over]p1: 8269 // [...] [Note: any redundant set of parentheses surrounding the 8270 // overloaded function name is ignored (5.1). ] 8271 // C++ [over.over]p1: 8272 // [...] The overloaded function name can be preceded by the & 8273 // operator. 8274 8275 // If we didn't actually find any template-ids, we're done. 8276 if (!ovl->hasExplicitTemplateArgs()) 8277 return 0; 8278 8279 TemplateArgumentListInfo ExplicitTemplateArgs; 8280 ovl->getExplicitTemplateArgs().copyInto(ExplicitTemplateArgs); 8281 8282 // Look through all of the overloaded functions, searching for one 8283 // whose type matches exactly. 8284 FunctionDecl *Matched = 0; 8285 for (UnresolvedSetIterator I = ovl->decls_begin(), 8286 E = ovl->decls_end(); I != E; ++I) { 8287 // C++0x [temp.arg.explicit]p3: 8288 // [...] In contexts where deduction is done and fails, or in contexts 8289 // where deduction is not done, if a template argument list is 8290 // specified and it, along with any default template arguments, 8291 // identifies a single function template specialization, then the 8292 // template-id is an lvalue for the function template specialization. 8293 FunctionTemplateDecl *FunctionTemplate 8294 = cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl()); 8295 8296 // C++ [over.over]p2: 8297 // If the name is a function template, template argument deduction is 8298 // done (14.8.2.2), and if the argument deduction succeeds, the 8299 // resulting template argument list is used to generate a single 8300 // function template specialization, which is added to the set of 8301 // overloaded functions considered. 8302 FunctionDecl *Specialization = 0; 8303 TemplateDeductionInfo Info(Context, ovl->getNameLoc()); 8304 if (TemplateDeductionResult Result 8305 = DeduceTemplateArguments(FunctionTemplate, &ExplicitTemplateArgs, 8306 Specialization, Info)) { 8307 // FIXME: make a note of the failed deduction for diagnostics. 8308 (void)Result; 8309 continue; 8310 } 8311 8312 assert(Specialization && "no specialization and no error?"); 8313 8314 // Multiple matches; we can't resolve to a single declaration. 8315 if (Matched) { 8316 if (Complain) { 8317 Diag(ovl->getExprLoc(), diag::err_addr_ovl_ambiguous) 8318 << ovl->getName(); 8319 NoteAllOverloadCandidates(ovl); 8320 } 8321 return 0; 8322 } 8323 8324 Matched = Specialization; 8325 if (FoundResult) *FoundResult = I.getPair(); 8326 } 8327 8328 return Matched; 8329} 8330 8331 8332 8333 8334// Resolve and fix an overloaded expression that can be resolved 8335// because it identifies a single function template specialization. 8336// 8337// Last three arguments should only be supplied if Complain = true 8338// 8339// Return true if it was logically possible to so resolve the 8340// expression, regardless of whether or not it succeeded. Always 8341// returns true if 'complain' is set. 8342bool Sema::ResolveAndFixSingleFunctionTemplateSpecialization( 8343 ExprResult &SrcExpr, bool doFunctionPointerConverion, 8344 bool complain, const SourceRange& OpRangeForComplaining, 8345 QualType DestTypeForComplaining, 8346 unsigned DiagIDForComplaining) { 8347 assert(SrcExpr.get()->getType() == Context.OverloadTy); 8348 8349 OverloadExpr::FindResult ovl = OverloadExpr::find(SrcExpr.get()); 8350 8351 DeclAccessPair found; 8352 ExprResult SingleFunctionExpression; 8353 if (FunctionDecl *fn = ResolveSingleFunctionTemplateSpecialization( 8354 ovl.Expression, /*complain*/ false, &found)) { 8355 if (DiagnoseUseOfDecl(fn, SrcExpr.get()->getSourceRange().getBegin())) { 8356 SrcExpr = ExprError(); 8357 return true; 8358 } 8359 8360 // It is only correct to resolve to an instance method if we're 8361 // resolving a form that's permitted to be a pointer to member. 8362 // Otherwise we'll end up making a bound member expression, which 8363 // is illegal in all the contexts we resolve like this. 8364 if (!ovl.HasFormOfMemberPointer && 8365 isa<CXXMethodDecl>(fn) && 8366 cast<CXXMethodDecl>(fn)->isInstance()) { 8367 if (!complain) return false; 8368 8369 Diag(ovl.Expression->getExprLoc(), 8370 diag::err_bound_member_function) 8371 << 0 << ovl.Expression->getSourceRange(); 8372 8373 // TODO: I believe we only end up here if there's a mix of 8374 // static and non-static candidates (otherwise the expression 8375 // would have 'bound member' type, not 'overload' type). 8376 // Ideally we would note which candidate was chosen and why 8377 // the static candidates were rejected. 8378 SrcExpr = ExprError(); 8379 return true; 8380 } 8381 8382 // Fix the expresion to refer to 'fn'. 8383 SingleFunctionExpression = 8384 Owned(FixOverloadedFunctionReference(SrcExpr.take(), found, fn)); 8385 8386 // If desired, do function-to-pointer decay. 8387 if (doFunctionPointerConverion) { 8388 SingleFunctionExpression = 8389 DefaultFunctionArrayLvalueConversion(SingleFunctionExpression.take()); 8390 if (SingleFunctionExpression.isInvalid()) { 8391 SrcExpr = ExprError(); 8392 return true; 8393 } 8394 } 8395 } 8396 8397 if (!SingleFunctionExpression.isUsable()) { 8398 if (complain) { 8399 Diag(OpRangeForComplaining.getBegin(), DiagIDForComplaining) 8400 << ovl.Expression->getName() 8401 << DestTypeForComplaining 8402 << OpRangeForComplaining 8403 << ovl.Expression->getQualifierLoc().getSourceRange(); 8404 NoteAllOverloadCandidates(SrcExpr.get()); 8405 8406 SrcExpr = ExprError(); 8407 return true; 8408 } 8409 8410 return false; 8411 } 8412 8413 SrcExpr = SingleFunctionExpression; 8414 return true; 8415} 8416 8417/// \brief Add a single candidate to the overload set. 8418static void AddOverloadedCallCandidate(Sema &S, 8419 DeclAccessPair FoundDecl, 8420 TemplateArgumentListInfo *ExplicitTemplateArgs, 8421 Expr **Args, unsigned NumArgs, 8422 OverloadCandidateSet &CandidateSet, 8423 bool PartialOverloading, 8424 bool KnownValid) { 8425 NamedDecl *Callee = FoundDecl.getDecl(); 8426 if (isa<UsingShadowDecl>(Callee)) 8427 Callee = cast<UsingShadowDecl>(Callee)->getTargetDecl(); 8428 8429 if (FunctionDecl *Func = dyn_cast<FunctionDecl>(Callee)) { 8430 if (ExplicitTemplateArgs) { 8431 assert(!KnownValid && "Explicit template arguments?"); 8432 return; 8433 } 8434 S.AddOverloadCandidate(Func, FoundDecl, Args, NumArgs, CandidateSet, 8435 false, PartialOverloading); 8436 return; 8437 } 8438 8439 if (FunctionTemplateDecl *FuncTemplate 8440 = dyn_cast<FunctionTemplateDecl>(Callee)) { 8441 S.AddTemplateOverloadCandidate(FuncTemplate, FoundDecl, 8442 ExplicitTemplateArgs, 8443 Args, NumArgs, CandidateSet); 8444 return; 8445 } 8446 8447 assert(!KnownValid && "unhandled case in overloaded call candidate"); 8448} 8449 8450/// \brief Add the overload candidates named by callee and/or found by argument 8451/// dependent lookup to the given overload set. 8452void Sema::AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE, 8453 Expr **Args, unsigned NumArgs, 8454 OverloadCandidateSet &CandidateSet, 8455 bool PartialOverloading) { 8456 8457#ifndef NDEBUG 8458 // Verify that ArgumentDependentLookup is consistent with the rules 8459 // in C++0x [basic.lookup.argdep]p3: 8460 // 8461 // Let X be the lookup set produced by unqualified lookup (3.4.1) 8462 // and let Y be the lookup set produced by argument dependent 8463 // lookup (defined as follows). If X contains 8464 // 8465 // -- a declaration of a class member, or 8466 // 8467 // -- a block-scope function declaration that is not a 8468 // using-declaration, or 8469 // 8470 // -- a declaration that is neither a function or a function 8471 // template 8472 // 8473 // then Y is empty. 8474 8475 if (ULE->requiresADL()) { 8476 for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(), 8477 E = ULE->decls_end(); I != E; ++I) { 8478 assert(!(*I)->getDeclContext()->isRecord()); 8479 assert(isa<UsingShadowDecl>(*I) || 8480 !(*I)->getDeclContext()->isFunctionOrMethod()); 8481 assert((*I)->getUnderlyingDecl()->isFunctionOrFunctionTemplate()); 8482 } 8483 } 8484#endif 8485 8486 // It would be nice to avoid this copy. 8487 TemplateArgumentListInfo TABuffer; 8488 TemplateArgumentListInfo *ExplicitTemplateArgs = 0; 8489 if (ULE->hasExplicitTemplateArgs()) { 8490 ULE->copyTemplateArgumentsInto(TABuffer); 8491 ExplicitTemplateArgs = &TABuffer; 8492 } 8493 8494 for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(), 8495 E = ULE->decls_end(); I != E; ++I) 8496 AddOverloadedCallCandidate(*this, I.getPair(), ExplicitTemplateArgs, 8497 Args, NumArgs, CandidateSet, 8498 PartialOverloading, /*KnownValid*/ true); 8499 8500 if (ULE->requiresADL()) 8501 AddArgumentDependentLookupCandidates(ULE->getName(), /*Operator*/ false, 8502 Args, NumArgs, 8503 ExplicitTemplateArgs, 8504 CandidateSet, 8505 PartialOverloading, 8506 ULE->isStdAssociatedNamespace()); 8507} 8508 8509/// Attempt to recover from an ill-formed use of a non-dependent name in a 8510/// template, where the non-dependent name was declared after the template 8511/// was defined. This is common in code written for a compilers which do not 8512/// correctly implement two-stage name lookup. 8513/// 8514/// Returns true if a viable candidate was found and a diagnostic was issued. 8515static bool 8516DiagnoseTwoPhaseLookup(Sema &SemaRef, SourceLocation FnLoc, 8517 const CXXScopeSpec &SS, LookupResult &R, 8518 TemplateArgumentListInfo *ExplicitTemplateArgs, 8519 Expr **Args, unsigned NumArgs) { 8520 if (SemaRef.ActiveTemplateInstantiations.empty() || !SS.isEmpty()) 8521 return false; 8522 8523 for (DeclContext *DC = SemaRef.CurContext; DC; DC = DC->getParent()) { 8524 SemaRef.LookupQualifiedName(R, DC); 8525 8526 if (!R.empty()) { 8527 R.suppressDiagnostics(); 8528 8529 if (isa<CXXRecordDecl>(DC)) { 8530 // Don't diagnose names we find in classes; we get much better 8531 // diagnostics for these from DiagnoseEmptyLookup. 8532 R.clear(); 8533 return false; 8534 } 8535 8536 OverloadCandidateSet Candidates(FnLoc); 8537 for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I) 8538 AddOverloadedCallCandidate(SemaRef, I.getPair(), 8539 ExplicitTemplateArgs, Args, NumArgs, 8540 Candidates, false, /*KnownValid*/ false); 8541 8542 OverloadCandidateSet::iterator Best; 8543 if (Candidates.BestViableFunction(SemaRef, FnLoc, Best) != OR_Success) { 8544 // No viable functions. Don't bother the user with notes for functions 8545 // which don't work and shouldn't be found anyway. 8546 R.clear(); 8547 return false; 8548 } 8549 8550 // Find the namespaces where ADL would have looked, and suggest 8551 // declaring the function there instead. 8552 Sema::AssociatedNamespaceSet AssociatedNamespaces; 8553 Sema::AssociatedClassSet AssociatedClasses; 8554 SemaRef.FindAssociatedClassesAndNamespaces(Args, NumArgs, 8555 AssociatedNamespaces, 8556 AssociatedClasses); 8557 // Never suggest declaring a function within namespace 'std'. 8558 Sema::AssociatedNamespaceSet SuggestedNamespaces; 8559 if (DeclContext *Std = SemaRef.getStdNamespace()) { 8560 for (Sema::AssociatedNamespaceSet::iterator 8561 it = AssociatedNamespaces.begin(), 8562 end = AssociatedNamespaces.end(); it != end; ++it) { 8563 if (!Std->Encloses(*it)) 8564 SuggestedNamespaces.insert(*it); 8565 } 8566 } else { 8567 // Lacking the 'std::' namespace, use all of the associated namespaces. 8568 SuggestedNamespaces = AssociatedNamespaces; 8569 } 8570 8571 SemaRef.Diag(R.getNameLoc(), diag::err_not_found_by_two_phase_lookup) 8572 << R.getLookupName(); 8573 if (SuggestedNamespaces.empty()) { 8574 SemaRef.Diag(Best->Function->getLocation(), 8575 diag::note_not_found_by_two_phase_lookup) 8576 << R.getLookupName() << 0; 8577 } else if (SuggestedNamespaces.size() == 1) { 8578 SemaRef.Diag(Best->Function->getLocation(), 8579 diag::note_not_found_by_two_phase_lookup) 8580 << R.getLookupName() << 1 << *SuggestedNamespaces.begin(); 8581 } else { 8582 // FIXME: It would be useful to list the associated namespaces here, 8583 // but the diagnostics infrastructure doesn't provide a way to produce 8584 // a localized representation of a list of items. 8585 SemaRef.Diag(Best->Function->getLocation(), 8586 diag::note_not_found_by_two_phase_lookup) 8587 << R.getLookupName() << 2; 8588 } 8589 8590 // Try to recover by calling this function. 8591 return true; 8592 } 8593 8594 R.clear(); 8595 } 8596 8597 return false; 8598} 8599 8600/// Attempt to recover from ill-formed use of a non-dependent operator in a 8601/// template, where the non-dependent operator was declared after the template 8602/// was defined. 8603/// 8604/// Returns true if a viable candidate was found and a diagnostic was issued. 8605static bool 8606DiagnoseTwoPhaseOperatorLookup(Sema &SemaRef, OverloadedOperatorKind Op, 8607 SourceLocation OpLoc, 8608 Expr **Args, unsigned NumArgs) { 8609 DeclarationName OpName = 8610 SemaRef.Context.DeclarationNames.getCXXOperatorName(Op); 8611 LookupResult R(SemaRef, OpName, OpLoc, Sema::LookupOperatorName); 8612 return DiagnoseTwoPhaseLookup(SemaRef, OpLoc, CXXScopeSpec(), R, 8613 /*ExplicitTemplateArgs=*/0, Args, NumArgs); 8614} 8615 8616/// Attempts to recover from a call where no functions were found. 8617/// 8618/// Returns true if new candidates were found. 8619static ExprResult 8620BuildRecoveryCallExpr(Sema &SemaRef, Scope *S, Expr *Fn, 8621 UnresolvedLookupExpr *ULE, 8622 SourceLocation LParenLoc, 8623 Expr **Args, unsigned NumArgs, 8624 SourceLocation RParenLoc, 8625 bool EmptyLookup) { 8626 8627 CXXScopeSpec SS; 8628 SS.Adopt(ULE->getQualifierLoc()); 8629 8630 TemplateArgumentListInfo TABuffer; 8631 TemplateArgumentListInfo *ExplicitTemplateArgs = 0; 8632 if (ULE->hasExplicitTemplateArgs()) { 8633 ULE->copyTemplateArgumentsInto(TABuffer); 8634 ExplicitTemplateArgs = &TABuffer; 8635 } 8636 8637 LookupResult R(SemaRef, ULE->getName(), ULE->getNameLoc(), 8638 Sema::LookupOrdinaryName); 8639 if (!DiagnoseTwoPhaseLookup(SemaRef, Fn->getExprLoc(), SS, R, 8640 ExplicitTemplateArgs, Args, NumArgs) && 8641 (!EmptyLookup || 8642 SemaRef.DiagnoseEmptyLookup(S, SS, R, Sema::CTC_Expression, 8643 ExplicitTemplateArgs, Args, NumArgs))) 8644 return ExprError(); 8645 8646 assert(!R.empty() && "lookup results empty despite recovery"); 8647 8648 // Build an implicit member call if appropriate. Just drop the 8649 // casts and such from the call, we don't really care. 8650 ExprResult NewFn = ExprError(); 8651 if ((*R.begin())->isCXXClassMember()) 8652 NewFn = SemaRef.BuildPossibleImplicitMemberExpr(SS, R, 8653 ExplicitTemplateArgs); 8654 else if (ExplicitTemplateArgs) 8655 NewFn = SemaRef.BuildTemplateIdExpr(SS, R, false, *ExplicitTemplateArgs); 8656 else 8657 NewFn = SemaRef.BuildDeclarationNameExpr(SS, R, false); 8658 8659 if (NewFn.isInvalid()) 8660 return ExprError(); 8661 8662 // This shouldn't cause an infinite loop because we're giving it 8663 // an expression with viable lookup results, which should never 8664 // end up here. 8665 return SemaRef.ActOnCallExpr(/*Scope*/ 0, NewFn.take(), LParenLoc, 8666 MultiExprArg(Args, NumArgs), RParenLoc); 8667} 8668 8669/// ResolveOverloadedCallFn - Given the call expression that calls Fn 8670/// (which eventually refers to the declaration Func) and the call 8671/// arguments Args/NumArgs, attempt to resolve the function call down 8672/// to a specific function. If overload resolution succeeds, returns 8673/// the function declaration produced by overload 8674/// resolution. Otherwise, emits diagnostics, deletes all of the 8675/// arguments and Fn, and returns NULL. 8676ExprResult 8677Sema::BuildOverloadedCallExpr(Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE, 8678 SourceLocation LParenLoc, 8679 Expr **Args, unsigned NumArgs, 8680 SourceLocation RParenLoc, 8681 Expr *ExecConfig) { 8682#ifndef NDEBUG 8683 if (ULE->requiresADL()) { 8684 // To do ADL, we must have found an unqualified name. 8685 assert(!ULE->getQualifier() && "qualified name with ADL"); 8686 8687 // We don't perform ADL for implicit declarations of builtins. 8688 // Verify that this was correctly set up. 8689 FunctionDecl *F; 8690 if (ULE->decls_begin() + 1 == ULE->decls_end() && 8691 (F = dyn_cast<FunctionDecl>(*ULE->decls_begin())) && 8692 F->getBuiltinID() && F->isImplicit()) 8693 llvm_unreachable("performing ADL for builtin"); 8694 8695 // We don't perform ADL in C. 8696 assert(getLangOptions().CPlusPlus && "ADL enabled in C"); 8697 } else 8698 assert(!ULE->isStdAssociatedNamespace() && 8699 "std is associated namespace but not doing ADL"); 8700#endif 8701 8702 UnbridgedCastsSet UnbridgedCasts; 8703 if (checkArgPlaceholdersForOverload(*this, Args, NumArgs, UnbridgedCasts)) 8704 return ExprError(); 8705 8706 OverloadCandidateSet CandidateSet(Fn->getExprLoc()); 8707 8708 // Add the functions denoted by the callee to the set of candidate 8709 // functions, including those from argument-dependent lookup. 8710 AddOverloadedCallCandidates(ULE, Args, NumArgs, CandidateSet); 8711 8712 // If we found nothing, try to recover. 8713 // BuildRecoveryCallExpr diagnoses the error itself, so we just bail 8714 // out if it fails. 8715 if (CandidateSet.empty()) { 8716 // In Microsoft mode, if we are inside a template class member function then 8717 // create a type dependent CallExpr. The goal is to postpone name lookup 8718 // to instantiation time to be able to search into type dependent base 8719 // classes. 8720 if (getLangOptions().MicrosoftMode && CurContext->isDependentContext() && 8721 (isa<CXXMethodDecl>(CurContext) || isa<CXXRecordDecl>(CurContext))) { 8722 CallExpr *CE = new (Context) CallExpr(Context, Fn, Args, NumArgs, 8723 Context.DependentTy, VK_RValue, 8724 RParenLoc); 8725 CE->setTypeDependent(true); 8726 return Owned(CE); 8727 } 8728 return BuildRecoveryCallExpr(*this, S, Fn, ULE, LParenLoc, Args, NumArgs, 8729 RParenLoc, /*EmptyLookup=*/true); 8730 } 8731 8732 UnbridgedCasts.restore(); 8733 8734 OverloadCandidateSet::iterator Best; 8735 switch (CandidateSet.BestViableFunction(*this, Fn->getLocStart(), Best)) { 8736 case OR_Success: { 8737 FunctionDecl *FDecl = Best->Function; 8738 MarkDeclarationReferenced(Fn->getExprLoc(), FDecl); 8739 CheckUnresolvedLookupAccess(ULE, Best->FoundDecl); 8740 DiagnoseUseOfDecl(FDecl, ULE->getNameLoc()); 8741 Fn = FixOverloadedFunctionReference(Fn, Best->FoundDecl, FDecl); 8742 return BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, NumArgs, RParenLoc, 8743 ExecConfig); 8744 } 8745 8746 case OR_No_Viable_Function: { 8747 // Try to recover by looking for viable functions which the user might 8748 // have meant to call. 8749 ExprResult Recovery = BuildRecoveryCallExpr(*this, S, Fn, ULE, LParenLoc, 8750 Args, NumArgs, RParenLoc, 8751 /*EmptyLookup=*/false); 8752 if (!Recovery.isInvalid()) 8753 return Recovery; 8754 8755 Diag(Fn->getSourceRange().getBegin(), 8756 diag::err_ovl_no_viable_function_in_call) 8757 << ULE->getName() << Fn->getSourceRange(); 8758 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, NumArgs); 8759 break; 8760 } 8761 8762 case OR_Ambiguous: 8763 Diag(Fn->getSourceRange().getBegin(), diag::err_ovl_ambiguous_call) 8764 << ULE->getName() << Fn->getSourceRange(); 8765 CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args, NumArgs); 8766 break; 8767 8768 case OR_Deleted: 8769 { 8770 Diag(Fn->getSourceRange().getBegin(), diag::err_ovl_deleted_call) 8771 << Best->Function->isDeleted() 8772 << ULE->getName() 8773 << getDeletedOrUnavailableSuffix(Best->Function) 8774 << Fn->getSourceRange(); 8775 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, NumArgs); 8776 8777 // We emitted an error for the unvailable/deleted function call but keep 8778 // the call in the AST. 8779 FunctionDecl *FDecl = Best->Function; 8780 Fn = FixOverloadedFunctionReference(Fn, Best->FoundDecl, FDecl); 8781 return BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, NumArgs, 8782 RParenLoc, ExecConfig); 8783 } 8784 break; 8785 } 8786 8787 // Overload resolution failed. 8788 return ExprError(); 8789} 8790 8791static bool IsOverloaded(const UnresolvedSetImpl &Functions) { 8792 return Functions.size() > 1 || 8793 (Functions.size() == 1 && isa<FunctionTemplateDecl>(*Functions.begin())); 8794} 8795 8796/// \brief Create a unary operation that may resolve to an overloaded 8797/// operator. 8798/// 8799/// \param OpLoc The location of the operator itself (e.g., '*'). 8800/// 8801/// \param OpcIn The UnaryOperator::Opcode that describes this 8802/// operator. 8803/// 8804/// \param Functions The set of non-member functions that will be 8805/// considered by overload resolution. The caller needs to build this 8806/// set based on the context using, e.g., 8807/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This 8808/// set should not contain any member functions; those will be added 8809/// by CreateOverloadedUnaryOp(). 8810/// 8811/// \param input The input argument. 8812ExprResult 8813Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, unsigned OpcIn, 8814 const UnresolvedSetImpl &Fns, 8815 Expr *Input) { 8816 UnaryOperator::Opcode Opc = static_cast<UnaryOperator::Opcode>(OpcIn); 8817 8818 OverloadedOperatorKind Op = UnaryOperator::getOverloadedOperator(Opc); 8819 assert(Op != OO_None && "Invalid opcode for overloaded unary operator"); 8820 DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op); 8821 // TODO: provide better source location info. 8822 DeclarationNameInfo OpNameInfo(OpName, OpLoc); 8823 8824 if (checkPlaceholderForOverload(*this, Input)) 8825 return ExprError(); 8826 8827 Expr *Args[2] = { Input, 0 }; 8828 unsigned NumArgs = 1; 8829 8830 // For post-increment and post-decrement, add the implicit '0' as 8831 // the second argument, so that we know this is a post-increment or 8832 // post-decrement. 8833 if (Opc == UO_PostInc || Opc == UO_PostDec) { 8834 llvm::APSInt Zero(Context.getTypeSize(Context.IntTy), false); 8835 Args[1] = IntegerLiteral::Create(Context, Zero, Context.IntTy, 8836 SourceLocation()); 8837 NumArgs = 2; 8838 } 8839 8840 if (Input->isTypeDependent()) { 8841 if (Fns.empty()) 8842 return Owned(new (Context) UnaryOperator(Input, 8843 Opc, 8844 Context.DependentTy, 8845 VK_RValue, OK_Ordinary, 8846 OpLoc)); 8847 8848 CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators 8849 UnresolvedLookupExpr *Fn 8850 = UnresolvedLookupExpr::Create(Context, NamingClass, 8851 NestedNameSpecifierLoc(), OpNameInfo, 8852 /*ADL*/ true, IsOverloaded(Fns), 8853 Fns.begin(), Fns.end()); 8854 return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn, 8855 &Args[0], NumArgs, 8856 Context.DependentTy, 8857 VK_RValue, 8858 OpLoc)); 8859 } 8860 8861 // Build an empty overload set. 8862 OverloadCandidateSet CandidateSet(OpLoc); 8863 8864 // Add the candidates from the given function set. 8865 AddFunctionCandidates(Fns, &Args[0], NumArgs, CandidateSet, false); 8866 8867 // Add operator candidates that are member functions. 8868 AddMemberOperatorCandidates(Op, OpLoc, &Args[0], NumArgs, CandidateSet); 8869 8870 // Add candidates from ADL. 8871 AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true, 8872 Args, NumArgs, 8873 /*ExplicitTemplateArgs*/ 0, 8874 CandidateSet); 8875 8876 // Add builtin operator candidates. 8877 AddBuiltinOperatorCandidates(Op, OpLoc, &Args[0], NumArgs, CandidateSet); 8878 8879 bool HadMultipleCandidates = (CandidateSet.size() > 1); 8880 8881 // Perform overload resolution. 8882 OverloadCandidateSet::iterator Best; 8883 switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) { 8884 case OR_Success: { 8885 // We found a built-in operator or an overloaded operator. 8886 FunctionDecl *FnDecl = Best->Function; 8887 8888 if (FnDecl) { 8889 // We matched an overloaded operator. Build a call to that 8890 // operator. 8891 8892 MarkDeclarationReferenced(OpLoc, FnDecl); 8893 8894 // Convert the arguments. 8895 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) { 8896 CheckMemberOperatorAccess(OpLoc, Args[0], 0, Best->FoundDecl); 8897 8898 ExprResult InputRes = 8899 PerformObjectArgumentInitialization(Input, /*Qualifier=*/0, 8900 Best->FoundDecl, Method); 8901 if (InputRes.isInvalid()) 8902 return ExprError(); 8903 Input = InputRes.take(); 8904 } else { 8905 // Convert the arguments. 8906 ExprResult InputInit 8907 = PerformCopyInitialization(InitializedEntity::InitializeParameter( 8908 Context, 8909 FnDecl->getParamDecl(0)), 8910 SourceLocation(), 8911 Input); 8912 if (InputInit.isInvalid()) 8913 return ExprError(); 8914 Input = InputInit.take(); 8915 } 8916 8917 DiagnoseUseOfDecl(Best->FoundDecl, OpLoc); 8918 8919 // Determine the result type. 8920 QualType ResultTy = FnDecl->getResultType(); 8921 ExprValueKind VK = Expr::getValueKindForType(ResultTy); 8922 ResultTy = ResultTy.getNonLValueExprType(Context); 8923 8924 // Build the actual expression node. 8925 ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl, 8926 HadMultipleCandidates); 8927 if (FnExpr.isInvalid()) 8928 return ExprError(); 8929 8930 Args[0] = Input; 8931 CallExpr *TheCall = 8932 new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.take(), 8933 Args, NumArgs, ResultTy, VK, OpLoc); 8934 8935 if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall, 8936 FnDecl)) 8937 return ExprError(); 8938 8939 return MaybeBindToTemporary(TheCall); 8940 } else { 8941 // We matched a built-in operator. Convert the arguments, then 8942 // break out so that we will build the appropriate built-in 8943 // operator node. 8944 ExprResult InputRes = 8945 PerformImplicitConversion(Input, Best->BuiltinTypes.ParamTypes[0], 8946 Best->Conversions[0], AA_Passing); 8947 if (InputRes.isInvalid()) 8948 return ExprError(); 8949 Input = InputRes.take(); 8950 break; 8951 } 8952 } 8953 8954 case OR_No_Viable_Function: 8955 // This is an erroneous use of an operator which can be overloaded by 8956 // a non-member function. Check for non-member operators which were 8957 // defined too late to be candidates. 8958 if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc, Args, NumArgs)) 8959 // FIXME: Recover by calling the found function. 8960 return ExprError(); 8961 8962 // No viable function; fall through to handling this as a 8963 // built-in operator, which will produce an error message for us. 8964 break; 8965 8966 case OR_Ambiguous: 8967 Diag(OpLoc, diag::err_ovl_ambiguous_oper_unary) 8968 << UnaryOperator::getOpcodeStr(Opc) 8969 << Input->getType() 8970 << Input->getSourceRange(); 8971 CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args, NumArgs, 8972 UnaryOperator::getOpcodeStr(Opc), OpLoc); 8973 return ExprError(); 8974 8975 case OR_Deleted: 8976 Diag(OpLoc, diag::err_ovl_deleted_oper) 8977 << Best->Function->isDeleted() 8978 << UnaryOperator::getOpcodeStr(Opc) 8979 << getDeletedOrUnavailableSuffix(Best->Function) 8980 << Input->getSourceRange(); 8981 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, NumArgs, 8982 UnaryOperator::getOpcodeStr(Opc), OpLoc); 8983 return ExprError(); 8984 } 8985 8986 // Either we found no viable overloaded operator or we matched a 8987 // built-in operator. In either case, fall through to trying to 8988 // build a built-in operation. 8989 return CreateBuiltinUnaryOp(OpLoc, Opc, Input); 8990} 8991 8992/// \brief Create a binary operation that may resolve to an overloaded 8993/// operator. 8994/// 8995/// \param OpLoc The location of the operator itself (e.g., '+'). 8996/// 8997/// \param OpcIn The BinaryOperator::Opcode that describes this 8998/// operator. 8999/// 9000/// \param Functions The set of non-member functions that will be 9001/// considered by overload resolution. The caller needs to build this 9002/// set based on the context using, e.g., 9003/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This 9004/// set should not contain any member functions; those will be added 9005/// by CreateOverloadedBinOp(). 9006/// 9007/// \param LHS Left-hand argument. 9008/// \param RHS Right-hand argument. 9009ExprResult 9010Sema::CreateOverloadedBinOp(SourceLocation OpLoc, 9011 unsigned OpcIn, 9012 const UnresolvedSetImpl &Fns, 9013 Expr *LHS, Expr *RHS) { 9014 Expr *Args[2] = { LHS, RHS }; 9015 LHS=RHS=0; //Please use only Args instead of LHS/RHS couple 9016 9017 BinaryOperator::Opcode Opc = static_cast<BinaryOperator::Opcode>(OpcIn); 9018 OverloadedOperatorKind Op = BinaryOperator::getOverloadedOperator(Opc); 9019 DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op); 9020 9021 // If either side is type-dependent, create an appropriate dependent 9022 // expression. 9023 if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) { 9024 if (Fns.empty()) { 9025 // If there are no functions to store, just build a dependent 9026 // BinaryOperator or CompoundAssignment. 9027 if (Opc <= BO_Assign || Opc > BO_OrAssign) 9028 return Owned(new (Context) BinaryOperator(Args[0], Args[1], Opc, 9029 Context.DependentTy, 9030 VK_RValue, OK_Ordinary, 9031 OpLoc)); 9032 9033 return Owned(new (Context) CompoundAssignOperator(Args[0], Args[1], Opc, 9034 Context.DependentTy, 9035 VK_LValue, 9036 OK_Ordinary, 9037 Context.DependentTy, 9038 Context.DependentTy, 9039 OpLoc)); 9040 } 9041 9042 // FIXME: save results of ADL from here? 9043 CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators 9044 // TODO: provide better source location info in DNLoc component. 9045 DeclarationNameInfo OpNameInfo(OpName, OpLoc); 9046 UnresolvedLookupExpr *Fn 9047 = UnresolvedLookupExpr::Create(Context, NamingClass, 9048 NestedNameSpecifierLoc(), OpNameInfo, 9049 /*ADL*/ true, IsOverloaded(Fns), 9050 Fns.begin(), Fns.end()); 9051 return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn, 9052 Args, 2, 9053 Context.DependentTy, 9054 VK_RValue, 9055 OpLoc)); 9056 } 9057 9058 // Always do placeholder-like conversions on the RHS. 9059 if (checkPlaceholderForOverload(*this, Args[1])) 9060 return ExprError(); 9061 9062 // Do placeholder-like conversion on the LHS; note that we should 9063 // not get here with a PseudoObject LHS. 9064 assert(Args[0]->getObjectKind() != OK_ObjCProperty); 9065 if (checkPlaceholderForOverload(*this, Args[0])) 9066 return ExprError(); 9067 9068 // If this is the assignment operator, we only perform overload resolution 9069 // if the left-hand side is a class or enumeration type. This is actually 9070 // a hack. The standard requires that we do overload resolution between the 9071 // various built-in candidates, but as DR507 points out, this can lead to 9072 // problems. So we do it this way, which pretty much follows what GCC does. 9073 // Note that we go the traditional code path for compound assignment forms. 9074 if (Opc == BO_Assign && !Args[0]->getType()->isOverloadableType()) 9075 return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]); 9076 9077 // If this is the .* operator, which is not overloadable, just 9078 // create a built-in binary operator. 9079 if (Opc == BO_PtrMemD) 9080 return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]); 9081 9082 // Build an empty overload set. 9083 OverloadCandidateSet CandidateSet(OpLoc); 9084 9085 // Add the candidates from the given function set. 9086 AddFunctionCandidates(Fns, Args, 2, CandidateSet, false); 9087 9088 // Add operator candidates that are member functions. 9089 AddMemberOperatorCandidates(Op, OpLoc, Args, 2, CandidateSet); 9090 9091 // Add candidates from ADL. 9092 AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true, 9093 Args, 2, 9094 /*ExplicitTemplateArgs*/ 0, 9095 CandidateSet); 9096 9097 // Add builtin operator candidates. 9098 AddBuiltinOperatorCandidates(Op, OpLoc, Args, 2, CandidateSet); 9099 9100 bool HadMultipleCandidates = (CandidateSet.size() > 1); 9101 9102 // Perform overload resolution. 9103 OverloadCandidateSet::iterator Best; 9104 switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) { 9105 case OR_Success: { 9106 // We found a built-in operator or an overloaded operator. 9107 FunctionDecl *FnDecl = Best->Function; 9108 9109 if (FnDecl) { 9110 // We matched an overloaded operator. Build a call to that 9111 // operator. 9112 9113 MarkDeclarationReferenced(OpLoc, FnDecl); 9114 9115 // Convert the arguments. 9116 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) { 9117 // Best->Access is only meaningful for class members. 9118 CheckMemberOperatorAccess(OpLoc, Args[0], Args[1], Best->FoundDecl); 9119 9120 ExprResult Arg1 = 9121 PerformCopyInitialization( 9122 InitializedEntity::InitializeParameter(Context, 9123 FnDecl->getParamDecl(0)), 9124 SourceLocation(), Owned(Args[1])); 9125 if (Arg1.isInvalid()) 9126 return ExprError(); 9127 9128 ExprResult Arg0 = 9129 PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0, 9130 Best->FoundDecl, Method); 9131 if (Arg0.isInvalid()) 9132 return ExprError(); 9133 Args[0] = Arg0.takeAs<Expr>(); 9134 Args[1] = RHS = Arg1.takeAs<Expr>(); 9135 } else { 9136 // Convert the arguments. 9137 ExprResult Arg0 = PerformCopyInitialization( 9138 InitializedEntity::InitializeParameter(Context, 9139 FnDecl->getParamDecl(0)), 9140 SourceLocation(), Owned(Args[0])); 9141 if (Arg0.isInvalid()) 9142 return ExprError(); 9143 9144 ExprResult Arg1 = 9145 PerformCopyInitialization( 9146 InitializedEntity::InitializeParameter(Context, 9147 FnDecl->getParamDecl(1)), 9148 SourceLocation(), Owned(Args[1])); 9149 if (Arg1.isInvalid()) 9150 return ExprError(); 9151 Args[0] = LHS = Arg0.takeAs<Expr>(); 9152 Args[1] = RHS = Arg1.takeAs<Expr>(); 9153 } 9154 9155 DiagnoseUseOfDecl(Best->FoundDecl, OpLoc); 9156 9157 // Determine the result type. 9158 QualType ResultTy = FnDecl->getResultType(); 9159 ExprValueKind VK = Expr::getValueKindForType(ResultTy); 9160 ResultTy = ResultTy.getNonLValueExprType(Context); 9161 9162 // Build the actual expression node. 9163 ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl, 9164 HadMultipleCandidates, OpLoc); 9165 if (FnExpr.isInvalid()) 9166 return ExprError(); 9167 9168 CXXOperatorCallExpr *TheCall = 9169 new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.take(), 9170 Args, 2, ResultTy, VK, OpLoc); 9171 9172 if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall, 9173 FnDecl)) 9174 return ExprError(); 9175 9176 return MaybeBindToTemporary(TheCall); 9177 } else { 9178 // We matched a built-in operator. Convert the arguments, then 9179 // break out so that we will build the appropriate built-in 9180 // operator node. 9181 ExprResult ArgsRes0 = 9182 PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0], 9183 Best->Conversions[0], AA_Passing); 9184 if (ArgsRes0.isInvalid()) 9185 return ExprError(); 9186 Args[0] = ArgsRes0.take(); 9187 9188 ExprResult ArgsRes1 = 9189 PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1], 9190 Best->Conversions[1], AA_Passing); 9191 if (ArgsRes1.isInvalid()) 9192 return ExprError(); 9193 Args[1] = ArgsRes1.take(); 9194 break; 9195 } 9196 } 9197 9198 case OR_No_Viable_Function: { 9199 // C++ [over.match.oper]p9: 9200 // If the operator is the operator , [...] and there are no 9201 // viable functions, then the operator is assumed to be the 9202 // built-in operator and interpreted according to clause 5. 9203 if (Opc == BO_Comma) 9204 break; 9205 9206 // For class as left operand for assignment or compound assigment 9207 // operator do not fall through to handling in built-in, but report that 9208 // no overloaded assignment operator found 9209 ExprResult Result = ExprError(); 9210 if (Args[0]->getType()->isRecordType() && 9211 Opc >= BO_Assign && Opc <= BO_OrAssign) { 9212 Diag(OpLoc, diag::err_ovl_no_viable_oper) 9213 << BinaryOperator::getOpcodeStr(Opc) 9214 << Args[0]->getSourceRange() << Args[1]->getSourceRange(); 9215 } else { 9216 // This is an erroneous use of an operator which can be overloaded by 9217 // a non-member function. Check for non-member operators which were 9218 // defined too late to be candidates. 9219 if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc, Args, 2)) 9220 // FIXME: Recover by calling the found function. 9221 return ExprError(); 9222 9223 // No viable function; try to create a built-in operation, which will 9224 // produce an error. Then, show the non-viable candidates. 9225 Result = CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]); 9226 } 9227 assert(Result.isInvalid() && 9228 "C++ binary operator overloading is missing candidates!"); 9229 if (Result.isInvalid()) 9230 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, 2, 9231 BinaryOperator::getOpcodeStr(Opc), OpLoc); 9232 return move(Result); 9233 } 9234 9235 case OR_Ambiguous: 9236 Diag(OpLoc, diag::err_ovl_ambiguous_oper_binary) 9237 << BinaryOperator::getOpcodeStr(Opc) 9238 << Args[0]->getType() << Args[1]->getType() 9239 << Args[0]->getSourceRange() << Args[1]->getSourceRange(); 9240 CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args, 2, 9241 BinaryOperator::getOpcodeStr(Opc), OpLoc); 9242 return ExprError(); 9243 9244 case OR_Deleted: 9245 Diag(OpLoc, diag::err_ovl_deleted_oper) 9246 << Best->Function->isDeleted() 9247 << BinaryOperator::getOpcodeStr(Opc) 9248 << getDeletedOrUnavailableSuffix(Best->Function) 9249 << Args[0]->getSourceRange() << Args[1]->getSourceRange(); 9250 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, 2, 9251 BinaryOperator::getOpcodeStr(Opc), OpLoc); 9252 return ExprError(); 9253 } 9254 9255 // We matched a built-in operator; build it. 9256 return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]); 9257} 9258 9259ExprResult 9260Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc, 9261 SourceLocation RLoc, 9262 Expr *Base, Expr *Idx) { 9263 Expr *Args[2] = { Base, Idx }; 9264 DeclarationName OpName = 9265 Context.DeclarationNames.getCXXOperatorName(OO_Subscript); 9266 9267 // If either side is type-dependent, create an appropriate dependent 9268 // expression. 9269 if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) { 9270 9271 CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators 9272 // CHECKME: no 'operator' keyword? 9273 DeclarationNameInfo OpNameInfo(OpName, LLoc); 9274 OpNameInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc)); 9275 UnresolvedLookupExpr *Fn 9276 = UnresolvedLookupExpr::Create(Context, NamingClass, 9277 NestedNameSpecifierLoc(), OpNameInfo, 9278 /*ADL*/ true, /*Overloaded*/ false, 9279 UnresolvedSetIterator(), 9280 UnresolvedSetIterator()); 9281 // Can't add any actual overloads yet 9282 9283 return Owned(new (Context) CXXOperatorCallExpr(Context, OO_Subscript, Fn, 9284 Args, 2, 9285 Context.DependentTy, 9286 VK_RValue, 9287 RLoc)); 9288 } 9289 9290 // Handle placeholders on both operands. 9291 if (checkPlaceholderForOverload(*this, Args[0])) 9292 return ExprError(); 9293 if (checkPlaceholderForOverload(*this, Args[1])) 9294 return ExprError(); 9295 9296 // Build an empty overload set. 9297 OverloadCandidateSet CandidateSet(LLoc); 9298 9299 // Subscript can only be overloaded as a member function. 9300 9301 // Add operator candidates that are member functions. 9302 AddMemberOperatorCandidates(OO_Subscript, LLoc, Args, 2, CandidateSet); 9303 9304 // Add builtin operator candidates. 9305 AddBuiltinOperatorCandidates(OO_Subscript, LLoc, Args, 2, CandidateSet); 9306 9307 bool HadMultipleCandidates = (CandidateSet.size() > 1); 9308 9309 // Perform overload resolution. 9310 OverloadCandidateSet::iterator Best; 9311 switch (CandidateSet.BestViableFunction(*this, LLoc, Best)) { 9312 case OR_Success: { 9313 // We found a built-in operator or an overloaded operator. 9314 FunctionDecl *FnDecl = Best->Function; 9315 9316 if (FnDecl) { 9317 // We matched an overloaded operator. Build a call to that 9318 // operator. 9319 9320 MarkDeclarationReferenced(LLoc, FnDecl); 9321 9322 CheckMemberOperatorAccess(LLoc, Args[0], Args[1], Best->FoundDecl); 9323 DiagnoseUseOfDecl(Best->FoundDecl, LLoc); 9324 9325 // Convert the arguments. 9326 CXXMethodDecl *Method = cast<CXXMethodDecl>(FnDecl); 9327 ExprResult Arg0 = 9328 PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0, 9329 Best->FoundDecl, Method); 9330 if (Arg0.isInvalid()) 9331 return ExprError(); 9332 Args[0] = Arg0.take(); 9333 9334 // Convert the arguments. 9335 ExprResult InputInit 9336 = PerformCopyInitialization(InitializedEntity::InitializeParameter( 9337 Context, 9338 FnDecl->getParamDecl(0)), 9339 SourceLocation(), 9340 Owned(Args[1])); 9341 if (InputInit.isInvalid()) 9342 return ExprError(); 9343 9344 Args[1] = InputInit.takeAs<Expr>(); 9345 9346 // Determine the result type 9347 QualType ResultTy = FnDecl->getResultType(); 9348 ExprValueKind VK = Expr::getValueKindForType(ResultTy); 9349 ResultTy = ResultTy.getNonLValueExprType(Context); 9350 9351 // Build the actual expression node. 9352 DeclarationNameLoc LocInfo; 9353 LocInfo.CXXOperatorName.BeginOpNameLoc = LLoc.getRawEncoding(); 9354 LocInfo.CXXOperatorName.EndOpNameLoc = RLoc.getRawEncoding(); 9355 ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl, 9356 HadMultipleCandidates, 9357 LLoc, LocInfo); 9358 if (FnExpr.isInvalid()) 9359 return ExprError(); 9360 9361 CXXOperatorCallExpr *TheCall = 9362 new (Context) CXXOperatorCallExpr(Context, OO_Subscript, 9363 FnExpr.take(), Args, 2, 9364 ResultTy, VK, RLoc); 9365 9366 if (CheckCallReturnType(FnDecl->getResultType(), LLoc, TheCall, 9367 FnDecl)) 9368 return ExprError(); 9369 9370 return MaybeBindToTemporary(TheCall); 9371 } else { 9372 // We matched a built-in operator. Convert the arguments, then 9373 // break out so that we will build the appropriate built-in 9374 // operator node. 9375 ExprResult ArgsRes0 = 9376 PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0], 9377 Best->Conversions[0], AA_Passing); 9378 if (ArgsRes0.isInvalid()) 9379 return ExprError(); 9380 Args[0] = ArgsRes0.take(); 9381 9382 ExprResult ArgsRes1 = 9383 PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1], 9384 Best->Conversions[1], AA_Passing); 9385 if (ArgsRes1.isInvalid()) 9386 return ExprError(); 9387 Args[1] = ArgsRes1.take(); 9388 9389 break; 9390 } 9391 } 9392 9393 case OR_No_Viable_Function: { 9394 if (CandidateSet.empty()) 9395 Diag(LLoc, diag::err_ovl_no_oper) 9396 << Args[0]->getType() << /*subscript*/ 0 9397 << Args[0]->getSourceRange() << Args[1]->getSourceRange(); 9398 else 9399 Diag(LLoc, diag::err_ovl_no_viable_subscript) 9400 << Args[0]->getType() 9401 << Args[0]->getSourceRange() << Args[1]->getSourceRange(); 9402 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, 2, 9403 "[]", LLoc); 9404 return ExprError(); 9405 } 9406 9407 case OR_Ambiguous: 9408 Diag(LLoc, diag::err_ovl_ambiguous_oper_binary) 9409 << "[]" 9410 << Args[0]->getType() << Args[1]->getType() 9411 << Args[0]->getSourceRange() << Args[1]->getSourceRange(); 9412 CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args, 2, 9413 "[]", LLoc); 9414 return ExprError(); 9415 9416 case OR_Deleted: 9417 Diag(LLoc, diag::err_ovl_deleted_oper) 9418 << Best->Function->isDeleted() << "[]" 9419 << getDeletedOrUnavailableSuffix(Best->Function) 9420 << Args[0]->getSourceRange() << Args[1]->getSourceRange(); 9421 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, 2, 9422 "[]", LLoc); 9423 return ExprError(); 9424 } 9425 9426 // We matched a built-in operator; build it. 9427 return CreateBuiltinArraySubscriptExpr(Args[0], LLoc, Args[1], RLoc); 9428} 9429 9430/// BuildCallToMemberFunction - Build a call to a member 9431/// function. MemExpr is the expression that refers to the member 9432/// function (and includes the object parameter), Args/NumArgs are the 9433/// arguments to the function call (not including the object 9434/// parameter). The caller needs to validate that the member 9435/// expression refers to a non-static member function or an overloaded 9436/// member function. 9437ExprResult 9438Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, 9439 SourceLocation LParenLoc, Expr **Args, 9440 unsigned NumArgs, SourceLocation RParenLoc) { 9441 assert(MemExprE->getType() == Context.BoundMemberTy || 9442 MemExprE->getType() == Context.OverloadTy); 9443 9444 // Dig out the member expression. This holds both the object 9445 // argument and the member function we're referring to. 9446 Expr *NakedMemExpr = MemExprE->IgnoreParens(); 9447 9448 // Determine whether this is a call to a pointer-to-member function. 9449 if (BinaryOperator *op = dyn_cast<BinaryOperator>(NakedMemExpr)) { 9450 assert(op->getType() == Context.BoundMemberTy); 9451 assert(op->getOpcode() == BO_PtrMemD || op->getOpcode() == BO_PtrMemI); 9452 9453 QualType fnType = 9454 op->getRHS()->getType()->castAs<MemberPointerType>()->getPointeeType(); 9455 9456 const FunctionProtoType *proto = fnType->castAs<FunctionProtoType>(); 9457 QualType resultType = proto->getCallResultType(Context); 9458 ExprValueKind valueKind = Expr::getValueKindForType(proto->getResultType()); 9459 9460 // Check that the object type isn't more qualified than the 9461 // member function we're calling. 9462 Qualifiers funcQuals = Qualifiers::fromCVRMask(proto->getTypeQuals()); 9463 9464 QualType objectType = op->getLHS()->getType(); 9465 if (op->getOpcode() == BO_PtrMemI) 9466 objectType = objectType->castAs<PointerType>()->getPointeeType(); 9467 Qualifiers objectQuals = objectType.getQualifiers(); 9468 9469 Qualifiers difference = objectQuals - funcQuals; 9470 difference.removeObjCGCAttr(); 9471 difference.removeAddressSpace(); 9472 if (difference) { 9473 std::string qualsString = difference.getAsString(); 9474 Diag(LParenLoc, diag::err_pointer_to_member_call_drops_quals) 9475 << fnType.getUnqualifiedType() 9476 << qualsString 9477 << (qualsString.find(' ') == std::string::npos ? 1 : 2); 9478 } 9479 9480 CXXMemberCallExpr *call 9481 = new (Context) CXXMemberCallExpr(Context, MemExprE, Args, NumArgs, 9482 resultType, valueKind, RParenLoc); 9483 9484 if (CheckCallReturnType(proto->getResultType(), 9485 op->getRHS()->getSourceRange().getBegin(), 9486 call, 0)) 9487 return ExprError(); 9488 9489 if (ConvertArgumentsForCall(call, op, 0, proto, Args, NumArgs, RParenLoc)) 9490 return ExprError(); 9491 9492 return MaybeBindToTemporary(call); 9493 } 9494 9495 UnbridgedCastsSet UnbridgedCasts; 9496 if (checkArgPlaceholdersForOverload(*this, Args, NumArgs, UnbridgedCasts)) 9497 return ExprError(); 9498 9499 MemberExpr *MemExpr; 9500 CXXMethodDecl *Method = 0; 9501 DeclAccessPair FoundDecl = DeclAccessPair::make(0, AS_public); 9502 NestedNameSpecifier *Qualifier = 0; 9503 if (isa<MemberExpr>(NakedMemExpr)) { 9504 MemExpr = cast<MemberExpr>(NakedMemExpr); 9505 Method = cast<CXXMethodDecl>(MemExpr->getMemberDecl()); 9506 FoundDecl = MemExpr->getFoundDecl(); 9507 Qualifier = MemExpr->getQualifier(); 9508 UnbridgedCasts.restore(); 9509 } else { 9510 UnresolvedMemberExpr *UnresExpr = cast<UnresolvedMemberExpr>(NakedMemExpr); 9511 Qualifier = UnresExpr->getQualifier(); 9512 9513 QualType ObjectType = UnresExpr->getBaseType(); 9514 Expr::Classification ObjectClassification 9515 = UnresExpr->isArrow()? Expr::Classification::makeSimpleLValue() 9516 : UnresExpr->getBase()->Classify(Context); 9517 9518 // Add overload candidates 9519 OverloadCandidateSet CandidateSet(UnresExpr->getMemberLoc()); 9520 9521 // FIXME: avoid copy. 9522 TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0; 9523 if (UnresExpr->hasExplicitTemplateArgs()) { 9524 UnresExpr->copyTemplateArgumentsInto(TemplateArgsBuffer); 9525 TemplateArgs = &TemplateArgsBuffer; 9526 } 9527 9528 for (UnresolvedMemberExpr::decls_iterator I = UnresExpr->decls_begin(), 9529 E = UnresExpr->decls_end(); I != E; ++I) { 9530 9531 NamedDecl *Func = *I; 9532 CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(Func->getDeclContext()); 9533 if (isa<UsingShadowDecl>(Func)) 9534 Func = cast<UsingShadowDecl>(Func)->getTargetDecl(); 9535 9536 9537 // Microsoft supports direct constructor calls. 9538 if (getLangOptions().MicrosoftExt && isa<CXXConstructorDecl>(Func)) { 9539 AddOverloadCandidate(cast<CXXConstructorDecl>(Func), I.getPair(), Args, NumArgs, 9540 CandidateSet); 9541 } else if ((Method = dyn_cast<CXXMethodDecl>(Func))) { 9542 // If explicit template arguments were provided, we can't call a 9543 // non-template member function. 9544 if (TemplateArgs) 9545 continue; 9546 9547 AddMethodCandidate(Method, I.getPair(), ActingDC, ObjectType, 9548 ObjectClassification, 9549 Args, NumArgs, CandidateSet, 9550 /*SuppressUserConversions=*/false); 9551 } else { 9552 AddMethodTemplateCandidate(cast<FunctionTemplateDecl>(Func), 9553 I.getPair(), ActingDC, TemplateArgs, 9554 ObjectType, ObjectClassification, 9555 Args, NumArgs, CandidateSet, 9556 /*SuppressUsedConversions=*/false); 9557 } 9558 } 9559 9560 DeclarationName DeclName = UnresExpr->getMemberName(); 9561 9562 UnbridgedCasts.restore(); 9563 9564 OverloadCandidateSet::iterator Best; 9565 switch (CandidateSet.BestViableFunction(*this, UnresExpr->getLocStart(), 9566 Best)) { 9567 case OR_Success: 9568 Method = cast<CXXMethodDecl>(Best->Function); 9569 MarkDeclarationReferenced(UnresExpr->getMemberLoc(), Method); 9570 FoundDecl = Best->FoundDecl; 9571 CheckUnresolvedMemberAccess(UnresExpr, Best->FoundDecl); 9572 DiagnoseUseOfDecl(Best->FoundDecl, UnresExpr->getNameLoc()); 9573 break; 9574 9575 case OR_No_Viable_Function: 9576 Diag(UnresExpr->getMemberLoc(), 9577 diag::err_ovl_no_viable_member_function_in_call) 9578 << DeclName << MemExprE->getSourceRange(); 9579 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, NumArgs); 9580 // FIXME: Leaking incoming expressions! 9581 return ExprError(); 9582 9583 case OR_Ambiguous: 9584 Diag(UnresExpr->getMemberLoc(), diag::err_ovl_ambiguous_member_call) 9585 << DeclName << MemExprE->getSourceRange(); 9586 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, NumArgs); 9587 // FIXME: Leaking incoming expressions! 9588 return ExprError(); 9589 9590 case OR_Deleted: 9591 Diag(UnresExpr->getMemberLoc(), diag::err_ovl_deleted_member_call) 9592 << Best->Function->isDeleted() 9593 << DeclName 9594 << getDeletedOrUnavailableSuffix(Best->Function) 9595 << MemExprE->getSourceRange(); 9596 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, NumArgs); 9597 // FIXME: Leaking incoming expressions! 9598 return ExprError(); 9599 } 9600 9601 MemExprE = FixOverloadedFunctionReference(MemExprE, FoundDecl, Method); 9602 9603 // If overload resolution picked a static member, build a 9604 // non-member call based on that function. 9605 if (Method->isStatic()) { 9606 return BuildResolvedCallExpr(MemExprE, Method, LParenLoc, 9607 Args, NumArgs, RParenLoc); 9608 } 9609 9610 MemExpr = cast<MemberExpr>(MemExprE->IgnoreParens()); 9611 } 9612 9613 QualType ResultType = Method->getResultType(); 9614 ExprValueKind VK = Expr::getValueKindForType(ResultType); 9615 ResultType = ResultType.getNonLValueExprType(Context); 9616 9617 assert(Method && "Member call to something that isn't a method?"); 9618 CXXMemberCallExpr *TheCall = 9619 new (Context) CXXMemberCallExpr(Context, MemExprE, Args, NumArgs, 9620 ResultType, VK, RParenLoc); 9621 9622 // Check for a valid return type. 9623 if (CheckCallReturnType(Method->getResultType(), MemExpr->getMemberLoc(), 9624 TheCall, Method)) 9625 return ExprError(); 9626 9627 // Convert the object argument (for a non-static member function call). 9628 // We only need to do this if there was actually an overload; otherwise 9629 // it was done at lookup. 9630 if (!Method->isStatic()) { 9631 ExprResult ObjectArg = 9632 PerformObjectArgumentInitialization(MemExpr->getBase(), Qualifier, 9633 FoundDecl, Method); 9634 if (ObjectArg.isInvalid()) 9635 return ExprError(); 9636 MemExpr->setBase(ObjectArg.take()); 9637 } 9638 9639 // Convert the rest of the arguments 9640 const FunctionProtoType *Proto = 9641 Method->getType()->getAs<FunctionProtoType>(); 9642 if (ConvertArgumentsForCall(TheCall, MemExpr, Method, Proto, Args, NumArgs, 9643 RParenLoc)) 9644 return ExprError(); 9645 9646 if (CheckFunctionCall(Method, TheCall)) 9647 return ExprError(); 9648 9649 if ((isa<CXXConstructorDecl>(CurContext) || 9650 isa<CXXDestructorDecl>(CurContext)) && 9651 TheCall->getMethodDecl()->isPure()) { 9652 const CXXMethodDecl *MD = TheCall->getMethodDecl(); 9653 9654 if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts())) { 9655 Diag(MemExpr->getLocStart(), 9656 diag::warn_call_to_pure_virtual_member_function_from_ctor_dtor) 9657 << MD->getDeclName() << isa<CXXDestructorDecl>(CurContext) 9658 << MD->getParent()->getDeclName(); 9659 9660 Diag(MD->getLocStart(), diag::note_previous_decl) << MD->getDeclName(); 9661 } 9662 } 9663 return MaybeBindToTemporary(TheCall); 9664} 9665 9666/// BuildCallToObjectOfClassType - Build a call to an object of class 9667/// type (C++ [over.call.object]), which can end up invoking an 9668/// overloaded function call operator (@c operator()) or performing a 9669/// user-defined conversion on the object argument. 9670ExprResult 9671Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj, 9672 SourceLocation LParenLoc, 9673 Expr **Args, unsigned NumArgs, 9674 SourceLocation RParenLoc) { 9675 if (checkPlaceholderForOverload(*this, Obj)) 9676 return ExprError(); 9677 ExprResult Object = Owned(Obj); 9678 9679 UnbridgedCastsSet UnbridgedCasts; 9680 if (checkArgPlaceholdersForOverload(*this, Args, NumArgs, UnbridgedCasts)) 9681 return ExprError(); 9682 9683 assert(Object.get()->getType()->isRecordType() && "Requires object type argument"); 9684 const RecordType *Record = Object.get()->getType()->getAs<RecordType>(); 9685 9686 // C++ [over.call.object]p1: 9687 // If the primary-expression E in the function call syntax 9688 // evaluates to a class object of type "cv T", then the set of 9689 // candidate functions includes at least the function call 9690 // operators of T. The function call operators of T are obtained by 9691 // ordinary lookup of the name operator() in the context of 9692 // (E).operator(). 9693 OverloadCandidateSet CandidateSet(LParenLoc); 9694 DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(OO_Call); 9695 9696 if (RequireCompleteType(LParenLoc, Object.get()->getType(), 9697 PDiag(diag::err_incomplete_object_call) 9698 << Object.get()->getSourceRange())) 9699 return true; 9700 9701 LookupResult R(*this, OpName, LParenLoc, LookupOrdinaryName); 9702 LookupQualifiedName(R, Record->getDecl()); 9703 R.suppressDiagnostics(); 9704 9705 for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end(); 9706 Oper != OperEnd; ++Oper) { 9707 AddMethodCandidate(Oper.getPair(), Object.get()->getType(), 9708 Object.get()->Classify(Context), Args, NumArgs, CandidateSet, 9709 /*SuppressUserConversions=*/ false); 9710 } 9711 9712 // C++ [over.call.object]p2: 9713 // In addition, for each (non-explicit in C++0x) conversion function 9714 // declared in T of the form 9715 // 9716 // operator conversion-type-id () cv-qualifier; 9717 // 9718 // where cv-qualifier is the same cv-qualification as, or a 9719 // greater cv-qualification than, cv, and where conversion-type-id 9720 // denotes the type "pointer to function of (P1,...,Pn) returning 9721 // R", or the type "reference to pointer to function of 9722 // (P1,...,Pn) returning R", or the type "reference to function 9723 // of (P1,...,Pn) returning R", a surrogate call function [...] 9724 // is also considered as a candidate function. Similarly, 9725 // surrogate call functions are added to the set of candidate 9726 // functions for each conversion function declared in an 9727 // accessible base class provided the function is not hidden 9728 // within T by another intervening declaration. 9729 const UnresolvedSetImpl *Conversions 9730 = cast<CXXRecordDecl>(Record->getDecl())->getVisibleConversionFunctions(); 9731 for (UnresolvedSetImpl::iterator I = Conversions->begin(), 9732 E = Conversions->end(); I != E; ++I) { 9733 NamedDecl *D = *I; 9734 CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext()); 9735 if (isa<UsingShadowDecl>(D)) 9736 D = cast<UsingShadowDecl>(D)->getTargetDecl(); 9737 9738 // Skip over templated conversion functions; they aren't 9739 // surrogates. 9740 if (isa<FunctionTemplateDecl>(D)) 9741 continue; 9742 9743 CXXConversionDecl *Conv = cast<CXXConversionDecl>(D); 9744 if (!Conv->isExplicit()) { 9745 // Strip the reference type (if any) and then the pointer type (if 9746 // any) to get down to what might be a function type. 9747 QualType ConvType = Conv->getConversionType().getNonReferenceType(); 9748 if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>()) 9749 ConvType = ConvPtrType->getPointeeType(); 9750 9751 if (const FunctionProtoType *Proto = ConvType->getAs<FunctionProtoType>()) 9752 { 9753 AddSurrogateCandidate(Conv, I.getPair(), ActingContext, Proto, 9754 Object.get(), Args, NumArgs, CandidateSet); 9755 } 9756 } 9757 } 9758 9759 bool HadMultipleCandidates = (CandidateSet.size() > 1); 9760 9761 // Perform overload resolution. 9762 OverloadCandidateSet::iterator Best; 9763 switch (CandidateSet.BestViableFunction(*this, Object.get()->getLocStart(), 9764 Best)) { 9765 case OR_Success: 9766 // Overload resolution succeeded; we'll build the appropriate call 9767 // below. 9768 break; 9769 9770 case OR_No_Viable_Function: 9771 if (CandidateSet.empty()) 9772 Diag(Object.get()->getSourceRange().getBegin(), diag::err_ovl_no_oper) 9773 << Object.get()->getType() << /*call*/ 1 9774 << Object.get()->getSourceRange(); 9775 else 9776 Diag(Object.get()->getSourceRange().getBegin(), 9777 diag::err_ovl_no_viable_object_call) 9778 << Object.get()->getType() << Object.get()->getSourceRange(); 9779 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, NumArgs); 9780 break; 9781 9782 case OR_Ambiguous: 9783 Diag(Object.get()->getSourceRange().getBegin(), 9784 diag::err_ovl_ambiguous_object_call) 9785 << Object.get()->getType() << Object.get()->getSourceRange(); 9786 CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args, NumArgs); 9787 break; 9788 9789 case OR_Deleted: 9790 Diag(Object.get()->getSourceRange().getBegin(), 9791 diag::err_ovl_deleted_object_call) 9792 << Best->Function->isDeleted() 9793 << Object.get()->getType() 9794 << getDeletedOrUnavailableSuffix(Best->Function) 9795 << Object.get()->getSourceRange(); 9796 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, NumArgs); 9797 break; 9798 } 9799 9800 if (Best == CandidateSet.end()) 9801 return true; 9802 9803 UnbridgedCasts.restore(); 9804 9805 if (Best->Function == 0) { 9806 // Since there is no function declaration, this is one of the 9807 // surrogate candidates. Dig out the conversion function. 9808 CXXConversionDecl *Conv 9809 = cast<CXXConversionDecl>( 9810 Best->Conversions[0].UserDefined.ConversionFunction); 9811 9812 CheckMemberOperatorAccess(LParenLoc, Object.get(), 0, Best->FoundDecl); 9813 DiagnoseUseOfDecl(Best->FoundDecl, LParenLoc); 9814 9815 // We selected one of the surrogate functions that converts the 9816 // object parameter to a function pointer. Perform the conversion 9817 // on the object argument, then let ActOnCallExpr finish the job. 9818 9819 // Create an implicit member expr to refer to the conversion operator. 9820 // and then call it. 9821 ExprResult Call = BuildCXXMemberCallExpr(Object.get(), Best->FoundDecl, 9822 Conv, HadMultipleCandidates); 9823 if (Call.isInvalid()) 9824 return ExprError(); 9825 // Record usage of conversion in an implicit cast. 9826 Call = Owned(ImplicitCastExpr::Create(Context, Call.get()->getType(), 9827 CK_UserDefinedConversion, 9828 Call.get(), 0, VK_RValue)); 9829 9830 return ActOnCallExpr(S, Call.get(), LParenLoc, MultiExprArg(Args, NumArgs), 9831 RParenLoc); 9832 } 9833 9834 MarkDeclarationReferenced(LParenLoc, Best->Function); 9835 CheckMemberOperatorAccess(LParenLoc, Object.get(), 0, Best->FoundDecl); 9836 DiagnoseUseOfDecl(Best->FoundDecl, LParenLoc); 9837 9838 // We found an overloaded operator(). Build a CXXOperatorCallExpr 9839 // that calls this method, using Object for the implicit object 9840 // parameter and passing along the remaining arguments. 9841 CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function); 9842 const FunctionProtoType *Proto = 9843 Method->getType()->getAs<FunctionProtoType>(); 9844 9845 unsigned NumArgsInProto = Proto->getNumArgs(); 9846 unsigned NumArgsToCheck = NumArgs; 9847 9848 // Build the full argument list for the method call (the 9849 // implicit object parameter is placed at the beginning of the 9850 // list). 9851 Expr **MethodArgs; 9852 if (NumArgs < NumArgsInProto) { 9853 NumArgsToCheck = NumArgsInProto; 9854 MethodArgs = new Expr*[NumArgsInProto + 1]; 9855 } else { 9856 MethodArgs = new Expr*[NumArgs + 1]; 9857 } 9858 MethodArgs[0] = Object.get(); 9859 for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) 9860 MethodArgs[ArgIdx + 1] = Args[ArgIdx]; 9861 9862 ExprResult NewFn = CreateFunctionRefExpr(*this, Method, 9863 HadMultipleCandidates); 9864 if (NewFn.isInvalid()) 9865 return true; 9866 9867 // Once we've built TheCall, all of the expressions are properly 9868 // owned. 9869 QualType ResultTy = Method->getResultType(); 9870 ExprValueKind VK = Expr::getValueKindForType(ResultTy); 9871 ResultTy = ResultTy.getNonLValueExprType(Context); 9872 9873 CXXOperatorCallExpr *TheCall = 9874 new (Context) CXXOperatorCallExpr(Context, OO_Call, NewFn.take(), 9875 MethodArgs, NumArgs + 1, 9876 ResultTy, VK, RParenLoc); 9877 delete [] MethodArgs; 9878 9879 if (CheckCallReturnType(Method->getResultType(), LParenLoc, TheCall, 9880 Method)) 9881 return true; 9882 9883 // We may have default arguments. If so, we need to allocate more 9884 // slots in the call for them. 9885 if (NumArgs < NumArgsInProto) 9886 TheCall->setNumArgs(Context, NumArgsInProto + 1); 9887 else if (NumArgs > NumArgsInProto) 9888 NumArgsToCheck = NumArgsInProto; 9889 9890 bool IsError = false; 9891 9892 // Initialize the implicit object parameter. 9893 ExprResult ObjRes = 9894 PerformObjectArgumentInitialization(Object.get(), /*Qualifier=*/0, 9895 Best->FoundDecl, Method); 9896 if (ObjRes.isInvalid()) 9897 IsError = true; 9898 else 9899 Object = move(ObjRes); 9900 TheCall->setArg(0, Object.take()); 9901 9902 // Check the argument types. 9903 for (unsigned i = 0; i != NumArgsToCheck; i++) { 9904 Expr *Arg; 9905 if (i < NumArgs) { 9906 Arg = Args[i]; 9907 9908 // Pass the argument. 9909 9910 ExprResult InputInit 9911 = PerformCopyInitialization(InitializedEntity::InitializeParameter( 9912 Context, 9913 Method->getParamDecl(i)), 9914 SourceLocation(), Arg); 9915 9916 IsError |= InputInit.isInvalid(); 9917 Arg = InputInit.takeAs<Expr>(); 9918 } else { 9919 ExprResult DefArg 9920 = BuildCXXDefaultArgExpr(LParenLoc, Method, Method->getParamDecl(i)); 9921 if (DefArg.isInvalid()) { 9922 IsError = true; 9923 break; 9924 } 9925 9926 Arg = DefArg.takeAs<Expr>(); 9927 } 9928 9929 TheCall->setArg(i + 1, Arg); 9930 } 9931 9932 // If this is a variadic call, handle args passed through "...". 9933 if (Proto->isVariadic()) { 9934 // Promote the arguments (C99 6.5.2.2p7). 9935 for (unsigned i = NumArgsInProto; i != NumArgs; i++) { 9936 ExprResult Arg = DefaultVariadicArgumentPromotion(Args[i], VariadicMethod, 0); 9937 IsError |= Arg.isInvalid(); 9938 TheCall->setArg(i + 1, Arg.take()); 9939 } 9940 } 9941 9942 if (IsError) return true; 9943 9944 if (CheckFunctionCall(Method, TheCall)) 9945 return true; 9946 9947 return MaybeBindToTemporary(TheCall); 9948} 9949 9950/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator-> 9951/// (if one exists), where @c Base is an expression of class type and 9952/// @c Member is the name of the member we're trying to find. 9953ExprResult 9954Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc) { 9955 assert(Base->getType()->isRecordType() && 9956 "left-hand side must have class type"); 9957 9958 if (checkPlaceholderForOverload(*this, Base)) 9959 return ExprError(); 9960 9961 SourceLocation Loc = Base->getExprLoc(); 9962 9963 // C++ [over.ref]p1: 9964 // 9965 // [...] An expression x->m is interpreted as (x.operator->())->m 9966 // for a class object x of type T if T::operator->() exists and if 9967 // the operator is selected as the best match function by the 9968 // overload resolution mechanism (13.3). 9969 DeclarationName OpName = 9970 Context.DeclarationNames.getCXXOperatorName(OO_Arrow); 9971 OverloadCandidateSet CandidateSet(Loc); 9972 const RecordType *BaseRecord = Base->getType()->getAs<RecordType>(); 9973 9974 if (RequireCompleteType(Loc, Base->getType(), 9975 PDiag(diag::err_typecheck_incomplete_tag) 9976 << Base->getSourceRange())) 9977 return ExprError(); 9978 9979 LookupResult R(*this, OpName, OpLoc, LookupOrdinaryName); 9980 LookupQualifiedName(R, BaseRecord->getDecl()); 9981 R.suppressDiagnostics(); 9982 9983 for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end(); 9984 Oper != OperEnd; ++Oper) { 9985 AddMethodCandidate(Oper.getPair(), Base->getType(), Base->Classify(Context), 9986 0, 0, CandidateSet, /*SuppressUserConversions=*/false); 9987 } 9988 9989 bool HadMultipleCandidates = (CandidateSet.size() > 1); 9990 9991 // Perform overload resolution. 9992 OverloadCandidateSet::iterator Best; 9993 switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) { 9994 case OR_Success: 9995 // Overload resolution succeeded; we'll build the call below. 9996 break; 9997 9998 case OR_No_Viable_Function: 9999 if (CandidateSet.empty()) 10000 Diag(OpLoc, diag::err_typecheck_member_reference_arrow) 10001 << Base->getType() << Base->getSourceRange(); 10002 else 10003 Diag(OpLoc, diag::err_ovl_no_viable_oper) 10004 << "operator->" << Base->getSourceRange(); 10005 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, &Base, 1); 10006 return ExprError(); 10007 10008 case OR_Ambiguous: 10009 Diag(OpLoc, diag::err_ovl_ambiguous_oper_unary) 10010 << "->" << Base->getType() << Base->getSourceRange(); 10011 CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, &Base, 1); 10012 return ExprError(); 10013 10014 case OR_Deleted: 10015 Diag(OpLoc, diag::err_ovl_deleted_oper) 10016 << Best->Function->isDeleted() 10017 << "->" 10018 << getDeletedOrUnavailableSuffix(Best->Function) 10019 << Base->getSourceRange(); 10020 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, &Base, 1); 10021 return ExprError(); 10022 } 10023 10024 MarkDeclarationReferenced(OpLoc, Best->Function); 10025 CheckMemberOperatorAccess(OpLoc, Base, 0, Best->FoundDecl); 10026 DiagnoseUseOfDecl(Best->FoundDecl, OpLoc); 10027 10028 // Convert the object parameter. 10029 CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function); 10030 ExprResult BaseResult = 10031 PerformObjectArgumentInitialization(Base, /*Qualifier=*/0, 10032 Best->FoundDecl, Method); 10033 if (BaseResult.isInvalid()) 10034 return ExprError(); 10035 Base = BaseResult.take(); 10036 10037 // Build the operator call. 10038 ExprResult FnExpr = CreateFunctionRefExpr(*this, Method, 10039 HadMultipleCandidates); 10040 if (FnExpr.isInvalid()) 10041 return ExprError(); 10042 10043 QualType ResultTy = Method->getResultType(); 10044 ExprValueKind VK = Expr::getValueKindForType(ResultTy); 10045 ResultTy = ResultTy.getNonLValueExprType(Context); 10046 CXXOperatorCallExpr *TheCall = 10047 new (Context) CXXOperatorCallExpr(Context, OO_Arrow, FnExpr.take(), 10048 &Base, 1, ResultTy, VK, OpLoc); 10049 10050 if (CheckCallReturnType(Method->getResultType(), OpLoc, TheCall, 10051 Method)) 10052 return ExprError(); 10053 10054 return MaybeBindToTemporary(TheCall); 10055} 10056 10057/// FixOverloadedFunctionReference - E is an expression that refers to 10058/// a C++ overloaded function (possibly with some parentheses and 10059/// perhaps a '&' around it). We have resolved the overloaded function 10060/// to the function declaration Fn, so patch up the expression E to 10061/// refer (possibly indirectly) to Fn. Returns the new expr. 10062Expr *Sema::FixOverloadedFunctionReference(Expr *E, DeclAccessPair Found, 10063 FunctionDecl *Fn) { 10064 if (ParenExpr *PE = dyn_cast<ParenExpr>(E)) { 10065 Expr *SubExpr = FixOverloadedFunctionReference(PE->getSubExpr(), 10066 Found, Fn); 10067 if (SubExpr == PE->getSubExpr()) 10068 return PE; 10069 10070 return new (Context) ParenExpr(PE->getLParen(), PE->getRParen(), SubExpr); 10071 } 10072 10073 if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) { 10074 Expr *SubExpr = FixOverloadedFunctionReference(ICE->getSubExpr(), 10075 Found, Fn); 10076 assert(Context.hasSameType(ICE->getSubExpr()->getType(), 10077 SubExpr->getType()) && 10078 "Implicit cast type cannot be determined from overload"); 10079 assert(ICE->path_empty() && "fixing up hierarchy conversion?"); 10080 if (SubExpr == ICE->getSubExpr()) 10081 return ICE; 10082 10083 return ImplicitCastExpr::Create(Context, ICE->getType(), 10084 ICE->getCastKind(), 10085 SubExpr, 0, 10086 ICE->getValueKind()); 10087 } 10088 10089 if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(E)) { 10090 assert(UnOp->getOpcode() == UO_AddrOf && 10091 "Can only take the address of an overloaded function"); 10092 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) { 10093 if (Method->isStatic()) { 10094 // Do nothing: static member functions aren't any different 10095 // from non-member functions. 10096 } else { 10097 // Fix the sub expression, which really has to be an 10098 // UnresolvedLookupExpr holding an overloaded member function 10099 // or template. 10100 Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(), 10101 Found, Fn); 10102 if (SubExpr == UnOp->getSubExpr()) 10103 return UnOp; 10104 10105 assert(isa<DeclRefExpr>(SubExpr) 10106 && "fixed to something other than a decl ref"); 10107 assert(cast<DeclRefExpr>(SubExpr)->getQualifier() 10108 && "fixed to a member ref with no nested name qualifier"); 10109 10110 // We have taken the address of a pointer to member 10111 // function. Perform the computation here so that we get the 10112 // appropriate pointer to member type. 10113 QualType ClassType 10114 = Context.getTypeDeclType(cast<RecordDecl>(Method->getDeclContext())); 10115 QualType MemPtrType 10116 = Context.getMemberPointerType(Fn->getType(), ClassType.getTypePtr()); 10117 10118 return new (Context) UnaryOperator(SubExpr, UO_AddrOf, MemPtrType, 10119 VK_RValue, OK_Ordinary, 10120 UnOp->getOperatorLoc()); 10121 } 10122 } 10123 Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(), 10124 Found, Fn); 10125 if (SubExpr == UnOp->getSubExpr()) 10126 return UnOp; 10127 10128 return new (Context) UnaryOperator(SubExpr, UO_AddrOf, 10129 Context.getPointerType(SubExpr->getType()), 10130 VK_RValue, OK_Ordinary, 10131 UnOp->getOperatorLoc()); 10132 } 10133 10134 if (UnresolvedLookupExpr *ULE = dyn_cast<UnresolvedLookupExpr>(E)) { 10135 // FIXME: avoid copy. 10136 TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0; 10137 if (ULE->hasExplicitTemplateArgs()) { 10138 ULE->copyTemplateArgumentsInto(TemplateArgsBuffer); 10139 TemplateArgs = &TemplateArgsBuffer; 10140 } 10141 10142 DeclRefExpr *DRE = DeclRefExpr::Create(Context, 10143 ULE->getQualifierLoc(), 10144 Fn, 10145 ULE->getNameLoc(), 10146 Fn->getType(), 10147 VK_LValue, 10148 Found.getDecl(), 10149 TemplateArgs); 10150 DRE->setHadMultipleCandidates(ULE->getNumDecls() > 1); 10151 return DRE; 10152 } 10153 10154 if (UnresolvedMemberExpr *MemExpr = dyn_cast<UnresolvedMemberExpr>(E)) { 10155 // FIXME: avoid copy. 10156 TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0; 10157 if (MemExpr->hasExplicitTemplateArgs()) { 10158 MemExpr->copyTemplateArgumentsInto(TemplateArgsBuffer); 10159 TemplateArgs = &TemplateArgsBuffer; 10160 } 10161 10162 Expr *Base; 10163 10164 // If we're filling in a static method where we used to have an 10165 // implicit member access, rewrite to a simple decl ref. 10166 if (MemExpr->isImplicitAccess()) { 10167 if (cast<CXXMethodDecl>(Fn)->isStatic()) { 10168 DeclRefExpr *DRE = DeclRefExpr::Create(Context, 10169 MemExpr->getQualifierLoc(), 10170 Fn, 10171 MemExpr->getMemberLoc(), 10172 Fn->getType(), 10173 VK_LValue, 10174 Found.getDecl(), 10175 TemplateArgs); 10176 DRE->setHadMultipleCandidates(MemExpr->getNumDecls() > 1); 10177 return DRE; 10178 } else { 10179 SourceLocation Loc = MemExpr->getMemberLoc(); 10180 if (MemExpr->getQualifier()) 10181 Loc = MemExpr->getQualifierLoc().getBeginLoc(); 10182 Base = new (Context) CXXThisExpr(Loc, 10183 MemExpr->getBaseType(), 10184 /*isImplicit=*/true); 10185 } 10186 } else 10187 Base = MemExpr->getBase(); 10188 10189 ExprValueKind valueKind; 10190 QualType type; 10191 if (cast<CXXMethodDecl>(Fn)->isStatic()) { 10192 valueKind = VK_LValue; 10193 type = Fn->getType(); 10194 } else { 10195 valueKind = VK_RValue; 10196 type = Context.BoundMemberTy; 10197 } 10198 10199 MemberExpr *ME = MemberExpr::Create(Context, Base, 10200 MemExpr->isArrow(), 10201 MemExpr->getQualifierLoc(), 10202 Fn, 10203 Found, 10204 MemExpr->getMemberNameInfo(), 10205 TemplateArgs, 10206 type, valueKind, OK_Ordinary); 10207 ME->setHadMultipleCandidates(true); 10208 return ME; 10209 } 10210 10211 llvm_unreachable("Invalid reference to overloaded function"); 10212 return E; 10213} 10214 10215ExprResult Sema::FixOverloadedFunctionReference(ExprResult E, 10216 DeclAccessPair Found, 10217 FunctionDecl *Fn) { 10218 return Owned(FixOverloadedFunctionReference((Expr *)E.get(), Found, Fn)); 10219} 10220 10221} // end namespace clang 10222