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