SemaOverload.cpp revision f5b132f7b373203eab7cf357b01f935bd88087bd
103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes//===--- SemaOverload.cpp - C++ Overloading ---------------------*- C++ -*-===// 203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes// 303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes// The LLVM Compiler Infrastructure 403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes// 503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes// This file is distributed under the University of Illinois Open Source 603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes// License. See LICENSE.TXT for details. 703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes// 803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes//===----------------------------------------------------------------------===// 903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes// 1003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes// This file provides Sema routines for C++ overloading. 1103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes// 1203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes//===----------------------------------------------------------------------===// 1303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 1403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/Sema/SemaInternal.h" 1503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/Sema/Lookup.h" 1603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/Sema/Initialization.h" 1703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/Sema/Template.h" 1803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/Sema/TemplateDeduction.h" 1903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/Basic/Diagnostic.h" 2003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/Lex/Preprocessor.h" 2103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/AST/ASTContext.h" 2203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/AST/CXXInheritance.h" 2303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/AST/DeclObjC.h" 2403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/AST/Expr.h" 2503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/AST/ExprCXX.h" 2603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/AST/ExprObjC.h" 2703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/AST/TypeOrdering.h" 2803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "clang/Basic/PartialDiagnostic.h" 2903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "llvm/ADT/DenseSet.h" 3003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "llvm/ADT/SmallPtrSet.h" 3103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "llvm/ADT/SmallString.h" 3203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include "llvm/ADT/STLExtras.h" 3303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes#include <algorithm> 3403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 3503333823c75a1c1887e923828113a1b0fd12020cElliott Hughesnamespace clang { 3603333823c75a1c1887e923828113a1b0fd12020cElliott Hughesusing namespace sema; 3703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 3803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// A convenience routine for creating a decayed reference to a 3903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// function. 4003333823c75a1c1887e923828113a1b0fd12020cElliott Hughesstatic ExprResult 4103333823c75a1c1887e923828113a1b0fd12020cElliott HughesCreateFunctionRefExpr(Sema &S, FunctionDecl *Fn, bool HadMultipleCandidates, 4203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes SourceLocation Loc = SourceLocation(), 4303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes const DeclarationNameLoc &LocInfo = DeclarationNameLoc()){ 4403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes DeclRefExpr *DRE = new (S.Context) DeclRefExpr(Fn, false, Fn->getType(), 4503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes VK_LValue, Loc, LocInfo); 4603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes if (HadMultipleCandidates) 4703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes DRE->setHadMultipleCandidates(true); 4803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ExprResult E = S.Owned(DRE); 4903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes E = S.DefaultFunctionArrayConversion(E.take()); 5003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes if (E.isInvalid()) 5103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes return ExprError(); 5203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes return E; 5303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes} 5403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 5503333823c75a1c1887e923828113a1b0fd12020cElliott Hughesstatic bool IsStandardConversion(Sema &S, Expr* From, QualType ToType, 5603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes bool InOverloadResolution, 5703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes StandardConversionSequence &SCS, 5803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes bool CStyle, 5903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes bool AllowObjCWritebackConversion); 6003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 6103333823c75a1c1887e923828113a1b0fd12020cElliott Hughesstatic bool IsTransparentUnionStandardConversion(Sema &S, Expr* From, 6203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes QualType &ToType, 6303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes bool InOverloadResolution, 6403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes StandardConversionSequence &SCS, 6503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes bool CStyle); 6603333823c75a1c1887e923828113a1b0fd12020cElliott Hughesstatic OverloadingResult 6703333823c75a1c1887e923828113a1b0fd12020cElliott HughesIsUserDefinedConversion(Sema &S, Expr *From, QualType ToType, 6803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes UserDefinedConversionSequence& User, 6903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes OverloadCandidateSet& Conversions, 7003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes bool AllowExplicit); 7103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 7203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 7303333823c75a1c1887e923828113a1b0fd12020cElliott Hughesstatic ImplicitConversionSequence::CompareKind 7403333823c75a1c1887e923828113a1b0fd12020cElliott HughesCompareStandardConversionSequences(Sema &S, 7503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes const StandardConversionSequence& SCS1, 7603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes const StandardConversionSequence& SCS2); 7703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 7803333823c75a1c1887e923828113a1b0fd12020cElliott Hughesstatic ImplicitConversionSequence::CompareKind 7903333823c75a1c1887e923828113a1b0fd12020cElliott HughesCompareQualificationConversions(Sema &S, 8003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes const StandardConversionSequence& SCS1, 8103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes const StandardConversionSequence& SCS2); 8203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 8303333823c75a1c1887e923828113a1b0fd12020cElliott Hughesstatic ImplicitConversionSequence::CompareKind 8403333823c75a1c1887e923828113a1b0fd12020cElliott HughesCompareDerivedToBaseConversions(Sema &S, 8503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes const StandardConversionSequence& SCS1, 8603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes const StandardConversionSequence& SCS2); 8703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 8803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 8903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 9003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// GetConversionCategory - Retrieve the implicit conversion 9103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// category corresponding to the given implicit conversion kind. 9203333823c75a1c1887e923828113a1b0fd12020cElliott HughesImplicitConversionCategory 9303333823c75a1c1887e923828113a1b0fd12020cElliott HughesGetConversionCategory(ImplicitConversionKind Kind) { 9403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes static const ImplicitConversionCategory 9503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes Category[(int)ICK_Num_Conversion_Kinds] = { 9603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICC_Identity, 9703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICC_Lvalue_Transformation, 9803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICC_Lvalue_Transformation, 9903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICC_Lvalue_Transformation, 10003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICC_Identity, 10103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICC_Qualification_Adjustment, 10203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICC_Promotion, 10303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICC_Promotion, 10403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICC_Promotion, 10503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICC_Conversion, 10603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICC_Conversion, 10703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICC_Conversion, 10803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICC_Conversion, 10903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICC_Conversion, 11003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICC_Conversion, 11103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICC_Conversion, 11203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICC_Conversion, 11303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICC_Conversion, 11403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICC_Conversion, 11503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICC_Conversion, 11603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICC_Conversion, 11703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICC_Conversion 11803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes }; 11903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes return Category[(int)Kind]; 12003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes} 12103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 12203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// GetConversionRank - Retrieve the implicit conversion rank 12303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// corresponding to the given implicit conversion kind. 12403333823c75a1c1887e923828113a1b0fd12020cElliott HughesImplicitConversionRank GetConversionRank(ImplicitConversionKind Kind) { 12503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes static const ImplicitConversionRank 12603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes Rank[(int)ICK_Num_Conversion_Kinds] = { 12703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICR_Exact_Match, 12803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICR_Exact_Match, 12903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICR_Exact_Match, 13003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICR_Exact_Match, 13103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICR_Exact_Match, 13203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICR_Exact_Match, 13303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICR_Promotion, 13403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICR_Promotion, 13503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICR_Promotion, 13603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICR_Conversion, 13703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICR_Conversion, 13803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICR_Conversion, 13903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICR_Conversion, 14003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICR_Conversion, 14103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICR_Conversion, 14203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICR_Conversion, 14303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICR_Conversion, 14403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICR_Conversion, 14503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICR_Conversion, 14603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICR_Conversion, 14703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICR_Complex_Real_Conversion, 14803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICR_Conversion, 14903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICR_Conversion, 15003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ICR_Writeback_Conversion 15103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes }; 15203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes return Rank[(int)Kind]; 15303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes} 15403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 15503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// GetImplicitConversionName - Return the name of this kind of 15603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// implicit conversion. 15703333823c75a1c1887e923828113a1b0fd12020cElliott Hughesconst char* GetImplicitConversionName(ImplicitConversionKind Kind) { 15803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes static const char* const Name[(int)ICK_Num_Conversion_Kinds] = { 15903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes "No conversion", 16003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes "Lvalue-to-rvalue", 16103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes "Array-to-pointer", 16203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes "Function-to-pointer", 16303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes "Noreturn adjustment", 16403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes "Qualification", 16503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes "Integral promotion", 16603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes "Floating point promotion", 16703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes "Complex promotion", 16803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes "Integral conversion", 16903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes "Floating conversion", 17003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes "Complex conversion", 17103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes "Floating-integral conversion", 17203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes "Pointer conversion", 17303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes "Pointer-to-member conversion", 17403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes "Boolean conversion", 17503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes "Compatible-types conversion", 17603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes "Derived-to-base conversion", 17703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes "Vector conversion", 17803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes "Vector splat", 17903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes "Complex-real conversion", 18003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes "Block Pointer conversion", 18103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes "Transparent Union Conversion" 18203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes "Writeback conversion" 18303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes }; 18403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes return Name[Kind]; 18503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes} 18603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 18703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// StandardConversionSequence - Set the standard conversion 18803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// sequence to the identity conversion. 18903333823c75a1c1887e923828113a1b0fd12020cElliott Hughesvoid StandardConversionSequence::setAsIdentityConversion() { 19003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes First = ICK_Identity; 19103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes Second = ICK_Identity; 19203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes Third = ICK_Identity; 19303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes DeprecatedStringLiteralToCharPtr = false; 19403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes QualificationIncludesObjCLifetime = false; 19503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ReferenceBinding = false; 19603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes DirectBinding = false; 19703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes IsLvalueReference = true; 19803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes BindsToFunctionLvalue = false; 19903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes BindsToRvalue = false; 20003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes BindsImplicitObjectArgumentWithoutRefQualifier = false; 20103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ObjCLifetimeConversionBinding = false; 20203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes CopyConstructor = 0; 20303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes} 20403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 20503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// getRank - Retrieve the rank of this standard conversion sequence 20603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// (C++ 13.3.3.1.1p3). The rank is the largest rank of each of the 20703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// implicit conversions. 20803333823c75a1c1887e923828113a1b0fd12020cElliott HughesImplicitConversionRank StandardConversionSequence::getRank() const { 20903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ImplicitConversionRank Rank = ICR_Exact_Match; 21003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes if (GetConversionRank(First) > Rank) 21103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes Rank = GetConversionRank(First); 21203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes if (GetConversionRank(Second) > Rank) 21303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes Rank = GetConversionRank(Second); 21403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes if (GetConversionRank(Third) > Rank) 21503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes Rank = GetConversionRank(Third); 21603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes return Rank; 21703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes} 21803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 21903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// isPointerConversionToBool - Determines whether this conversion is 22003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// a conversion of a pointer or pointer-to-member to bool. This is 22103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// used as part of the ranking of standard conversion sequences 22203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// (C++ 13.3.3.2p4). 22303333823c75a1c1887e923828113a1b0fd12020cElliott Hughesbool StandardConversionSequence::isPointerConversionToBool() const { 22403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // Note that FromType has not necessarily been transformed by the 22503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // array-to-pointer or function-to-pointer implicit conversions, so 22603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // check for their presence as well as checking whether FromType is 22703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // a pointer. 22803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes if (getToType(1)->isBooleanType() && 22903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes (getFromType()->isPointerType() || 23003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes getFromType()->isObjCObjectPointerType() || 23103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes getFromType()->isBlockPointerType() || 23203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes getFromType()->isNullPtrType() || 23303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes First == ICK_Array_To_Pointer || First == ICK_Function_To_Pointer)) 23403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes return true; 23503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 23603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes return false; 23703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes} 23803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 23903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// isPointerConversionToVoidPointer - Determines whether this 24003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// conversion is a conversion of a pointer to a void pointer. This is 24103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// used as part of the ranking of standard conversion sequences (C++ 24203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// 13.3.3.2p4). 24303333823c75a1c1887e923828113a1b0fd12020cElliott Hughesbool 24403333823c75a1c1887e923828113a1b0fd12020cElliott HughesStandardConversionSequence:: 24503333823c75a1c1887e923828113a1b0fd12020cElliott HughesisPointerConversionToVoidPointer(ASTContext& Context) const { 24603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes QualType FromType = getFromType(); 24703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes QualType ToType = getToType(1); 24803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 24903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // Note that FromType has not necessarily been transformed by the 25003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // array-to-pointer implicit conversion, so check for its presence 25103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // and redo the conversion to get a pointer. 25203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes if (First == ICK_Array_To_Pointer) 25303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes FromType = Context.getArrayDecayedType(FromType); 25403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 25503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes if (Second == ICK_Pointer_Conversion && FromType->isAnyPointerType()) 25603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes if (const PointerType* ToPtrType = ToType->getAs<PointerType>()) 25703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes return ToPtrType->getPointeeType()->isVoidType(); 25803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 25903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes return false; 26003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes} 26103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 26203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// Skip any implicit casts which could be either part of a narrowing conversion 26303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// or after one in an implicit conversion. 26403333823c75a1c1887e923828113a1b0fd12020cElliott Hughesstatic const Expr *IgnoreNarrowingConversion(const Expr *Converted) { 26503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes while (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(Converted)) { 26603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes switch (ICE->getCastKind()) { 26703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes case CK_NoOp: 26803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes case CK_IntegralCast: 26903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes case CK_IntegralToBoolean: 27003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes case CK_IntegralToFloating: 27103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes case CK_FloatingToIntegral: 27203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes case CK_FloatingToBoolean: 27303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes case CK_FloatingCast: 27403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes Converted = ICE->getSubExpr(); 27503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes continue; 27603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 27703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes default: 27803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes return Converted; 27903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes } 28003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes } 28103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 28203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes return Converted; 28303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes} 28403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 28503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// Check if this standard conversion sequence represents a narrowing 28603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// conversion, according to C++11 [dcl.init.list]p7. 28703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// 28803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// \param Ctx The AST context. 28903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// \param Converted The result of applying this standard conversion sequence. 29003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// \param ConstantValue If this is an NK_Constant_Narrowing conversion, the 29103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// value of the expression prior to the narrowing conversion. 29203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// \param ConstantType If this is an NK_Constant_Narrowing conversion, the 29303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes/// type of the expression prior to the narrowing conversion. 29403333823c75a1c1887e923828113a1b0fd12020cElliott HughesNarrowingKind 29503333823c75a1c1887e923828113a1b0fd12020cElliott HughesStandardConversionSequence::getNarrowingKind(ASTContext &Ctx, 29603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes const Expr *Converted, 29703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes APValue &ConstantValue, 29803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes QualType &ConstantType) const { 29903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes assert(Ctx.getLangOpts().CPlusPlus && "narrowing check outside C++"); 30003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 30103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // C++11 [dcl.init.list]p7: 30203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // A narrowing conversion is an implicit conversion ... 30303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes QualType FromType = getToType(0); 30403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes QualType ToType = getToType(1); 30503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes switch (Second) { 30603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // -- from a floating-point type to an integer type, or 30703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // 30803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // -- from an integer type or unscoped enumeration type to a floating-point 30903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // type, except where the source is a constant expression and the actual 31003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // value after conversion will fit into the target type and will produce 31103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // the original value when converted back to the original type, or 31203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes case ICK_Floating_Integral: 31303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes if (FromType->isRealFloatingType() && ToType->isIntegralType(Ctx)) { 31403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes return NK_Type_Narrowing; 31503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes } else if (FromType->isIntegralType(Ctx) && ToType->isRealFloatingType()) { 31603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes llvm::APSInt IntConstantValue; 31703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes const Expr *Initializer = IgnoreNarrowingConversion(Converted); 31803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes if (Initializer && 31903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes Initializer->isIntegerConstantExpr(IntConstantValue, Ctx)) { 32003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // Convert the integer to the floating type. 32103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes llvm::APFloat Result(Ctx.getFloatTypeSemantics(ToType)); 32203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes Result.convertFromAPInt(IntConstantValue, IntConstantValue.isSigned(), 32303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes llvm::APFloat::rmNearestTiesToEven); 32403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // And back. 32503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes llvm::APSInt ConvertedValue = IntConstantValue; 32603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes bool ignored; 32703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes Result.convertToInteger(ConvertedValue, 32803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes llvm::APFloat::rmTowardZero, &ignored); 32903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // If the resulting value is different, this was a narrowing conversion. 33003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes if (IntConstantValue != ConvertedValue) { 33103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ConstantValue = APValue(IntConstantValue); 33203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ConstantType = Initializer->getType(); 33303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes return NK_Constant_Narrowing; 33403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes } 33503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes } else { 33603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // Variables are always narrowings. 33703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes return NK_Variable_Narrowing; 33803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes } 33903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes } 34003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes return NK_Not_Narrowing; 34103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 34203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // -- from long double to double or float, or from double to float, except 34303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // where the source is a constant expression and the actual value after 34403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // conversion is within the range of values that can be represented (even 34503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // if it cannot be represented exactly), or 34603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes case ICK_Floating_Conversion: 34703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes if (FromType->isRealFloatingType() && ToType->isRealFloatingType() && 34803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes Ctx.getFloatingTypeOrder(FromType, ToType) == 1) { 34903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // FromType is larger than ToType. 35003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes const Expr *Initializer = IgnoreNarrowingConversion(Converted); 35103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes if (Initializer->isCXX11ConstantExpr(Ctx, &ConstantValue)) { 35203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // Constant! 35303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes assert(ConstantValue.isFloat()); 35403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes llvm::APFloat FloatVal = ConstantValue.getFloat(); 35503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // Convert the source value into the target type. 35603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes bool ignored; 35703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes llvm::APFloat::opStatus ConvertStatus = FloatVal.convert( 35803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes Ctx.getFloatTypeSemantics(ToType), 35903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes llvm::APFloat::rmNearestTiesToEven, &ignored); 36003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // If there was no overflow, the source value is within the range of 36103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // values that can be represented. 36203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes if (ConvertStatus & llvm::APFloat::opOverflow) { 36303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes ConstantType = Initializer->getType(); 36403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes return NK_Constant_Narrowing; 36503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes } 36603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes } else { 36703333823c75a1c1887e923828113a1b0fd12020cElliott Hughes return NK_Variable_Narrowing; 36803333823c75a1c1887e923828113a1b0fd12020cElliott Hughes } 36903333823c75a1c1887e923828113a1b0fd12020cElliott Hughes } 37003333823c75a1c1887e923828113a1b0fd12020cElliott Hughes return NK_Not_Narrowing; 37103333823c75a1c1887e923828113a1b0fd12020cElliott Hughes 37203333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // -- from an integer type or unscoped enumeration type to an integer type 37303333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // that cannot represent all the values of the original type, except where 37403333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // the source is a constant expression and the actual value after 37503333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // conversion will fit into the target type and will produce the original 37603333823c75a1c1887e923828113a1b0fd12020cElliott Hughes // value when converted back to the original type. 377 case ICK_Boolean_Conversion: // Bools are integers too. 378 if (!FromType->isIntegralOrUnscopedEnumerationType()) { 379 // Boolean conversions can be from pointers and pointers to members 380 // [conv.bool], and those aren't considered narrowing conversions. 381 return NK_Not_Narrowing; 382 } // Otherwise, fall through to the integral case. 383 case ICK_Integral_Conversion: { 384 assert(FromType->isIntegralOrUnscopedEnumerationType()); 385 assert(ToType->isIntegralOrUnscopedEnumerationType()); 386 const bool FromSigned = FromType->isSignedIntegerOrEnumerationType(); 387 const unsigned FromWidth = Ctx.getIntWidth(FromType); 388 const bool ToSigned = ToType->isSignedIntegerOrEnumerationType(); 389 const unsigned ToWidth = Ctx.getIntWidth(ToType); 390 391 if (FromWidth > ToWidth || 392 (FromWidth == ToWidth && FromSigned != ToSigned) || 393 (FromSigned && !ToSigned)) { 394 // Not all values of FromType can be represented in ToType. 395 llvm::APSInt InitializerValue; 396 const Expr *Initializer = IgnoreNarrowingConversion(Converted); 397 if (!Initializer->isIntegerConstantExpr(InitializerValue, Ctx)) { 398 // Such conversions on variables are always narrowing. 399 return NK_Variable_Narrowing; 400 } 401 bool Narrowing = false; 402 if (FromWidth < ToWidth) { 403 // Negative -> unsigned is narrowing. Otherwise, more bits is never 404 // narrowing. 405 if (InitializerValue.isSigned() && InitializerValue.isNegative()) 406 Narrowing = true; 407 } else { 408 // Add a bit to the InitializerValue so we don't have to worry about 409 // signed vs. unsigned comparisons. 410 InitializerValue = InitializerValue.extend( 411 InitializerValue.getBitWidth() + 1); 412 // Convert the initializer to and from the target width and signed-ness. 413 llvm::APSInt ConvertedValue = InitializerValue; 414 ConvertedValue = ConvertedValue.trunc(ToWidth); 415 ConvertedValue.setIsSigned(ToSigned); 416 ConvertedValue = ConvertedValue.extend(InitializerValue.getBitWidth()); 417 ConvertedValue.setIsSigned(InitializerValue.isSigned()); 418 // If the result is different, this was a narrowing conversion. 419 if (ConvertedValue != InitializerValue) 420 Narrowing = true; 421 } 422 if (Narrowing) { 423 ConstantType = Initializer->getType(); 424 ConstantValue = APValue(InitializerValue); 425 return NK_Constant_Narrowing; 426 } 427 } 428 return NK_Not_Narrowing; 429 } 430 431 default: 432 // Other kinds of conversions are not narrowings. 433 return NK_Not_Narrowing; 434 } 435} 436 437/// DebugPrint - Print this standard conversion sequence to standard 438/// error. Useful for debugging overloading issues. 439void StandardConversionSequence::DebugPrint() const { 440 raw_ostream &OS = llvm::errs(); 441 bool PrintedSomething = false; 442 if (First != ICK_Identity) { 443 OS << GetImplicitConversionName(First); 444 PrintedSomething = true; 445 } 446 447 if (Second != ICK_Identity) { 448 if (PrintedSomething) { 449 OS << " -> "; 450 } 451 OS << GetImplicitConversionName(Second); 452 453 if (CopyConstructor) { 454 OS << " (by copy constructor)"; 455 } else if (DirectBinding) { 456 OS << " (direct reference binding)"; 457 } else if (ReferenceBinding) { 458 OS << " (reference binding)"; 459 } 460 PrintedSomething = true; 461 } 462 463 if (Third != ICK_Identity) { 464 if (PrintedSomething) { 465 OS << " -> "; 466 } 467 OS << GetImplicitConversionName(Third); 468 PrintedSomething = true; 469 } 470 471 if (!PrintedSomething) { 472 OS << "No conversions required"; 473 } 474} 475 476/// DebugPrint - Print this user-defined conversion sequence to standard 477/// error. Useful for debugging overloading issues. 478void UserDefinedConversionSequence::DebugPrint() const { 479 raw_ostream &OS = llvm::errs(); 480 if (Before.First || Before.Second || Before.Third) { 481 Before.DebugPrint(); 482 OS << " -> "; 483 } 484 if (ConversionFunction) 485 OS << '\'' << *ConversionFunction << '\''; 486 else 487 OS << "aggregate initialization"; 488 if (After.First || After.Second || After.Third) { 489 OS << " -> "; 490 After.DebugPrint(); 491 } 492} 493 494/// DebugPrint - Print this implicit conversion sequence to standard 495/// error. Useful for debugging overloading issues. 496void ImplicitConversionSequence::DebugPrint() const { 497 raw_ostream &OS = llvm::errs(); 498 switch (ConversionKind) { 499 case StandardConversion: 500 OS << "Standard conversion: "; 501 Standard.DebugPrint(); 502 break; 503 case UserDefinedConversion: 504 OS << "User-defined conversion: "; 505 UserDefined.DebugPrint(); 506 break; 507 case EllipsisConversion: 508 OS << "Ellipsis conversion"; 509 break; 510 case AmbiguousConversion: 511 OS << "Ambiguous conversion"; 512 break; 513 case BadConversion: 514 OS << "Bad conversion"; 515 break; 516 } 517 518 OS << "\n"; 519} 520 521void AmbiguousConversionSequence::construct() { 522 new (&conversions()) ConversionSet(); 523} 524 525void AmbiguousConversionSequence::destruct() { 526 conversions().~ConversionSet(); 527} 528 529void 530AmbiguousConversionSequence::copyFrom(const AmbiguousConversionSequence &O) { 531 FromTypePtr = O.FromTypePtr; 532 ToTypePtr = O.ToTypePtr; 533 new (&conversions()) ConversionSet(O.conversions()); 534} 535 536namespace { 537 // Structure used by OverloadCandidate::DeductionFailureInfo to store 538 // template parameter and template argument information. 539 struct DFIParamWithArguments { 540 TemplateParameter Param; 541 TemplateArgument FirstArg; 542 TemplateArgument SecondArg; 543 }; 544} 545 546/// \brief Convert from Sema's representation of template deduction information 547/// to the form used in overload-candidate information. 548OverloadCandidate::DeductionFailureInfo 549static MakeDeductionFailureInfo(ASTContext &Context, 550 Sema::TemplateDeductionResult TDK, 551 TemplateDeductionInfo &Info) { 552 OverloadCandidate::DeductionFailureInfo Result; 553 Result.Result = static_cast<unsigned>(TDK); 554 Result.HasDiagnostic = false; 555 Result.Data = 0; 556 switch (TDK) { 557 case Sema::TDK_Success: 558 case Sema::TDK_Invalid: 559 case Sema::TDK_InstantiationDepth: 560 case Sema::TDK_TooManyArguments: 561 case Sema::TDK_TooFewArguments: 562 break; 563 564 case Sema::TDK_Incomplete: 565 case Sema::TDK_InvalidExplicitArguments: 566 Result.Data = Info.Param.getOpaqueValue(); 567 break; 568 569 case Sema::TDK_Inconsistent: 570 case Sema::TDK_Underqualified: { 571 // FIXME: Should allocate from normal heap so that we can free this later. 572 DFIParamWithArguments *Saved = new (Context) DFIParamWithArguments; 573 Saved->Param = Info.Param; 574 Saved->FirstArg = Info.FirstArg; 575 Saved->SecondArg = Info.SecondArg; 576 Result.Data = Saved; 577 break; 578 } 579 580 case Sema::TDK_SubstitutionFailure: 581 Result.Data = Info.take(); 582 if (Info.hasSFINAEDiagnostic()) { 583 PartialDiagnosticAt *Diag = new (Result.Diagnostic) PartialDiagnosticAt( 584 SourceLocation(), PartialDiagnostic::NullDiagnostic()); 585 Info.takeSFINAEDiagnostic(*Diag); 586 Result.HasDiagnostic = true; 587 } 588 break; 589 590 case Sema::TDK_NonDeducedMismatch: 591 case Sema::TDK_FailedOverloadResolution: 592 break; 593 } 594 595 return Result; 596} 597 598void OverloadCandidate::DeductionFailureInfo::Destroy() { 599 switch (static_cast<Sema::TemplateDeductionResult>(Result)) { 600 case Sema::TDK_Success: 601 case Sema::TDK_Invalid: 602 case Sema::TDK_InstantiationDepth: 603 case Sema::TDK_Incomplete: 604 case Sema::TDK_TooManyArguments: 605 case Sema::TDK_TooFewArguments: 606 case Sema::TDK_InvalidExplicitArguments: 607 break; 608 609 case Sema::TDK_Inconsistent: 610 case Sema::TDK_Underqualified: 611 // FIXME: Destroy the data? 612 Data = 0; 613 break; 614 615 case Sema::TDK_SubstitutionFailure: 616 // FIXME: Destroy the template argument list? 617 Data = 0; 618 if (PartialDiagnosticAt *Diag = getSFINAEDiagnostic()) { 619 Diag->~PartialDiagnosticAt(); 620 HasDiagnostic = false; 621 } 622 break; 623 624 // Unhandled 625 case Sema::TDK_NonDeducedMismatch: 626 case Sema::TDK_FailedOverloadResolution: 627 break; 628 } 629} 630 631PartialDiagnosticAt * 632OverloadCandidate::DeductionFailureInfo::getSFINAEDiagnostic() { 633 if (HasDiagnostic) 634 return static_cast<PartialDiagnosticAt*>(static_cast<void*>(Diagnostic)); 635 return 0; 636} 637 638TemplateParameter 639OverloadCandidate::DeductionFailureInfo::getTemplateParameter() { 640 switch (static_cast<Sema::TemplateDeductionResult>(Result)) { 641 case Sema::TDK_Success: 642 case Sema::TDK_Invalid: 643 case Sema::TDK_InstantiationDepth: 644 case Sema::TDK_TooManyArguments: 645 case Sema::TDK_TooFewArguments: 646 case Sema::TDK_SubstitutionFailure: 647 return TemplateParameter(); 648 649 case Sema::TDK_Incomplete: 650 case Sema::TDK_InvalidExplicitArguments: 651 return TemplateParameter::getFromOpaqueValue(Data); 652 653 case Sema::TDK_Inconsistent: 654 case Sema::TDK_Underqualified: 655 return static_cast<DFIParamWithArguments*>(Data)->Param; 656 657 // Unhandled 658 case Sema::TDK_NonDeducedMismatch: 659 case Sema::TDK_FailedOverloadResolution: 660 break; 661 } 662 663 return TemplateParameter(); 664} 665 666TemplateArgumentList * 667OverloadCandidate::DeductionFailureInfo::getTemplateArgumentList() { 668 switch (static_cast<Sema::TemplateDeductionResult>(Result)) { 669 case Sema::TDK_Success: 670 case Sema::TDK_Invalid: 671 case Sema::TDK_InstantiationDepth: 672 case Sema::TDK_TooManyArguments: 673 case Sema::TDK_TooFewArguments: 674 case Sema::TDK_Incomplete: 675 case Sema::TDK_InvalidExplicitArguments: 676 case Sema::TDK_Inconsistent: 677 case Sema::TDK_Underqualified: 678 return 0; 679 680 case Sema::TDK_SubstitutionFailure: 681 return static_cast<TemplateArgumentList*>(Data); 682 683 // Unhandled 684 case Sema::TDK_NonDeducedMismatch: 685 case Sema::TDK_FailedOverloadResolution: 686 break; 687 } 688 689 return 0; 690} 691 692const TemplateArgument *OverloadCandidate::DeductionFailureInfo::getFirstArg() { 693 switch (static_cast<Sema::TemplateDeductionResult>(Result)) { 694 case Sema::TDK_Success: 695 case Sema::TDK_Invalid: 696 case Sema::TDK_InstantiationDepth: 697 case Sema::TDK_Incomplete: 698 case Sema::TDK_TooManyArguments: 699 case Sema::TDK_TooFewArguments: 700 case Sema::TDK_InvalidExplicitArguments: 701 case Sema::TDK_SubstitutionFailure: 702 return 0; 703 704 case Sema::TDK_Inconsistent: 705 case Sema::TDK_Underqualified: 706 return &static_cast<DFIParamWithArguments*>(Data)->FirstArg; 707 708 // Unhandled 709 case Sema::TDK_NonDeducedMismatch: 710 case Sema::TDK_FailedOverloadResolution: 711 break; 712 } 713 714 return 0; 715} 716 717const TemplateArgument * 718OverloadCandidate::DeductionFailureInfo::getSecondArg() { 719 switch (static_cast<Sema::TemplateDeductionResult>(Result)) { 720 case Sema::TDK_Success: 721 case Sema::TDK_Invalid: 722 case Sema::TDK_InstantiationDepth: 723 case Sema::TDK_Incomplete: 724 case Sema::TDK_TooManyArguments: 725 case Sema::TDK_TooFewArguments: 726 case Sema::TDK_InvalidExplicitArguments: 727 case Sema::TDK_SubstitutionFailure: 728 return 0; 729 730 case Sema::TDK_Inconsistent: 731 case Sema::TDK_Underqualified: 732 return &static_cast<DFIParamWithArguments*>(Data)->SecondArg; 733 734 // Unhandled 735 case Sema::TDK_NonDeducedMismatch: 736 case Sema::TDK_FailedOverloadResolution: 737 break; 738 } 739 740 return 0; 741} 742 743void OverloadCandidateSet::destroyCandidates() { 744 for (iterator i = begin(), e = end(); i != e; ++i) { 745 for (unsigned ii = 0, ie = i->NumConversions; ii != ie; ++ii) 746 i->Conversions[ii].~ImplicitConversionSequence(); 747 if (!i->Viable && i->FailureKind == ovl_fail_bad_deduction) 748 i->DeductionFailure.Destroy(); 749 } 750} 751 752void OverloadCandidateSet::clear() { 753 destroyCandidates(); 754 NumInlineSequences = 0; 755 Candidates.clear(); 756 Functions.clear(); 757} 758 759namespace { 760 class UnbridgedCastsSet { 761 struct Entry { 762 Expr **Addr; 763 Expr *Saved; 764 }; 765 SmallVector<Entry, 2> Entries; 766 767 public: 768 void save(Sema &S, Expr *&E) { 769 assert(E->hasPlaceholderType(BuiltinType::ARCUnbridgedCast)); 770 Entry entry = { &E, E }; 771 Entries.push_back(entry); 772 E = S.stripARCUnbridgedCast(E); 773 } 774 775 void restore() { 776 for (SmallVectorImpl<Entry>::iterator 777 i = Entries.begin(), e = Entries.end(); i != e; ++i) 778 *i->Addr = i->Saved; 779 } 780 }; 781} 782 783/// checkPlaceholderForOverload - Do any interesting placeholder-like 784/// preprocessing on the given expression. 785/// 786/// \param unbridgedCasts a collection to which to add unbridged casts; 787/// without this, they will be immediately diagnosed as errors 788/// 789/// Return true on unrecoverable error. 790static bool checkPlaceholderForOverload(Sema &S, Expr *&E, 791 UnbridgedCastsSet *unbridgedCasts = 0) { 792 if (const BuiltinType *placeholder = E->getType()->getAsPlaceholderType()) { 793 // We can't handle overloaded expressions here because overload 794 // resolution might reasonably tweak them. 795 if (placeholder->getKind() == BuiltinType::Overload) return false; 796 797 // If the context potentially accepts unbridged ARC casts, strip 798 // the unbridged cast and add it to the collection for later restoration. 799 if (placeholder->getKind() == BuiltinType::ARCUnbridgedCast && 800 unbridgedCasts) { 801 unbridgedCasts->save(S, E); 802 return false; 803 } 804 805 // Go ahead and check everything else. 806 ExprResult result = S.CheckPlaceholderExpr(E); 807 if (result.isInvalid()) 808 return true; 809 810 E = result.take(); 811 return false; 812 } 813 814 // Nothing to do. 815 return false; 816} 817 818/// checkArgPlaceholdersForOverload - Check a set of call operands for 819/// placeholders. 820static bool checkArgPlaceholdersForOverload(Sema &S, Expr **args, 821 unsigned numArgs, 822 UnbridgedCastsSet &unbridged) { 823 for (unsigned i = 0; i != numArgs; ++i) 824 if (checkPlaceholderForOverload(S, args[i], &unbridged)) 825 return true; 826 827 return false; 828} 829 830// IsOverload - Determine whether the given New declaration is an 831// overload of the declarations in Old. This routine returns false if 832// New and Old cannot be overloaded, e.g., if New has the same 833// signature as some function in Old (C++ 1.3.10) or if the Old 834// declarations aren't functions (or function templates) at all. When 835// it does return false, MatchedDecl will point to the decl that New 836// cannot be overloaded with. This decl may be a UsingShadowDecl on 837// top of the underlying declaration. 838// 839// Example: Given the following input: 840// 841// void f(int, float); // #1 842// void f(int, int); // #2 843// int f(int, int); // #3 844// 845// When we process #1, there is no previous declaration of "f", 846// so IsOverload will not be used. 847// 848// When we process #2, Old contains only the FunctionDecl for #1. By 849// comparing the parameter types, we see that #1 and #2 are overloaded 850// (since they have different signatures), so this routine returns 851// false; MatchedDecl is unchanged. 852// 853// When we process #3, Old is an overload set containing #1 and #2. We 854// compare the signatures of #3 to #1 (they're overloaded, so we do 855// nothing) and then #3 to #2. Since the signatures of #3 and #2 are 856// identical (return types of functions are not part of the 857// signature), IsOverload returns false and MatchedDecl will be set to 858// point to the FunctionDecl for #2. 859// 860// 'NewIsUsingShadowDecl' indicates that 'New' is being introduced 861// into a class by a using declaration. The rules for whether to hide 862// shadow declarations ignore some properties which otherwise figure 863// into a function template's signature. 864Sema::OverloadKind 865Sema::CheckOverload(Scope *S, FunctionDecl *New, const LookupResult &Old, 866 NamedDecl *&Match, bool NewIsUsingDecl) { 867 for (LookupResult::iterator I = Old.begin(), E = Old.end(); 868 I != E; ++I) { 869 NamedDecl *OldD = *I; 870 871 bool OldIsUsingDecl = false; 872 if (isa<UsingShadowDecl>(OldD)) { 873 OldIsUsingDecl = true; 874 875 // We can always introduce two using declarations into the same 876 // context, even if they have identical signatures. 877 if (NewIsUsingDecl) continue; 878 879 OldD = cast<UsingShadowDecl>(OldD)->getTargetDecl(); 880 } 881 882 // If either declaration was introduced by a using declaration, 883 // we'll need to use slightly different rules for matching. 884 // Essentially, these rules are the normal rules, except that 885 // function templates hide function templates with different 886 // return types or template parameter lists. 887 bool UseMemberUsingDeclRules = 888 (OldIsUsingDecl || NewIsUsingDecl) && CurContext->isRecord(); 889 890 if (FunctionTemplateDecl *OldT = dyn_cast<FunctionTemplateDecl>(OldD)) { 891 if (!IsOverload(New, OldT->getTemplatedDecl(), UseMemberUsingDeclRules)) { 892 if (UseMemberUsingDeclRules && OldIsUsingDecl) { 893 HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I)); 894 continue; 895 } 896 897 Match = *I; 898 return Ovl_Match; 899 } 900 } else if (FunctionDecl *OldF = dyn_cast<FunctionDecl>(OldD)) { 901 if (!IsOverload(New, OldF, UseMemberUsingDeclRules)) { 902 if (UseMemberUsingDeclRules && OldIsUsingDecl) { 903 HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I)); 904 continue; 905 } 906 907 Match = *I; 908 return Ovl_Match; 909 } 910 } else if (isa<UsingDecl>(OldD)) { 911 // We can overload with these, which can show up when doing 912 // redeclaration checks for UsingDecls. 913 assert(Old.getLookupKind() == LookupUsingDeclName); 914 } else if (isa<TagDecl>(OldD)) { 915 // We can always overload with tags by hiding them. 916 } else if (isa<UnresolvedUsingValueDecl>(OldD)) { 917 // Optimistically assume that an unresolved using decl will 918 // overload; if it doesn't, we'll have to diagnose during 919 // template instantiation. 920 } else { 921 // (C++ 13p1): 922 // Only function declarations can be overloaded; object and type 923 // declarations cannot be overloaded. 924 Match = *I; 925 return Ovl_NonFunction; 926 } 927 } 928 929 return Ovl_Overload; 930} 931 932bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old, 933 bool UseUsingDeclRules) { 934 // If both of the functions are extern "C", then they are not 935 // overloads. 936 if (Old->isExternC() && New->isExternC()) 937 return false; 938 939 FunctionTemplateDecl *OldTemplate = Old->getDescribedFunctionTemplate(); 940 FunctionTemplateDecl *NewTemplate = New->getDescribedFunctionTemplate(); 941 942 // C++ [temp.fct]p2: 943 // A function template can be overloaded with other function templates 944 // and with normal (non-template) functions. 945 if ((OldTemplate == 0) != (NewTemplate == 0)) 946 return true; 947 948 // Is the function New an overload of the function Old? 949 QualType OldQType = Context.getCanonicalType(Old->getType()); 950 QualType NewQType = Context.getCanonicalType(New->getType()); 951 952 // Compare the signatures (C++ 1.3.10) of the two functions to 953 // determine whether they are overloads. If we find any mismatch 954 // in the signature, they are overloads. 955 956 // If either of these functions is a K&R-style function (no 957 // prototype), then we consider them to have matching signatures. 958 if (isa<FunctionNoProtoType>(OldQType.getTypePtr()) || 959 isa<FunctionNoProtoType>(NewQType.getTypePtr())) 960 return false; 961 962 const FunctionProtoType* OldType = cast<FunctionProtoType>(OldQType); 963 const FunctionProtoType* NewType = cast<FunctionProtoType>(NewQType); 964 965 // The signature of a function includes the types of its 966 // parameters (C++ 1.3.10), which includes the presence or absence 967 // of the ellipsis; see C++ DR 357). 968 if (OldQType != NewQType && 969 (OldType->getNumArgs() != NewType->getNumArgs() || 970 OldType->isVariadic() != NewType->isVariadic() || 971 !FunctionArgTypesAreEqual(OldType, NewType))) 972 return true; 973 974 // C++ [temp.over.link]p4: 975 // The signature of a function template consists of its function 976 // signature, its return type and its template parameter list. The names 977 // of the template parameters are significant only for establishing the 978 // relationship between the template parameters and the rest of the 979 // signature. 980 // 981 // We check the return type and template parameter lists for function 982 // templates first; the remaining checks follow. 983 // 984 // However, we don't consider either of these when deciding whether 985 // a member introduced by a shadow declaration is hidden. 986 if (!UseUsingDeclRules && NewTemplate && 987 (!TemplateParameterListsAreEqual(NewTemplate->getTemplateParameters(), 988 OldTemplate->getTemplateParameters(), 989 false, TPL_TemplateMatch) || 990 OldType->getResultType() != NewType->getResultType())) 991 return true; 992 993 // If the function is a class member, its signature includes the 994 // cv-qualifiers (if any) and ref-qualifier (if any) on the function itself. 995 // 996 // As part of this, also check whether one of the member functions 997 // is static, in which case they are not overloads (C++ 998 // 13.1p2). While not part of the definition of the signature, 999 // this check is important to determine whether these functions 1000 // can be overloaded. 1001 CXXMethodDecl* OldMethod = dyn_cast<CXXMethodDecl>(Old); 1002 CXXMethodDecl* NewMethod = dyn_cast<CXXMethodDecl>(New); 1003 if (OldMethod && NewMethod && 1004 !OldMethod->isStatic() && !NewMethod->isStatic() && 1005 (OldMethod->getTypeQualifiers() != NewMethod->getTypeQualifiers() || 1006 OldMethod->getRefQualifier() != NewMethod->getRefQualifier())) { 1007 if (!UseUsingDeclRules && 1008 OldMethod->getRefQualifier() != NewMethod->getRefQualifier() && 1009 (OldMethod->getRefQualifier() == RQ_None || 1010 NewMethod->getRefQualifier() == RQ_None)) { 1011 // C++0x [over.load]p2: 1012 // - Member function declarations with the same name and the same 1013 // parameter-type-list as well as member function template 1014 // declarations with the same name, the same parameter-type-list, and 1015 // the same template parameter lists cannot be overloaded if any of 1016 // them, but not all, have a ref-qualifier (8.3.5). 1017 Diag(NewMethod->getLocation(), diag::err_ref_qualifier_overload) 1018 << NewMethod->getRefQualifier() << OldMethod->getRefQualifier(); 1019 Diag(OldMethod->getLocation(), diag::note_previous_declaration); 1020 } 1021 1022 return true; 1023 } 1024 1025 // The signatures match; this is not an overload. 1026 return false; 1027} 1028 1029/// \brief Checks availability of the function depending on the current 1030/// function context. Inside an unavailable function, unavailability is ignored. 1031/// 1032/// \returns true if \arg FD is unavailable and current context is inside 1033/// an available function, false otherwise. 1034bool Sema::isFunctionConsideredUnavailable(FunctionDecl *FD) { 1035 return FD->isUnavailable() && !cast<Decl>(CurContext)->isUnavailable(); 1036} 1037 1038/// \brief Tries a user-defined conversion from From to ToType. 1039/// 1040/// Produces an implicit conversion sequence for when a standard conversion 1041/// is not an option. See TryImplicitConversion for more information. 1042static ImplicitConversionSequence 1043TryUserDefinedConversion(Sema &S, Expr *From, QualType ToType, 1044 bool SuppressUserConversions, 1045 bool AllowExplicit, 1046 bool InOverloadResolution, 1047 bool CStyle, 1048 bool AllowObjCWritebackConversion) { 1049 ImplicitConversionSequence ICS; 1050 1051 if (SuppressUserConversions) { 1052 // We're not in the case above, so there is no conversion that 1053 // we can perform. 1054 ICS.setBad(BadConversionSequence::no_conversion, From, ToType); 1055 return ICS; 1056 } 1057 1058 // Attempt user-defined conversion. 1059 OverloadCandidateSet Conversions(From->getExprLoc()); 1060 OverloadingResult UserDefResult 1061 = IsUserDefinedConversion(S, From, ToType, ICS.UserDefined, Conversions, 1062 AllowExplicit); 1063 1064 if (UserDefResult == OR_Success) { 1065 ICS.setUserDefined(); 1066 // C++ [over.ics.user]p4: 1067 // A conversion of an expression of class type to the same class 1068 // type is given Exact Match rank, and a conversion of an 1069 // expression of class type to a base class of that type is 1070 // given Conversion rank, in spite of the fact that a copy 1071 // constructor (i.e., a user-defined conversion function) is 1072 // called for those cases. 1073 if (CXXConstructorDecl *Constructor 1074 = dyn_cast<CXXConstructorDecl>(ICS.UserDefined.ConversionFunction)) { 1075 QualType FromCanon 1076 = S.Context.getCanonicalType(From->getType().getUnqualifiedType()); 1077 QualType ToCanon 1078 = S.Context.getCanonicalType(ToType).getUnqualifiedType(); 1079 if (Constructor->isCopyConstructor() && 1080 (FromCanon == ToCanon || S.IsDerivedFrom(FromCanon, ToCanon))) { 1081 // Turn this into a "standard" conversion sequence, so that it 1082 // gets ranked with standard conversion sequences. 1083 ICS.setStandard(); 1084 ICS.Standard.setAsIdentityConversion(); 1085 ICS.Standard.setFromType(From->getType()); 1086 ICS.Standard.setAllToTypes(ToType); 1087 ICS.Standard.CopyConstructor = Constructor; 1088 if (ToCanon != FromCanon) 1089 ICS.Standard.Second = ICK_Derived_To_Base; 1090 } 1091 } 1092 1093 // C++ [over.best.ics]p4: 1094 // However, when considering the argument of a user-defined 1095 // conversion function that is a candidate by 13.3.1.3 when 1096 // invoked for the copying of the temporary in the second step 1097 // of a class copy-initialization, or by 13.3.1.4, 13.3.1.5, or 1098 // 13.3.1.6 in all cases, only standard conversion sequences and 1099 // ellipsis conversion sequences are allowed. 1100 if (SuppressUserConversions && ICS.isUserDefined()) { 1101 ICS.setBad(BadConversionSequence::suppressed_user, From, ToType); 1102 } 1103 } else if (UserDefResult == OR_Ambiguous && !SuppressUserConversions) { 1104 ICS.setAmbiguous(); 1105 ICS.Ambiguous.setFromType(From->getType()); 1106 ICS.Ambiguous.setToType(ToType); 1107 for (OverloadCandidateSet::iterator Cand = Conversions.begin(); 1108 Cand != Conversions.end(); ++Cand) 1109 if (Cand->Viable) 1110 ICS.Ambiguous.addConversion(Cand->Function); 1111 } else { 1112 ICS.setBad(BadConversionSequence::no_conversion, From, ToType); 1113 } 1114 1115 return ICS; 1116} 1117 1118/// TryImplicitConversion - Attempt to perform an implicit conversion 1119/// from the given expression (Expr) to the given type (ToType). This 1120/// function returns an implicit conversion sequence that can be used 1121/// to perform the initialization. Given 1122/// 1123/// void f(float f); 1124/// void g(int i) { f(i); } 1125/// 1126/// this routine would produce an implicit conversion sequence to 1127/// describe the initialization of f from i, which will be a standard 1128/// conversion sequence containing an lvalue-to-rvalue conversion (C++ 1129/// 4.1) followed by a floating-integral conversion (C++ 4.9). 1130// 1131/// Note that this routine only determines how the conversion can be 1132/// performed; it does not actually perform the conversion. As such, 1133/// it will not produce any diagnostics if no conversion is available, 1134/// but will instead return an implicit conversion sequence of kind 1135/// "BadConversion". 1136/// 1137/// If @p SuppressUserConversions, then user-defined conversions are 1138/// not permitted. 1139/// If @p AllowExplicit, then explicit user-defined conversions are 1140/// permitted. 1141/// 1142/// \param AllowObjCWritebackConversion Whether we allow the Objective-C 1143/// writeback conversion, which allows __autoreleasing id* parameters to 1144/// be initialized with __strong id* or __weak id* arguments. 1145static ImplicitConversionSequence 1146TryImplicitConversion(Sema &S, Expr *From, QualType ToType, 1147 bool SuppressUserConversions, 1148 bool AllowExplicit, 1149 bool InOverloadResolution, 1150 bool CStyle, 1151 bool AllowObjCWritebackConversion) { 1152 ImplicitConversionSequence ICS; 1153 if (IsStandardConversion(S, From, ToType, InOverloadResolution, 1154 ICS.Standard, CStyle, AllowObjCWritebackConversion)){ 1155 ICS.setStandard(); 1156 return ICS; 1157 } 1158 1159 if (!S.getLangOpts().CPlusPlus) { 1160 ICS.setBad(BadConversionSequence::no_conversion, From, ToType); 1161 return ICS; 1162 } 1163 1164 // C++ [over.ics.user]p4: 1165 // A conversion of an expression of class type to the same class 1166 // type is given Exact Match rank, and a conversion of an 1167 // expression of class type to a base class of that type is 1168 // given Conversion rank, in spite of the fact that a copy/move 1169 // constructor (i.e., a user-defined conversion function) is 1170 // called for those cases. 1171 QualType FromType = From->getType(); 1172 if (ToType->getAs<RecordType>() && FromType->getAs<RecordType>() && 1173 (S.Context.hasSameUnqualifiedType(FromType, ToType) || 1174 S.IsDerivedFrom(FromType, ToType))) { 1175 ICS.setStandard(); 1176 ICS.Standard.setAsIdentityConversion(); 1177 ICS.Standard.setFromType(FromType); 1178 ICS.Standard.setAllToTypes(ToType); 1179 1180 // We don't actually check at this point whether there is a valid 1181 // copy/move constructor, since overloading just assumes that it 1182 // exists. When we actually perform initialization, we'll find the 1183 // appropriate constructor to copy the returned object, if needed. 1184 ICS.Standard.CopyConstructor = 0; 1185 1186 // Determine whether this is considered a derived-to-base conversion. 1187 if (!S.Context.hasSameUnqualifiedType(FromType, ToType)) 1188 ICS.Standard.Second = ICK_Derived_To_Base; 1189 1190 return ICS; 1191 } 1192 1193 return TryUserDefinedConversion(S, From, ToType, SuppressUserConversions, 1194 AllowExplicit, InOverloadResolution, CStyle, 1195 AllowObjCWritebackConversion); 1196} 1197 1198ImplicitConversionSequence 1199Sema::TryImplicitConversion(Expr *From, QualType ToType, 1200 bool SuppressUserConversions, 1201 bool AllowExplicit, 1202 bool InOverloadResolution, 1203 bool CStyle, 1204 bool AllowObjCWritebackConversion) { 1205 return clang::TryImplicitConversion(*this, From, ToType, 1206 SuppressUserConversions, AllowExplicit, 1207 InOverloadResolution, CStyle, 1208 AllowObjCWritebackConversion); 1209} 1210 1211/// PerformImplicitConversion - Perform an implicit conversion of the 1212/// expression From to the type ToType. Returns the 1213/// converted expression. Flavor is the kind of conversion we're 1214/// performing, used in the error message. If @p AllowExplicit, 1215/// explicit user-defined conversions are permitted. 1216ExprResult 1217Sema::PerformImplicitConversion(Expr *From, QualType ToType, 1218 AssignmentAction Action, bool AllowExplicit) { 1219 ImplicitConversionSequence ICS; 1220 return PerformImplicitConversion(From, ToType, Action, AllowExplicit, ICS); 1221} 1222 1223ExprResult 1224Sema::PerformImplicitConversion(Expr *From, QualType ToType, 1225 AssignmentAction Action, bool AllowExplicit, 1226 ImplicitConversionSequence& ICS) { 1227 if (checkPlaceholderForOverload(*this, From)) 1228 return ExprError(); 1229 1230 // Objective-C ARC: Determine whether we will allow the writeback conversion. 1231 bool AllowObjCWritebackConversion 1232 = getLangOpts().ObjCAutoRefCount && 1233 (Action == AA_Passing || Action == AA_Sending); 1234 1235 ICS = clang::TryImplicitConversion(*this, From, ToType, 1236 /*SuppressUserConversions=*/false, 1237 AllowExplicit, 1238 /*InOverloadResolution=*/false, 1239 /*CStyle=*/false, 1240 AllowObjCWritebackConversion); 1241 return PerformImplicitConversion(From, ToType, ICS, Action); 1242} 1243 1244/// \brief Determine whether the conversion from FromType to ToType is a valid 1245/// conversion that strips "noreturn" off the nested function type. 1246bool Sema::IsNoReturnConversion(QualType FromType, QualType ToType, 1247 QualType &ResultTy) { 1248 if (Context.hasSameUnqualifiedType(FromType, ToType)) 1249 return false; 1250 1251 // Permit the conversion F(t __attribute__((noreturn))) -> F(t) 1252 // where F adds one of the following at most once: 1253 // - a pointer 1254 // - a member pointer 1255 // - a block pointer 1256 CanQualType CanTo = Context.getCanonicalType(ToType); 1257 CanQualType CanFrom = Context.getCanonicalType(FromType); 1258 Type::TypeClass TyClass = CanTo->getTypeClass(); 1259 if (TyClass != CanFrom->getTypeClass()) return false; 1260 if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto) { 1261 if (TyClass == Type::Pointer) { 1262 CanTo = CanTo.getAs<PointerType>()->getPointeeType(); 1263 CanFrom = CanFrom.getAs<PointerType>()->getPointeeType(); 1264 } else if (TyClass == Type::BlockPointer) { 1265 CanTo = CanTo.getAs<BlockPointerType>()->getPointeeType(); 1266 CanFrom = CanFrom.getAs<BlockPointerType>()->getPointeeType(); 1267 } else if (TyClass == Type::MemberPointer) { 1268 CanTo = CanTo.getAs<MemberPointerType>()->getPointeeType(); 1269 CanFrom = CanFrom.getAs<MemberPointerType>()->getPointeeType(); 1270 } else { 1271 return false; 1272 } 1273 1274 TyClass = CanTo->getTypeClass(); 1275 if (TyClass != CanFrom->getTypeClass()) return false; 1276 if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto) 1277 return false; 1278 } 1279 1280 const FunctionType *FromFn = cast<FunctionType>(CanFrom); 1281 FunctionType::ExtInfo EInfo = FromFn->getExtInfo(); 1282 if (!EInfo.getNoReturn()) return false; 1283 1284 FromFn = Context.adjustFunctionType(FromFn, EInfo.withNoReturn(false)); 1285 assert(QualType(FromFn, 0).isCanonical()); 1286 if (QualType(FromFn, 0) != CanTo) return false; 1287 1288 ResultTy = ToType; 1289 return true; 1290} 1291 1292/// \brief Determine whether the conversion from FromType to ToType is a valid 1293/// vector conversion. 1294/// 1295/// \param ICK Will be set to the vector conversion kind, if this is a vector 1296/// conversion. 1297static bool IsVectorConversion(ASTContext &Context, QualType FromType, 1298 QualType ToType, ImplicitConversionKind &ICK) { 1299 // We need at least one of these types to be a vector type to have a vector 1300 // conversion. 1301 if (!ToType->isVectorType() && !FromType->isVectorType()) 1302 return false; 1303 1304 // Identical types require no conversions. 1305 if (Context.hasSameUnqualifiedType(FromType, ToType)) 1306 return false; 1307 1308 // There are no conversions between extended vector types, only identity. 1309 if (ToType->isExtVectorType()) { 1310 // There are no conversions between extended vector types other than the 1311 // identity conversion. 1312 if (FromType->isExtVectorType()) 1313 return false; 1314 1315 // Vector splat from any arithmetic type to a vector. 1316 if (FromType->isArithmeticType()) { 1317 ICK = ICK_Vector_Splat; 1318 return true; 1319 } 1320 } 1321 1322 // We can perform the conversion between vector types in the following cases: 1323 // 1)vector types are equivalent AltiVec and GCC vector types 1324 // 2)lax vector conversions are permitted and the vector types are of the 1325 // same size 1326 if (ToType->isVectorType() && FromType->isVectorType()) { 1327 if (Context.areCompatibleVectorTypes(FromType, ToType) || 1328 (Context.getLangOpts().LaxVectorConversions && 1329 (Context.getTypeSize(FromType) == Context.getTypeSize(ToType)))) { 1330 ICK = ICK_Vector_Conversion; 1331 return true; 1332 } 1333 } 1334 1335 return false; 1336} 1337 1338static bool tryAtomicConversion(Sema &S, Expr *From, QualType ToType, 1339 bool InOverloadResolution, 1340 StandardConversionSequence &SCS, 1341 bool CStyle); 1342 1343/// IsStandardConversion - Determines whether there is a standard 1344/// conversion sequence (C++ [conv], C++ [over.ics.scs]) from the 1345/// expression From to the type ToType. Standard conversion sequences 1346/// only consider non-class types; for conversions that involve class 1347/// types, use TryImplicitConversion. If a conversion exists, SCS will 1348/// contain the standard conversion sequence required to perform this 1349/// conversion and this routine will return true. Otherwise, this 1350/// routine will return false and the value of SCS is unspecified. 1351static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType, 1352 bool InOverloadResolution, 1353 StandardConversionSequence &SCS, 1354 bool CStyle, 1355 bool AllowObjCWritebackConversion) { 1356 QualType FromType = From->getType(); 1357 1358 // Standard conversions (C++ [conv]) 1359 SCS.setAsIdentityConversion(); 1360 SCS.DeprecatedStringLiteralToCharPtr = false; 1361 SCS.IncompatibleObjC = false; 1362 SCS.setFromType(FromType); 1363 SCS.CopyConstructor = 0; 1364 1365 // There are no standard conversions for class types in C++, so 1366 // abort early. When overloading in C, however, we do permit 1367 if (FromType->isRecordType() || ToType->isRecordType()) { 1368 if (S.getLangOpts().CPlusPlus) 1369 return false; 1370 1371 // When we're overloading in C, we allow, as standard conversions, 1372 } 1373 1374 // The first conversion can be an lvalue-to-rvalue conversion, 1375 // array-to-pointer conversion, or function-to-pointer conversion 1376 // (C++ 4p1). 1377 1378 if (FromType == S.Context.OverloadTy) { 1379 DeclAccessPair AccessPair; 1380 if (FunctionDecl *Fn 1381 = S.ResolveAddressOfOverloadedFunction(From, ToType, false, 1382 AccessPair)) { 1383 // We were able to resolve the address of the overloaded function, 1384 // so we can convert to the type of that function. 1385 FromType = Fn->getType(); 1386 1387 // we can sometimes resolve &foo<int> regardless of ToType, so check 1388 // if the type matches (identity) or we are converting to bool 1389 if (!S.Context.hasSameUnqualifiedType( 1390 S.ExtractUnqualifiedFunctionType(ToType), FromType)) { 1391 QualType resultTy; 1392 // if the function type matches except for [[noreturn]], it's ok 1393 if (!S.IsNoReturnConversion(FromType, 1394 S.ExtractUnqualifiedFunctionType(ToType), resultTy)) 1395 // otherwise, only a boolean conversion is standard 1396 if (!ToType->isBooleanType()) 1397 return false; 1398 } 1399 1400 // Check if the "from" expression is taking the address of an overloaded 1401 // function and recompute the FromType accordingly. Take advantage of the 1402 // fact that non-static member functions *must* have such an address-of 1403 // expression. 1404 CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn); 1405 if (Method && !Method->isStatic()) { 1406 assert(isa<UnaryOperator>(From->IgnoreParens()) && 1407 "Non-unary operator on non-static member address"); 1408 assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode() 1409 == UO_AddrOf && 1410 "Non-address-of operator on non-static member address"); 1411 const Type *ClassType 1412 = S.Context.getTypeDeclType(Method->getParent()).getTypePtr(); 1413 FromType = S.Context.getMemberPointerType(FromType, ClassType); 1414 } else if (isa<UnaryOperator>(From->IgnoreParens())) { 1415 assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode() == 1416 UO_AddrOf && 1417 "Non-address-of operator for overloaded function expression"); 1418 FromType = S.Context.getPointerType(FromType); 1419 } 1420 1421 // Check that we've computed the proper type after overload resolution. 1422 assert(S.Context.hasSameType( 1423 FromType, 1424 S.FixOverloadedFunctionReference(From, AccessPair, Fn)->getType())); 1425 } else { 1426 return false; 1427 } 1428 } 1429 // Lvalue-to-rvalue conversion (C++11 4.1): 1430 // A glvalue (3.10) of a non-function, non-array type T can 1431 // be converted to a prvalue. 1432 bool argIsLValue = From->isGLValue(); 1433 if (argIsLValue && 1434 !FromType->isFunctionType() && !FromType->isArrayType() && 1435 S.Context.getCanonicalType(FromType) != S.Context.OverloadTy) { 1436 SCS.First = ICK_Lvalue_To_Rvalue; 1437 1438 // C11 6.3.2.1p2: 1439 // ... if the lvalue has atomic type, the value has the non-atomic version 1440 // of the type of the lvalue ... 1441 if (const AtomicType *Atomic = FromType->getAs<AtomicType>()) 1442 FromType = Atomic->getValueType(); 1443 1444 // If T is a non-class type, the type of the rvalue is the 1445 // cv-unqualified version of T. Otherwise, the type of the rvalue 1446 // is T (C++ 4.1p1). C++ can't get here with class types; in C, we 1447 // just strip the qualifiers because they don't matter. 1448 FromType = FromType.getUnqualifiedType(); 1449 } else if (FromType->isArrayType()) { 1450 // Array-to-pointer conversion (C++ 4.2) 1451 SCS.First = ICK_Array_To_Pointer; 1452 1453 // An lvalue or rvalue of type "array of N T" or "array of unknown 1454 // bound of T" can be converted to an rvalue of type "pointer to 1455 // T" (C++ 4.2p1). 1456 FromType = S.Context.getArrayDecayedType(FromType); 1457 1458 if (S.IsStringLiteralToNonConstPointerConversion(From, ToType)) { 1459 // This conversion is deprecated. (C++ D.4). 1460 SCS.DeprecatedStringLiteralToCharPtr = true; 1461 1462 // For the purpose of ranking in overload resolution 1463 // (13.3.3.1.1), this conversion is considered an 1464 // array-to-pointer conversion followed by a qualification 1465 // conversion (4.4). (C++ 4.2p2) 1466 SCS.Second = ICK_Identity; 1467 SCS.Third = ICK_Qualification; 1468 SCS.QualificationIncludesObjCLifetime = false; 1469 SCS.setAllToTypes(FromType); 1470 return true; 1471 } 1472 } else if (FromType->isFunctionType() && argIsLValue) { 1473 // Function-to-pointer conversion (C++ 4.3). 1474 SCS.First = ICK_Function_To_Pointer; 1475 1476 // An lvalue of function type T can be converted to an rvalue of 1477 // type "pointer to T." The result is a pointer to the 1478 // function. (C++ 4.3p1). 1479 FromType = S.Context.getPointerType(FromType); 1480 } else { 1481 // We don't require any conversions for the first step. 1482 SCS.First = ICK_Identity; 1483 } 1484 SCS.setToType(0, FromType); 1485 1486 // The second conversion can be an integral promotion, floating 1487 // point promotion, integral conversion, floating point conversion, 1488 // floating-integral conversion, pointer conversion, 1489 // pointer-to-member conversion, or boolean conversion (C++ 4p1). 1490 // For overloading in C, this can also be a "compatible-type" 1491 // conversion. 1492 bool IncompatibleObjC = false; 1493 ImplicitConversionKind SecondICK = ICK_Identity; 1494 if (S.Context.hasSameUnqualifiedType(FromType, ToType)) { 1495 // The unqualified versions of the types are the same: there's no 1496 // conversion to do. 1497 SCS.Second = ICK_Identity; 1498 } else if (S.IsIntegralPromotion(From, FromType, ToType)) { 1499 // Integral promotion (C++ 4.5). 1500 SCS.Second = ICK_Integral_Promotion; 1501 FromType = ToType.getUnqualifiedType(); 1502 } else if (S.IsFloatingPointPromotion(FromType, ToType)) { 1503 // Floating point promotion (C++ 4.6). 1504 SCS.Second = ICK_Floating_Promotion; 1505 FromType = ToType.getUnqualifiedType(); 1506 } else if (S.IsComplexPromotion(FromType, ToType)) { 1507 // Complex promotion (Clang extension) 1508 SCS.Second = ICK_Complex_Promotion; 1509 FromType = ToType.getUnqualifiedType(); 1510 } else if (ToType->isBooleanType() && 1511 (FromType->isArithmeticType() || 1512 FromType->isAnyPointerType() || 1513 FromType->isBlockPointerType() || 1514 FromType->isMemberPointerType() || 1515 FromType->isNullPtrType())) { 1516 // Boolean conversions (C++ 4.12). 1517 SCS.Second = ICK_Boolean_Conversion; 1518 FromType = S.Context.BoolTy; 1519 } else if (FromType->isIntegralOrUnscopedEnumerationType() && 1520 ToType->isIntegralType(S.Context)) { 1521 // Integral conversions (C++ 4.7). 1522 SCS.Second = ICK_Integral_Conversion; 1523 FromType = ToType.getUnqualifiedType(); 1524 } else if (FromType->isAnyComplexType() && ToType->isComplexType()) { 1525 // Complex conversions (C99 6.3.1.6) 1526 SCS.Second = ICK_Complex_Conversion; 1527 FromType = ToType.getUnqualifiedType(); 1528 } else if ((FromType->isAnyComplexType() && ToType->isArithmeticType()) || 1529 (ToType->isAnyComplexType() && FromType->isArithmeticType())) { 1530 // Complex-real conversions (C99 6.3.1.7) 1531 SCS.Second = ICK_Complex_Real; 1532 FromType = ToType.getUnqualifiedType(); 1533 } else if (FromType->isRealFloatingType() && ToType->isRealFloatingType()) { 1534 // Floating point conversions (C++ 4.8). 1535 SCS.Second = ICK_Floating_Conversion; 1536 FromType = ToType.getUnqualifiedType(); 1537 } else if ((FromType->isRealFloatingType() && 1538 ToType->isIntegralType(S.Context)) || 1539 (FromType->isIntegralOrUnscopedEnumerationType() && 1540 ToType->isRealFloatingType())) { 1541 // Floating-integral conversions (C++ 4.9). 1542 SCS.Second = ICK_Floating_Integral; 1543 FromType = ToType.getUnqualifiedType(); 1544 } else if (S.IsBlockPointerConversion(FromType, ToType, FromType)) { 1545 SCS.Second = ICK_Block_Pointer_Conversion; 1546 } else if (AllowObjCWritebackConversion && 1547 S.isObjCWritebackConversion(FromType, ToType, FromType)) { 1548 SCS.Second = ICK_Writeback_Conversion; 1549 } else if (S.IsPointerConversion(From, FromType, ToType, InOverloadResolution, 1550 FromType, IncompatibleObjC)) { 1551 // Pointer conversions (C++ 4.10). 1552 SCS.Second = ICK_Pointer_Conversion; 1553 SCS.IncompatibleObjC = IncompatibleObjC; 1554 FromType = FromType.getUnqualifiedType(); 1555 } else if (S.IsMemberPointerConversion(From, FromType, ToType, 1556 InOverloadResolution, FromType)) { 1557 // Pointer to member conversions (4.11). 1558 SCS.Second = ICK_Pointer_Member; 1559 } else if (IsVectorConversion(S.Context, FromType, ToType, SecondICK)) { 1560 SCS.Second = SecondICK; 1561 FromType = ToType.getUnqualifiedType(); 1562 } else if (!S.getLangOpts().CPlusPlus && 1563 S.Context.typesAreCompatible(ToType, FromType)) { 1564 // Compatible conversions (Clang extension for C function overloading) 1565 SCS.Second = ICK_Compatible_Conversion; 1566 FromType = ToType.getUnqualifiedType(); 1567 } else if (S.IsNoReturnConversion(FromType, ToType, FromType)) { 1568 // Treat a conversion that strips "noreturn" as an identity conversion. 1569 SCS.Second = ICK_NoReturn_Adjustment; 1570 } else if (IsTransparentUnionStandardConversion(S, From, ToType, 1571 InOverloadResolution, 1572 SCS, CStyle)) { 1573 SCS.Second = ICK_TransparentUnionConversion; 1574 FromType = ToType; 1575 } else if (tryAtomicConversion(S, From, ToType, InOverloadResolution, SCS, 1576 CStyle)) { 1577 // tryAtomicConversion has updated the standard conversion sequence 1578 // appropriately. 1579 return true; 1580 } else { 1581 // No second conversion required. 1582 SCS.Second = ICK_Identity; 1583 } 1584 SCS.setToType(1, FromType); 1585 1586 QualType CanonFrom; 1587 QualType CanonTo; 1588 // The third conversion can be a qualification conversion (C++ 4p1). 1589 bool ObjCLifetimeConversion; 1590 if (S.IsQualificationConversion(FromType, ToType, CStyle, 1591 ObjCLifetimeConversion)) { 1592 SCS.Third = ICK_Qualification; 1593 SCS.QualificationIncludesObjCLifetime = ObjCLifetimeConversion; 1594 FromType = ToType; 1595 CanonFrom = S.Context.getCanonicalType(FromType); 1596 CanonTo = S.Context.getCanonicalType(ToType); 1597 } else { 1598 // No conversion required 1599 SCS.Third = ICK_Identity; 1600 1601 // C++ [over.best.ics]p6: 1602 // [...] Any difference in top-level cv-qualification is 1603 // subsumed by the initialization itself and does not constitute 1604 // a conversion. [...] 1605 CanonFrom = S.Context.getCanonicalType(FromType); 1606 CanonTo = S.Context.getCanonicalType(ToType); 1607 if (CanonFrom.getLocalUnqualifiedType() 1608 == CanonTo.getLocalUnqualifiedType() && 1609 (CanonFrom.getLocalCVRQualifiers() != CanonTo.getLocalCVRQualifiers() 1610 || CanonFrom.getObjCGCAttr() != CanonTo.getObjCGCAttr() 1611 || CanonFrom.getObjCLifetime() != CanonTo.getObjCLifetime())) { 1612 FromType = ToType; 1613 CanonFrom = CanonTo; 1614 } 1615 } 1616 SCS.setToType(2, FromType); 1617 1618 // If we have not converted the argument type to the parameter type, 1619 // this is a bad conversion sequence. 1620 if (CanonFrom != CanonTo) 1621 return false; 1622 1623 return true; 1624} 1625 1626static bool 1627IsTransparentUnionStandardConversion(Sema &S, Expr* From, 1628 QualType &ToType, 1629 bool InOverloadResolution, 1630 StandardConversionSequence &SCS, 1631 bool CStyle) { 1632 1633 const RecordType *UT = ToType->getAsUnionType(); 1634 if (!UT || !UT->getDecl()->hasAttr<TransparentUnionAttr>()) 1635 return false; 1636 // The field to initialize within the transparent union. 1637 RecordDecl *UD = UT->getDecl(); 1638 // It's compatible if the expression matches any of the fields. 1639 for (RecordDecl::field_iterator it = UD->field_begin(), 1640 itend = UD->field_end(); 1641 it != itend; ++it) { 1642 if (IsStandardConversion(S, From, it->getType(), InOverloadResolution, SCS, 1643 CStyle, /*ObjCWritebackConversion=*/false)) { 1644 ToType = it->getType(); 1645 return true; 1646 } 1647 } 1648 return false; 1649} 1650 1651/// IsIntegralPromotion - Determines whether the conversion from the 1652/// expression From (whose potentially-adjusted type is FromType) to 1653/// ToType is an integral promotion (C++ 4.5). If so, returns true and 1654/// sets PromotedType to the promoted type. 1655bool Sema::IsIntegralPromotion(Expr *From, QualType FromType, QualType ToType) { 1656 const BuiltinType *To = ToType->getAs<BuiltinType>(); 1657 // All integers are built-in. 1658 if (!To) { 1659 return false; 1660 } 1661 1662 // An rvalue of type char, signed char, unsigned char, short int, or 1663 // unsigned short int can be converted to an rvalue of type int if 1664 // int can represent all the values of the source type; otherwise, 1665 // the source rvalue can be converted to an rvalue of type unsigned 1666 // int (C++ 4.5p1). 1667 if (FromType->isPromotableIntegerType() && !FromType->isBooleanType() && 1668 !FromType->isEnumeralType()) { 1669 if (// We can promote any signed, promotable integer type to an int 1670 (FromType->isSignedIntegerType() || 1671 // We can promote any unsigned integer type whose size is 1672 // less than int to an int. 1673 (!FromType->isSignedIntegerType() && 1674 Context.getTypeSize(FromType) < Context.getTypeSize(ToType)))) { 1675 return To->getKind() == BuiltinType::Int; 1676 } 1677 1678 return To->getKind() == BuiltinType::UInt; 1679 } 1680 1681 // C++11 [conv.prom]p3: 1682 // A prvalue of an unscoped enumeration type whose underlying type is not 1683 // fixed (7.2) can be converted to an rvalue a prvalue of the first of the 1684 // following types that can represent all the values of the enumeration 1685 // (i.e., the values in the range bmin to bmax as described in 7.2): int, 1686 // unsigned int, long int, unsigned long int, long long int, or unsigned 1687 // long long int. If none of the types in that list can represent all the 1688 // values of the enumeration, an rvalue a prvalue of an unscoped enumeration 1689 // type can be converted to an rvalue a prvalue of the extended integer type 1690 // with lowest integer conversion rank (4.13) greater than the rank of long 1691 // long in which all the values of the enumeration can be represented. If 1692 // there are two such extended types, the signed one is chosen. 1693 // C++11 [conv.prom]p4: 1694 // A prvalue of an unscoped enumeration type whose underlying type is fixed 1695 // can be converted to a prvalue of its underlying type. Moreover, if 1696 // integral promotion can be applied to its underlying type, a prvalue of an 1697 // unscoped enumeration type whose underlying type is fixed can also be 1698 // converted to a prvalue of the promoted underlying type. 1699 if (const EnumType *FromEnumType = FromType->getAs<EnumType>()) { 1700 // C++0x 7.2p9: Note that this implicit enum to int conversion is not 1701 // provided for a scoped enumeration. 1702 if (FromEnumType->getDecl()->isScoped()) 1703 return false; 1704 1705 // We can perform an integral promotion to the underlying type of the enum, 1706 // even if that's not the promoted type. 1707 if (FromEnumType->getDecl()->isFixed()) { 1708 QualType Underlying = FromEnumType->getDecl()->getIntegerType(); 1709 return Context.hasSameUnqualifiedType(Underlying, ToType) || 1710 IsIntegralPromotion(From, Underlying, ToType); 1711 } 1712 1713 // We have already pre-calculated the promotion type, so this is trivial. 1714 if (ToType->isIntegerType() && 1715 !RequireCompleteType(From->getLocStart(), FromType, 0)) 1716 return Context.hasSameUnqualifiedType(ToType, 1717 FromEnumType->getDecl()->getPromotionType()); 1718 } 1719 1720 // C++0x [conv.prom]p2: 1721 // A prvalue of type char16_t, char32_t, or wchar_t (3.9.1) can be converted 1722 // to an rvalue a prvalue of the first of the following types that can 1723 // represent all the values of its underlying type: int, unsigned int, 1724 // long int, unsigned long int, long long int, or unsigned long long int. 1725 // If none of the types in that list can represent all the values of its 1726 // underlying type, an rvalue a prvalue of type char16_t, char32_t, 1727 // or wchar_t can be converted to an rvalue a prvalue of its underlying 1728 // type. 1729 if (FromType->isAnyCharacterType() && !FromType->isCharType() && 1730 ToType->isIntegerType()) { 1731 // Determine whether the type we're converting from is signed or 1732 // unsigned. 1733 bool FromIsSigned = FromType->isSignedIntegerType(); 1734 uint64_t FromSize = Context.getTypeSize(FromType); 1735 1736 // The types we'll try to promote to, in the appropriate 1737 // order. Try each of these types. 1738 QualType PromoteTypes[6] = { 1739 Context.IntTy, Context.UnsignedIntTy, 1740 Context.LongTy, Context.UnsignedLongTy , 1741 Context.LongLongTy, Context.UnsignedLongLongTy 1742 }; 1743 for (int Idx = 0; Idx < 6; ++Idx) { 1744 uint64_t ToSize = Context.getTypeSize(PromoteTypes[Idx]); 1745 if (FromSize < ToSize || 1746 (FromSize == ToSize && 1747 FromIsSigned == PromoteTypes[Idx]->isSignedIntegerType())) { 1748 // We found the type that we can promote to. If this is the 1749 // type we wanted, we have a promotion. Otherwise, no 1750 // promotion. 1751 return Context.hasSameUnqualifiedType(ToType, PromoteTypes[Idx]); 1752 } 1753 } 1754 } 1755 1756 // An rvalue for an integral bit-field (9.6) can be converted to an 1757 // rvalue of type int if int can represent all the values of the 1758 // bit-field; otherwise, it can be converted to unsigned int if 1759 // unsigned int can represent all the values of the bit-field. If 1760 // the bit-field is larger yet, no integral promotion applies to 1761 // it. If the bit-field has an enumerated type, it is treated as any 1762 // other value of that type for promotion purposes (C++ 4.5p3). 1763 // FIXME: We should delay checking of bit-fields until we actually perform the 1764 // conversion. 1765 using llvm::APSInt; 1766 if (From) 1767 if (FieldDecl *MemberDecl = From->getBitField()) { 1768 APSInt BitWidth; 1769 if (FromType->isIntegralType(Context) && 1770 MemberDecl->getBitWidth()->isIntegerConstantExpr(BitWidth, Context)) { 1771 APSInt ToSize(BitWidth.getBitWidth(), BitWidth.isUnsigned()); 1772 ToSize = Context.getTypeSize(ToType); 1773 1774 // Are we promoting to an int from a bitfield that fits in an int? 1775 if (BitWidth < ToSize || 1776 (FromType->isSignedIntegerType() && BitWidth <= ToSize)) { 1777 return To->getKind() == BuiltinType::Int; 1778 } 1779 1780 // Are we promoting to an unsigned int from an unsigned bitfield 1781 // that fits into an unsigned int? 1782 if (FromType->isUnsignedIntegerType() && BitWidth <= ToSize) { 1783 return To->getKind() == BuiltinType::UInt; 1784 } 1785 1786 return false; 1787 } 1788 } 1789 1790 // An rvalue of type bool can be converted to an rvalue of type int, 1791 // with false becoming zero and true becoming one (C++ 4.5p4). 1792 if (FromType->isBooleanType() && To->getKind() == BuiltinType::Int) { 1793 return true; 1794 } 1795 1796 return false; 1797} 1798 1799/// IsFloatingPointPromotion - Determines whether the conversion from 1800/// FromType to ToType is a floating point promotion (C++ 4.6). If so, 1801/// returns true and sets PromotedType to the promoted type. 1802bool Sema::IsFloatingPointPromotion(QualType FromType, QualType ToType) { 1803 if (const BuiltinType *FromBuiltin = FromType->getAs<BuiltinType>()) 1804 if (const BuiltinType *ToBuiltin = ToType->getAs<BuiltinType>()) { 1805 /// An rvalue of type float can be converted to an rvalue of type 1806 /// double. (C++ 4.6p1). 1807 if (FromBuiltin->getKind() == BuiltinType::Float && 1808 ToBuiltin->getKind() == BuiltinType::Double) 1809 return true; 1810 1811 // C99 6.3.1.5p1: 1812 // When a float is promoted to double or long double, or a 1813 // double is promoted to long double [...]. 1814 if (!getLangOpts().CPlusPlus && 1815 (FromBuiltin->getKind() == BuiltinType::Float || 1816 FromBuiltin->getKind() == BuiltinType::Double) && 1817 (ToBuiltin->getKind() == BuiltinType::LongDouble)) 1818 return true; 1819 1820 // Half can be promoted to float. 1821 if (FromBuiltin->getKind() == BuiltinType::Half && 1822 ToBuiltin->getKind() == BuiltinType::Float) 1823 return true; 1824 } 1825 1826 return false; 1827} 1828 1829/// \brief Determine if a conversion is a complex promotion. 1830/// 1831/// A complex promotion is defined as a complex -> complex conversion 1832/// where the conversion between the underlying real types is a 1833/// floating-point or integral promotion. 1834bool Sema::IsComplexPromotion(QualType FromType, QualType ToType) { 1835 const ComplexType *FromComplex = FromType->getAs<ComplexType>(); 1836 if (!FromComplex) 1837 return false; 1838 1839 const ComplexType *ToComplex = ToType->getAs<ComplexType>(); 1840 if (!ToComplex) 1841 return false; 1842 1843 return IsFloatingPointPromotion(FromComplex->getElementType(), 1844 ToComplex->getElementType()) || 1845 IsIntegralPromotion(0, FromComplex->getElementType(), 1846 ToComplex->getElementType()); 1847} 1848 1849/// BuildSimilarlyQualifiedPointerType - In a pointer conversion from 1850/// the pointer type FromPtr to a pointer to type ToPointee, with the 1851/// same type qualifiers as FromPtr has on its pointee type. ToType, 1852/// if non-empty, will be a pointer to ToType that may or may not have 1853/// the right set of qualifiers on its pointee. 1854/// 1855static QualType 1856BuildSimilarlyQualifiedPointerType(const Type *FromPtr, 1857 QualType ToPointee, QualType ToType, 1858 ASTContext &Context, 1859 bool StripObjCLifetime = false) { 1860 assert((FromPtr->getTypeClass() == Type::Pointer || 1861 FromPtr->getTypeClass() == Type::ObjCObjectPointer) && 1862 "Invalid similarly-qualified pointer type"); 1863 1864 /// Conversions to 'id' subsume cv-qualifier conversions. 1865 if (ToType->isObjCIdType() || ToType->isObjCQualifiedIdType()) 1866 return ToType.getUnqualifiedType(); 1867 1868 QualType CanonFromPointee 1869 = Context.getCanonicalType(FromPtr->getPointeeType()); 1870 QualType CanonToPointee = Context.getCanonicalType(ToPointee); 1871 Qualifiers Quals = CanonFromPointee.getQualifiers(); 1872 1873 if (StripObjCLifetime) 1874 Quals.removeObjCLifetime(); 1875 1876 // Exact qualifier match -> return the pointer type we're converting to. 1877 if (CanonToPointee.getLocalQualifiers() == Quals) { 1878 // ToType is exactly what we need. Return it. 1879 if (!ToType.isNull()) 1880 return ToType.getUnqualifiedType(); 1881 1882 // Build a pointer to ToPointee. It has the right qualifiers 1883 // already. 1884 if (isa<ObjCObjectPointerType>(ToType)) 1885 return Context.getObjCObjectPointerType(ToPointee); 1886 return Context.getPointerType(ToPointee); 1887 } 1888 1889 // Just build a canonical type that has the right qualifiers. 1890 QualType QualifiedCanonToPointee 1891 = Context.getQualifiedType(CanonToPointee.getLocalUnqualifiedType(), Quals); 1892 1893 if (isa<ObjCObjectPointerType>(ToType)) 1894 return Context.getObjCObjectPointerType(QualifiedCanonToPointee); 1895 return Context.getPointerType(QualifiedCanonToPointee); 1896} 1897 1898static bool isNullPointerConstantForConversion(Expr *Expr, 1899 bool InOverloadResolution, 1900 ASTContext &Context) { 1901 // Handle value-dependent integral null pointer constants correctly. 1902 // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#903 1903 if (Expr->isValueDependent() && !Expr->isTypeDependent() && 1904 Expr->getType()->isIntegerType() && !Expr->getType()->isEnumeralType()) 1905 return !InOverloadResolution; 1906 1907 return Expr->isNullPointerConstant(Context, 1908 InOverloadResolution? Expr::NPC_ValueDependentIsNotNull 1909 : Expr::NPC_ValueDependentIsNull); 1910} 1911 1912/// IsPointerConversion - Determines whether the conversion of the 1913/// expression From, which has the (possibly adjusted) type FromType, 1914/// can be converted to the type ToType via a pointer conversion (C++ 1915/// 4.10). If so, returns true and places the converted type (that 1916/// might differ from ToType in its cv-qualifiers at some level) into 1917/// ConvertedType. 1918/// 1919/// This routine also supports conversions to and from block pointers 1920/// and conversions with Objective-C's 'id', 'id<protocols...>', and 1921/// pointers to interfaces. FIXME: Once we've determined the 1922/// appropriate overloading rules for Objective-C, we may want to 1923/// split the Objective-C checks into a different routine; however, 1924/// GCC seems to consider all of these conversions to be pointer 1925/// conversions, so for now they live here. IncompatibleObjC will be 1926/// set if the conversion is an allowed Objective-C conversion that 1927/// should result in a warning. 1928bool Sema::IsPointerConversion(Expr *From, QualType FromType, QualType ToType, 1929 bool InOverloadResolution, 1930 QualType& ConvertedType, 1931 bool &IncompatibleObjC) { 1932 IncompatibleObjC = false; 1933 if (isObjCPointerConversion(FromType, ToType, ConvertedType, 1934 IncompatibleObjC)) 1935 return true; 1936 1937 // Conversion from a null pointer constant to any Objective-C pointer type. 1938 if (ToType->isObjCObjectPointerType() && 1939 isNullPointerConstantForConversion(From, InOverloadResolution, Context)) { 1940 ConvertedType = ToType; 1941 return true; 1942 } 1943 1944 // Blocks: Block pointers can be converted to void*. 1945 if (FromType->isBlockPointerType() && ToType->isPointerType() && 1946 ToType->getAs<PointerType>()->getPointeeType()->isVoidType()) { 1947 ConvertedType = ToType; 1948 return true; 1949 } 1950 // Blocks: A null pointer constant can be converted to a block 1951 // pointer type. 1952 if (ToType->isBlockPointerType() && 1953 isNullPointerConstantForConversion(From, InOverloadResolution, Context)) { 1954 ConvertedType = ToType; 1955 return true; 1956 } 1957 1958 // If the left-hand-side is nullptr_t, the right side can be a null 1959 // pointer constant. 1960 if (ToType->isNullPtrType() && 1961 isNullPointerConstantForConversion(From, InOverloadResolution, Context)) { 1962 ConvertedType = ToType; 1963 return true; 1964 } 1965 1966 const PointerType* ToTypePtr = ToType->getAs<PointerType>(); 1967 if (!ToTypePtr) 1968 return false; 1969 1970 // A null pointer constant can be converted to a pointer type (C++ 4.10p1). 1971 if (isNullPointerConstantForConversion(From, InOverloadResolution, Context)) { 1972 ConvertedType = ToType; 1973 return true; 1974 } 1975 1976 // Beyond this point, both types need to be pointers 1977 // , including objective-c pointers. 1978 QualType ToPointeeType = ToTypePtr->getPointeeType(); 1979 if (FromType->isObjCObjectPointerType() && ToPointeeType->isVoidType() && 1980 !getLangOpts().ObjCAutoRefCount) { 1981 ConvertedType = BuildSimilarlyQualifiedPointerType( 1982 FromType->getAs<ObjCObjectPointerType>(), 1983 ToPointeeType, 1984 ToType, Context); 1985 return true; 1986 } 1987 const PointerType *FromTypePtr = FromType->getAs<PointerType>(); 1988 if (!FromTypePtr) 1989 return false; 1990 1991 QualType FromPointeeType = FromTypePtr->getPointeeType(); 1992 1993 // If the unqualified pointee types are the same, this can't be a 1994 // pointer conversion, so don't do all of the work below. 1995 if (Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType)) 1996 return false; 1997 1998 // An rvalue of type "pointer to cv T," where T is an object type, 1999 // can be converted to an rvalue of type "pointer to cv void" (C++ 2000 // 4.10p2). 2001 if (FromPointeeType->isIncompleteOrObjectType() && 2002 ToPointeeType->isVoidType()) { 2003 ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr, 2004 ToPointeeType, 2005 ToType, Context, 2006 /*StripObjCLifetime=*/true); 2007 return true; 2008 } 2009 2010 // MSVC allows implicit function to void* type conversion. 2011 if (getLangOpts().MicrosoftExt && FromPointeeType->isFunctionType() && 2012 ToPointeeType->isVoidType()) { 2013 ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr, 2014 ToPointeeType, 2015 ToType, Context); 2016 return true; 2017 } 2018 2019 // When we're overloading in C, we allow a special kind of pointer 2020 // conversion for compatible-but-not-identical pointee types. 2021 if (!getLangOpts().CPlusPlus && 2022 Context.typesAreCompatible(FromPointeeType, ToPointeeType)) { 2023 ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr, 2024 ToPointeeType, 2025 ToType, Context); 2026 return true; 2027 } 2028 2029 // C++ [conv.ptr]p3: 2030 // 2031 // An rvalue of type "pointer to cv D," where D is a class type, 2032 // can be converted to an rvalue of type "pointer to cv B," where 2033 // B is a base class (clause 10) of D. If B is an inaccessible 2034 // (clause 11) or ambiguous (10.2) base class of D, a program that 2035 // necessitates this conversion is ill-formed. The result of the 2036 // conversion is a pointer to the base class sub-object of the 2037 // derived class object. The null pointer value is converted to 2038 // the null pointer value of the destination type. 2039 // 2040 // Note that we do not check for ambiguity or inaccessibility 2041 // here. That is handled by CheckPointerConversion. 2042 if (getLangOpts().CPlusPlus && 2043 FromPointeeType->isRecordType() && ToPointeeType->isRecordType() && 2044 !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType) && 2045 !RequireCompleteType(From->getLocStart(), FromPointeeType, 0) && 2046 IsDerivedFrom(FromPointeeType, ToPointeeType)) { 2047 ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr, 2048 ToPointeeType, 2049 ToType, Context); 2050 return true; 2051 } 2052 2053 if (FromPointeeType->isVectorType() && ToPointeeType->isVectorType() && 2054 Context.areCompatibleVectorTypes(FromPointeeType, ToPointeeType)) { 2055 ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr, 2056 ToPointeeType, 2057 ToType, Context); 2058 return true; 2059 } 2060 2061 return false; 2062} 2063 2064/// \brief Adopt the given qualifiers for the given type. 2065static QualType AdoptQualifiers(ASTContext &Context, QualType T, Qualifiers Qs){ 2066 Qualifiers TQs = T.getQualifiers(); 2067 2068 // Check whether qualifiers already match. 2069 if (TQs == Qs) 2070 return T; 2071 2072 if (Qs.compatiblyIncludes(TQs)) 2073 return Context.getQualifiedType(T, Qs); 2074 2075 return Context.getQualifiedType(T.getUnqualifiedType(), Qs); 2076} 2077 2078/// isObjCPointerConversion - Determines whether this is an 2079/// Objective-C pointer conversion. Subroutine of IsPointerConversion, 2080/// with the same arguments and return values. 2081bool Sema::isObjCPointerConversion(QualType FromType, QualType ToType, 2082 QualType& ConvertedType, 2083 bool &IncompatibleObjC) { 2084 if (!getLangOpts().ObjC1) 2085 return false; 2086 2087 // The set of qualifiers on the type we're converting from. 2088 Qualifiers FromQualifiers = FromType.getQualifiers(); 2089 2090 // First, we handle all conversions on ObjC object pointer types. 2091 const ObjCObjectPointerType* ToObjCPtr = 2092 ToType->getAs<ObjCObjectPointerType>(); 2093 const ObjCObjectPointerType *FromObjCPtr = 2094 FromType->getAs<ObjCObjectPointerType>(); 2095 2096 if (ToObjCPtr && FromObjCPtr) { 2097 // If the pointee types are the same (ignoring qualifications), 2098 // then this is not a pointer conversion. 2099 if (Context.hasSameUnqualifiedType(ToObjCPtr->getPointeeType(), 2100 FromObjCPtr->getPointeeType())) 2101 return false; 2102 2103 // Check for compatible 2104 // Objective C++: We're able to convert between "id" or "Class" and a 2105 // pointer to any interface (in both directions). 2106 if (ToObjCPtr->isObjCBuiltinType() && FromObjCPtr->isObjCBuiltinType()) { 2107 ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers); 2108 return true; 2109 } 2110 // Conversions with Objective-C's id<...>. 2111 if ((FromObjCPtr->isObjCQualifiedIdType() || 2112 ToObjCPtr->isObjCQualifiedIdType()) && 2113 Context.ObjCQualifiedIdTypesAreCompatible(ToType, FromType, 2114 /*compare=*/false)) { 2115 ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers); 2116 return true; 2117 } 2118 // Objective C++: We're able to convert from a pointer to an 2119 // interface to a pointer to a different interface. 2120 if (Context.canAssignObjCInterfaces(ToObjCPtr, FromObjCPtr)) { 2121 const ObjCInterfaceType* LHS = ToObjCPtr->getInterfaceType(); 2122 const ObjCInterfaceType* RHS = FromObjCPtr->getInterfaceType(); 2123 if (getLangOpts().CPlusPlus && LHS && RHS && 2124 !ToObjCPtr->getPointeeType().isAtLeastAsQualifiedAs( 2125 FromObjCPtr->getPointeeType())) 2126 return false; 2127 ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr, 2128 ToObjCPtr->getPointeeType(), 2129 ToType, Context); 2130 ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers); 2131 return true; 2132 } 2133 2134 if (Context.canAssignObjCInterfaces(FromObjCPtr, ToObjCPtr)) { 2135 // Okay: this is some kind of implicit downcast of Objective-C 2136 // interfaces, which is permitted. However, we're going to 2137 // complain about it. 2138 IncompatibleObjC = true; 2139 ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr, 2140 ToObjCPtr->getPointeeType(), 2141 ToType, Context); 2142 ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers); 2143 return true; 2144 } 2145 } 2146 // Beyond this point, both types need to be C pointers or block pointers. 2147 QualType ToPointeeType; 2148 if (const PointerType *ToCPtr = ToType->getAs<PointerType>()) 2149 ToPointeeType = ToCPtr->getPointeeType(); 2150 else if (const BlockPointerType *ToBlockPtr = 2151 ToType->getAs<BlockPointerType>()) { 2152 // Objective C++: We're able to convert from a pointer to any object 2153 // to a block pointer type. 2154 if (FromObjCPtr && FromObjCPtr->isObjCBuiltinType()) { 2155 ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers); 2156 return true; 2157 } 2158 ToPointeeType = ToBlockPtr->getPointeeType(); 2159 } 2160 else if (FromType->getAs<BlockPointerType>() && 2161 ToObjCPtr && ToObjCPtr->isObjCBuiltinType()) { 2162 // Objective C++: We're able to convert from a block pointer type to a 2163 // pointer to any object. 2164 ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers); 2165 return true; 2166 } 2167 else 2168 return false; 2169 2170 QualType FromPointeeType; 2171 if (const PointerType *FromCPtr = FromType->getAs<PointerType>()) 2172 FromPointeeType = FromCPtr->getPointeeType(); 2173 else if (const BlockPointerType *FromBlockPtr = 2174 FromType->getAs<BlockPointerType>()) 2175 FromPointeeType = FromBlockPtr->getPointeeType(); 2176 else 2177 return false; 2178 2179 // If we have pointers to pointers, recursively check whether this 2180 // is an Objective-C conversion. 2181 if (FromPointeeType->isPointerType() && ToPointeeType->isPointerType() && 2182 isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType, 2183 IncompatibleObjC)) { 2184 // We always complain about this conversion. 2185 IncompatibleObjC = true; 2186 ConvertedType = Context.getPointerType(ConvertedType); 2187 ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers); 2188 return true; 2189 } 2190 // Allow conversion of pointee being objective-c pointer to another one; 2191 // as in I* to id. 2192 if (FromPointeeType->getAs<ObjCObjectPointerType>() && 2193 ToPointeeType->getAs<ObjCObjectPointerType>() && 2194 isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType, 2195 IncompatibleObjC)) { 2196 2197 ConvertedType = Context.getPointerType(ConvertedType); 2198 ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers); 2199 return true; 2200 } 2201 2202 // If we have pointers to functions or blocks, check whether the only 2203 // differences in the argument and result types are in Objective-C 2204 // pointer conversions. If so, we permit the conversion (but 2205 // complain about it). 2206 const FunctionProtoType *FromFunctionType 2207 = FromPointeeType->getAs<FunctionProtoType>(); 2208 const FunctionProtoType *ToFunctionType 2209 = ToPointeeType->getAs<FunctionProtoType>(); 2210 if (FromFunctionType && ToFunctionType) { 2211 // If the function types are exactly the same, this isn't an 2212 // Objective-C pointer conversion. 2213 if (Context.getCanonicalType(FromPointeeType) 2214 == Context.getCanonicalType(ToPointeeType)) 2215 return false; 2216 2217 // Perform the quick checks that will tell us whether these 2218 // function types are obviously different. 2219 if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() || 2220 FromFunctionType->isVariadic() != ToFunctionType->isVariadic() || 2221 FromFunctionType->getTypeQuals() != ToFunctionType->getTypeQuals()) 2222 return false; 2223 2224 bool HasObjCConversion = false; 2225 if (Context.getCanonicalType(FromFunctionType->getResultType()) 2226 == Context.getCanonicalType(ToFunctionType->getResultType())) { 2227 // Okay, the types match exactly. Nothing to do. 2228 } else if (isObjCPointerConversion(FromFunctionType->getResultType(), 2229 ToFunctionType->getResultType(), 2230 ConvertedType, IncompatibleObjC)) { 2231 // Okay, we have an Objective-C pointer conversion. 2232 HasObjCConversion = true; 2233 } else { 2234 // Function types are too different. Abort. 2235 return false; 2236 } 2237 2238 // Check argument types. 2239 for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs(); 2240 ArgIdx != NumArgs; ++ArgIdx) { 2241 QualType FromArgType = FromFunctionType->getArgType(ArgIdx); 2242 QualType ToArgType = ToFunctionType->getArgType(ArgIdx); 2243 if (Context.getCanonicalType(FromArgType) 2244 == Context.getCanonicalType(ToArgType)) { 2245 // Okay, the types match exactly. Nothing to do. 2246 } else if (isObjCPointerConversion(FromArgType, ToArgType, 2247 ConvertedType, IncompatibleObjC)) { 2248 // Okay, we have an Objective-C pointer conversion. 2249 HasObjCConversion = true; 2250 } else { 2251 // Argument types are too different. Abort. 2252 return false; 2253 } 2254 } 2255 2256 if (HasObjCConversion) { 2257 // We had an Objective-C conversion. Allow this pointer 2258 // conversion, but complain about it. 2259 ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers); 2260 IncompatibleObjC = true; 2261 return true; 2262 } 2263 } 2264 2265 return false; 2266} 2267 2268/// \brief Determine whether this is an Objective-C writeback conversion, 2269/// used for parameter passing when performing automatic reference counting. 2270/// 2271/// \param FromType The type we're converting form. 2272/// 2273/// \param ToType The type we're converting to. 2274/// 2275/// \param ConvertedType The type that will be produced after applying 2276/// this conversion. 2277bool Sema::isObjCWritebackConversion(QualType FromType, QualType ToType, 2278 QualType &ConvertedType) { 2279 if (!getLangOpts().ObjCAutoRefCount || 2280 Context.hasSameUnqualifiedType(FromType, ToType)) 2281 return false; 2282 2283 // Parameter must be a pointer to __autoreleasing (with no other qualifiers). 2284 QualType ToPointee; 2285 if (const PointerType *ToPointer = ToType->getAs<PointerType>()) 2286 ToPointee = ToPointer->getPointeeType(); 2287 else 2288 return false; 2289 2290 Qualifiers ToQuals = ToPointee.getQualifiers(); 2291 if (!ToPointee->isObjCLifetimeType() || 2292 ToQuals.getObjCLifetime() != Qualifiers::OCL_Autoreleasing || 2293 !ToQuals.withoutObjCLifetime().empty()) 2294 return false; 2295 2296 // Argument must be a pointer to __strong to __weak. 2297 QualType FromPointee; 2298 if (const PointerType *FromPointer = FromType->getAs<PointerType>()) 2299 FromPointee = FromPointer->getPointeeType(); 2300 else 2301 return false; 2302 2303 Qualifiers FromQuals = FromPointee.getQualifiers(); 2304 if (!FromPointee->isObjCLifetimeType() || 2305 (FromQuals.getObjCLifetime() != Qualifiers::OCL_Strong && 2306 FromQuals.getObjCLifetime() != Qualifiers::OCL_Weak)) 2307 return false; 2308 2309 // Make sure that we have compatible qualifiers. 2310 FromQuals.setObjCLifetime(Qualifiers::OCL_Autoreleasing); 2311 if (!ToQuals.compatiblyIncludes(FromQuals)) 2312 return false; 2313 2314 // Remove qualifiers from the pointee type we're converting from; they 2315 // aren't used in the compatibility check belong, and we'll be adding back 2316 // qualifiers (with __autoreleasing) if the compatibility check succeeds. 2317 FromPointee = FromPointee.getUnqualifiedType(); 2318 2319 // The unqualified form of the pointee types must be compatible. 2320 ToPointee = ToPointee.getUnqualifiedType(); 2321 bool IncompatibleObjC; 2322 if (Context.typesAreCompatible(FromPointee, ToPointee)) 2323 FromPointee = ToPointee; 2324 else if (!isObjCPointerConversion(FromPointee, ToPointee, FromPointee, 2325 IncompatibleObjC)) 2326 return false; 2327 2328 /// \brief Construct the type we're converting to, which is a pointer to 2329 /// __autoreleasing pointee. 2330 FromPointee = Context.getQualifiedType(FromPointee, FromQuals); 2331 ConvertedType = Context.getPointerType(FromPointee); 2332 return true; 2333} 2334 2335bool Sema::IsBlockPointerConversion(QualType FromType, QualType ToType, 2336 QualType& ConvertedType) { 2337 QualType ToPointeeType; 2338 if (const BlockPointerType *ToBlockPtr = 2339 ToType->getAs<BlockPointerType>()) 2340 ToPointeeType = ToBlockPtr->getPointeeType(); 2341 else 2342 return false; 2343 2344 QualType FromPointeeType; 2345 if (const BlockPointerType *FromBlockPtr = 2346 FromType->getAs<BlockPointerType>()) 2347 FromPointeeType = FromBlockPtr->getPointeeType(); 2348 else 2349 return false; 2350 // We have pointer to blocks, check whether the only 2351 // differences in the argument and result types are in Objective-C 2352 // pointer conversions. If so, we permit the conversion. 2353 2354 const FunctionProtoType *FromFunctionType 2355 = FromPointeeType->getAs<FunctionProtoType>(); 2356 const FunctionProtoType *ToFunctionType 2357 = ToPointeeType->getAs<FunctionProtoType>(); 2358 2359 if (!FromFunctionType || !ToFunctionType) 2360 return false; 2361 2362 if (Context.hasSameType(FromPointeeType, ToPointeeType)) 2363 return true; 2364 2365 // Perform the quick checks that will tell us whether these 2366 // function types are obviously different. 2367 if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() || 2368 FromFunctionType->isVariadic() != ToFunctionType->isVariadic()) 2369 return false; 2370 2371 FunctionType::ExtInfo FromEInfo = FromFunctionType->getExtInfo(); 2372 FunctionType::ExtInfo ToEInfo = ToFunctionType->getExtInfo(); 2373 if (FromEInfo != ToEInfo) 2374 return false; 2375 2376 bool IncompatibleObjC = false; 2377 if (Context.hasSameType(FromFunctionType->getResultType(), 2378 ToFunctionType->getResultType())) { 2379 // Okay, the types match exactly. Nothing to do. 2380 } else { 2381 QualType RHS = FromFunctionType->getResultType(); 2382 QualType LHS = ToFunctionType->getResultType(); 2383 if ((!getLangOpts().CPlusPlus || !RHS->isRecordType()) && 2384 !RHS.hasQualifiers() && LHS.hasQualifiers()) 2385 LHS = LHS.getUnqualifiedType(); 2386 2387 if (Context.hasSameType(RHS,LHS)) { 2388 // OK exact match. 2389 } else if (isObjCPointerConversion(RHS, LHS, 2390 ConvertedType, IncompatibleObjC)) { 2391 if (IncompatibleObjC) 2392 return false; 2393 // Okay, we have an Objective-C pointer conversion. 2394 } 2395 else 2396 return false; 2397 } 2398 2399 // Check argument types. 2400 for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs(); 2401 ArgIdx != NumArgs; ++ArgIdx) { 2402 IncompatibleObjC = false; 2403 QualType FromArgType = FromFunctionType->getArgType(ArgIdx); 2404 QualType ToArgType = ToFunctionType->getArgType(ArgIdx); 2405 if (Context.hasSameType(FromArgType, ToArgType)) { 2406 // Okay, the types match exactly. Nothing to do. 2407 } else if (isObjCPointerConversion(ToArgType, FromArgType, 2408 ConvertedType, IncompatibleObjC)) { 2409 if (IncompatibleObjC) 2410 return false; 2411 // Okay, we have an Objective-C pointer conversion. 2412 } else 2413 // Argument types are too different. Abort. 2414 return false; 2415 } 2416 if (LangOpts.ObjCAutoRefCount && 2417 !Context.FunctionTypesMatchOnNSConsumedAttrs(FromFunctionType, 2418 ToFunctionType)) 2419 return false; 2420 2421 ConvertedType = ToType; 2422 return true; 2423} 2424 2425enum { 2426 ft_default, 2427 ft_different_class, 2428 ft_parameter_arity, 2429 ft_parameter_mismatch, 2430 ft_return_type, 2431 ft_qualifer_mismatch 2432}; 2433 2434/// HandleFunctionTypeMismatch - Gives diagnostic information for differeing 2435/// function types. Catches different number of parameter, mismatch in 2436/// parameter types, and different return types. 2437void Sema::HandleFunctionTypeMismatch(PartialDiagnostic &PDiag, 2438 QualType FromType, QualType ToType) { 2439 // If either type is not valid, include no extra info. 2440 if (FromType.isNull() || ToType.isNull()) { 2441 PDiag << ft_default; 2442 return; 2443 } 2444 2445 // Get the function type from the pointers. 2446 if (FromType->isMemberPointerType() && ToType->isMemberPointerType()) { 2447 const MemberPointerType *FromMember = FromType->getAs<MemberPointerType>(), 2448 *ToMember = ToType->getAs<MemberPointerType>(); 2449 if (FromMember->getClass() != ToMember->getClass()) { 2450 PDiag << ft_different_class << QualType(ToMember->getClass(), 0) 2451 << QualType(FromMember->getClass(), 0); 2452 return; 2453 } 2454 FromType = FromMember->getPointeeType(); 2455 ToType = ToMember->getPointeeType(); 2456 } 2457 2458 if (FromType->isPointerType()) 2459 FromType = FromType->getPointeeType(); 2460 if (ToType->isPointerType()) 2461 ToType = ToType->getPointeeType(); 2462 2463 // Remove references. 2464 FromType = FromType.getNonReferenceType(); 2465 ToType = ToType.getNonReferenceType(); 2466 2467 // Don't print extra info for non-specialized template functions. 2468 if (FromType->isInstantiationDependentType() && 2469 !FromType->getAs<TemplateSpecializationType>()) { 2470 PDiag << ft_default; 2471 return; 2472 } 2473 2474 // No extra info for same types. 2475 if (Context.hasSameType(FromType, ToType)) { 2476 PDiag << ft_default; 2477 return; 2478 } 2479 2480 const FunctionProtoType *FromFunction = FromType->getAs<FunctionProtoType>(), 2481 *ToFunction = ToType->getAs<FunctionProtoType>(); 2482 2483 // Both types need to be function types. 2484 if (!FromFunction || !ToFunction) { 2485 PDiag << ft_default; 2486 return; 2487 } 2488 2489 if (FromFunction->getNumArgs() != ToFunction->getNumArgs()) { 2490 PDiag << ft_parameter_arity << ToFunction->getNumArgs() 2491 << FromFunction->getNumArgs(); 2492 return; 2493 } 2494 2495 // Handle different parameter types. 2496 unsigned ArgPos; 2497 if (!FunctionArgTypesAreEqual(FromFunction, ToFunction, &ArgPos)) { 2498 PDiag << ft_parameter_mismatch << ArgPos + 1 2499 << ToFunction->getArgType(ArgPos) 2500 << FromFunction->getArgType(ArgPos); 2501 return; 2502 } 2503 2504 // Handle different return type. 2505 if (!Context.hasSameType(FromFunction->getResultType(), 2506 ToFunction->getResultType())) { 2507 PDiag << ft_return_type << ToFunction->getResultType() 2508 << FromFunction->getResultType(); 2509 return; 2510 } 2511 2512 unsigned FromQuals = FromFunction->getTypeQuals(), 2513 ToQuals = ToFunction->getTypeQuals(); 2514 if (FromQuals != ToQuals) { 2515 PDiag << ft_qualifer_mismatch << ToQuals << FromQuals; 2516 return; 2517 } 2518 2519 // Unable to find a difference, so add no extra info. 2520 PDiag << ft_default; 2521} 2522 2523/// FunctionArgTypesAreEqual - This routine checks two function proto types 2524/// for equality of their argument types. Caller has already checked that 2525/// they have same number of arguments. This routine assumes that Objective-C 2526/// pointer types which only differ in their protocol qualifiers are equal. 2527/// If the parameters are different, ArgPos will have the parameter index 2528/// of the first different parameter. 2529bool Sema::FunctionArgTypesAreEqual(const FunctionProtoType *OldType, 2530 const FunctionProtoType *NewType, 2531 unsigned *ArgPos) { 2532 if (!getLangOpts().ObjC1) { 2533 for (FunctionProtoType::arg_type_iterator O = OldType->arg_type_begin(), 2534 N = NewType->arg_type_begin(), 2535 E = OldType->arg_type_end(); O && (O != E); ++O, ++N) { 2536 if (!Context.hasSameType(*O, *N)) { 2537 if (ArgPos) *ArgPos = O - OldType->arg_type_begin(); 2538 return false; 2539 } 2540 } 2541 return true; 2542 } 2543 2544 for (FunctionProtoType::arg_type_iterator O = OldType->arg_type_begin(), 2545 N = NewType->arg_type_begin(), 2546 E = OldType->arg_type_end(); O && (O != E); ++O, ++N) { 2547 QualType ToType = (*O); 2548 QualType FromType = (*N); 2549 if (!Context.hasSameType(ToType, FromType)) { 2550 if (const PointerType *PTTo = ToType->getAs<PointerType>()) { 2551 if (const PointerType *PTFr = FromType->getAs<PointerType>()) 2552 if ((PTTo->getPointeeType()->isObjCQualifiedIdType() && 2553 PTFr->getPointeeType()->isObjCQualifiedIdType()) || 2554 (PTTo->getPointeeType()->isObjCQualifiedClassType() && 2555 PTFr->getPointeeType()->isObjCQualifiedClassType())) 2556 continue; 2557 } 2558 else if (const ObjCObjectPointerType *PTTo = 2559 ToType->getAs<ObjCObjectPointerType>()) { 2560 if (const ObjCObjectPointerType *PTFr = 2561 FromType->getAs<ObjCObjectPointerType>()) 2562 if (Context.hasSameUnqualifiedType( 2563 PTTo->getObjectType()->getBaseType(), 2564 PTFr->getObjectType()->getBaseType())) 2565 continue; 2566 } 2567 if (ArgPos) *ArgPos = O - OldType->arg_type_begin(); 2568 return false; 2569 } 2570 } 2571 return true; 2572} 2573 2574/// CheckPointerConversion - Check the pointer conversion from the 2575/// expression From to the type ToType. This routine checks for 2576/// ambiguous or inaccessible derived-to-base pointer 2577/// conversions for which IsPointerConversion has already returned 2578/// true. It returns true and produces a diagnostic if there was an 2579/// error, or returns false otherwise. 2580bool Sema::CheckPointerConversion(Expr *From, QualType ToType, 2581 CastKind &Kind, 2582 CXXCastPath& BasePath, 2583 bool IgnoreBaseAccess) { 2584 QualType FromType = From->getType(); 2585 bool IsCStyleOrFunctionalCast = IgnoreBaseAccess; 2586 2587 Kind = CK_BitCast; 2588 2589 if (!IsCStyleOrFunctionalCast && !FromType->isAnyPointerType() && 2590 From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull) == 2591 Expr::NPCK_ZeroExpression) { 2592 if (Context.hasSameUnqualifiedType(From->getType(), Context.BoolTy)) 2593 DiagRuntimeBehavior(From->getExprLoc(), From, 2594 PDiag(diag::warn_impcast_bool_to_null_pointer) 2595 << ToType << From->getSourceRange()); 2596 else if (!isUnevaluatedContext()) 2597 Diag(From->getExprLoc(), diag::warn_non_literal_null_pointer) 2598 << ToType << From->getSourceRange(); 2599 } 2600 if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) { 2601 if (const PointerType *FromPtrType = FromType->getAs<PointerType>()) { 2602 QualType FromPointeeType = FromPtrType->getPointeeType(), 2603 ToPointeeType = ToPtrType->getPointeeType(); 2604 2605 if (FromPointeeType->isRecordType() && ToPointeeType->isRecordType() && 2606 !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType)) { 2607 // We must have a derived-to-base conversion. Check an 2608 // ambiguous or inaccessible conversion. 2609 if (CheckDerivedToBaseConversion(FromPointeeType, ToPointeeType, 2610 From->getExprLoc(), 2611 From->getSourceRange(), &BasePath, 2612 IgnoreBaseAccess)) 2613 return true; 2614 2615 // The conversion was successful. 2616 Kind = CK_DerivedToBase; 2617 } 2618 } 2619 } else if (const ObjCObjectPointerType *ToPtrType = 2620 ToType->getAs<ObjCObjectPointerType>()) { 2621 if (const ObjCObjectPointerType *FromPtrType = 2622 FromType->getAs<ObjCObjectPointerType>()) { 2623 // Objective-C++ conversions are always okay. 2624 // FIXME: We should have a different class of conversions for the 2625 // Objective-C++ implicit conversions. 2626 if (FromPtrType->isObjCBuiltinType() || ToPtrType->isObjCBuiltinType()) 2627 return false; 2628 } else if (FromType->isBlockPointerType()) { 2629 Kind = CK_BlockPointerToObjCPointerCast; 2630 } else { 2631 Kind = CK_CPointerToObjCPointerCast; 2632 } 2633 } else if (ToType->isBlockPointerType()) { 2634 if (!FromType->isBlockPointerType()) 2635 Kind = CK_AnyPointerToBlockPointerCast; 2636 } 2637 2638 // We shouldn't fall into this case unless it's valid for other 2639 // reasons. 2640 if (From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull)) 2641 Kind = CK_NullToPointer; 2642 2643 return false; 2644} 2645 2646/// IsMemberPointerConversion - Determines whether the conversion of the 2647/// expression From, which has the (possibly adjusted) type FromType, can be 2648/// converted to the type ToType via a member pointer conversion (C++ 4.11). 2649/// If so, returns true and places the converted type (that might differ from 2650/// ToType in its cv-qualifiers at some level) into ConvertedType. 2651bool Sema::IsMemberPointerConversion(Expr *From, QualType FromType, 2652 QualType ToType, 2653 bool InOverloadResolution, 2654 QualType &ConvertedType) { 2655 const MemberPointerType *ToTypePtr = ToType->getAs<MemberPointerType>(); 2656 if (!ToTypePtr) 2657 return false; 2658 2659 // A null pointer constant can be converted to a member pointer (C++ 4.11p1) 2660 if (From->isNullPointerConstant(Context, 2661 InOverloadResolution? Expr::NPC_ValueDependentIsNotNull 2662 : Expr::NPC_ValueDependentIsNull)) { 2663 ConvertedType = ToType; 2664 return true; 2665 } 2666 2667 // Otherwise, both types have to be member pointers. 2668 const MemberPointerType *FromTypePtr = FromType->getAs<MemberPointerType>(); 2669 if (!FromTypePtr) 2670 return false; 2671 2672 // A pointer to member of B can be converted to a pointer to member of D, 2673 // where D is derived from B (C++ 4.11p2). 2674 QualType FromClass(FromTypePtr->getClass(), 0); 2675 QualType ToClass(ToTypePtr->getClass(), 0); 2676 2677 if (!Context.hasSameUnqualifiedType(FromClass, ToClass) && 2678 !RequireCompleteType(From->getLocStart(), ToClass, 0) && 2679 IsDerivedFrom(ToClass, FromClass)) { 2680 ConvertedType = Context.getMemberPointerType(FromTypePtr->getPointeeType(), 2681 ToClass.getTypePtr()); 2682 return true; 2683 } 2684 2685 return false; 2686} 2687 2688/// CheckMemberPointerConversion - Check the member pointer conversion from the 2689/// expression From to the type ToType. This routine checks for ambiguous or 2690/// virtual or inaccessible base-to-derived member pointer conversions 2691/// for which IsMemberPointerConversion has already returned true. It returns 2692/// true and produces a diagnostic if there was an error, or returns false 2693/// otherwise. 2694bool Sema::CheckMemberPointerConversion(Expr *From, QualType ToType, 2695 CastKind &Kind, 2696 CXXCastPath &BasePath, 2697 bool IgnoreBaseAccess) { 2698 QualType FromType = From->getType(); 2699 const MemberPointerType *FromPtrType = FromType->getAs<MemberPointerType>(); 2700 if (!FromPtrType) { 2701 // This must be a null pointer to member pointer conversion 2702 assert(From->isNullPointerConstant(Context, 2703 Expr::NPC_ValueDependentIsNull) && 2704 "Expr must be null pointer constant!"); 2705 Kind = CK_NullToMemberPointer; 2706 return false; 2707 } 2708 2709 const MemberPointerType *ToPtrType = ToType->getAs<MemberPointerType>(); 2710 assert(ToPtrType && "No member pointer cast has a target type " 2711 "that is not a member pointer."); 2712 2713 QualType FromClass = QualType(FromPtrType->getClass(), 0); 2714 QualType ToClass = QualType(ToPtrType->getClass(), 0); 2715 2716 // FIXME: What about dependent types? 2717 assert(FromClass->isRecordType() && "Pointer into non-class."); 2718 assert(ToClass->isRecordType() && "Pointer into non-class."); 2719 2720 CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true, 2721 /*DetectVirtual=*/true); 2722 bool DerivationOkay = IsDerivedFrom(ToClass, FromClass, Paths); 2723 assert(DerivationOkay && 2724 "Should not have been called if derivation isn't OK."); 2725 (void)DerivationOkay; 2726 2727 if (Paths.isAmbiguous(Context.getCanonicalType(FromClass). 2728 getUnqualifiedType())) { 2729 std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths); 2730 Diag(From->getExprLoc(), diag::err_ambiguous_memptr_conv) 2731 << 0 << FromClass << ToClass << PathDisplayStr << From->getSourceRange(); 2732 return true; 2733 } 2734 2735 if (const RecordType *VBase = Paths.getDetectedVirtual()) { 2736 Diag(From->getExprLoc(), diag::err_memptr_conv_via_virtual) 2737 << FromClass << ToClass << QualType(VBase, 0) 2738 << From->getSourceRange(); 2739 return true; 2740 } 2741 2742 if (!IgnoreBaseAccess) 2743 CheckBaseClassAccess(From->getExprLoc(), FromClass, ToClass, 2744 Paths.front(), 2745 diag::err_downcast_from_inaccessible_base); 2746 2747 // Must be a base to derived member conversion. 2748 BuildBasePathArray(Paths, BasePath); 2749 Kind = CK_BaseToDerivedMemberPointer; 2750 return false; 2751} 2752 2753/// IsQualificationConversion - Determines whether the conversion from 2754/// an rvalue of type FromType to ToType is a qualification conversion 2755/// (C++ 4.4). 2756/// 2757/// \param ObjCLifetimeConversion Output parameter that will be set to indicate 2758/// when the qualification conversion involves a change in the Objective-C 2759/// object lifetime. 2760bool 2761Sema::IsQualificationConversion(QualType FromType, QualType ToType, 2762 bool CStyle, bool &ObjCLifetimeConversion) { 2763 FromType = Context.getCanonicalType(FromType); 2764 ToType = Context.getCanonicalType(ToType); 2765 ObjCLifetimeConversion = false; 2766 2767 // If FromType and ToType are the same type, this is not a 2768 // qualification conversion. 2769 if (FromType.getUnqualifiedType() == ToType.getUnqualifiedType()) 2770 return false; 2771 2772 // (C++ 4.4p4): 2773 // A conversion can add cv-qualifiers at levels other than the first 2774 // in multi-level pointers, subject to the following rules: [...] 2775 bool PreviousToQualsIncludeConst = true; 2776 bool UnwrappedAnyPointer = false; 2777 while (Context.UnwrapSimilarPointerTypes(FromType, ToType)) { 2778 // Within each iteration of the loop, we check the qualifiers to 2779 // determine if this still looks like a qualification 2780 // conversion. Then, if all is well, we unwrap one more level of 2781 // pointers or pointers-to-members and do it all again 2782 // until there are no more pointers or pointers-to-members left to 2783 // unwrap. 2784 UnwrappedAnyPointer = true; 2785 2786 Qualifiers FromQuals = FromType.getQualifiers(); 2787 Qualifiers ToQuals = ToType.getQualifiers(); 2788 2789 // Objective-C ARC: 2790 // Check Objective-C lifetime conversions. 2791 if (FromQuals.getObjCLifetime() != ToQuals.getObjCLifetime() && 2792 UnwrappedAnyPointer) { 2793 if (ToQuals.compatiblyIncludesObjCLifetime(FromQuals)) { 2794 ObjCLifetimeConversion = true; 2795 FromQuals.removeObjCLifetime(); 2796 ToQuals.removeObjCLifetime(); 2797 } else { 2798 // Qualification conversions cannot cast between different 2799 // Objective-C lifetime qualifiers. 2800 return false; 2801 } 2802 } 2803 2804 // Allow addition/removal of GC attributes but not changing GC attributes. 2805 if (FromQuals.getObjCGCAttr() != ToQuals.getObjCGCAttr() && 2806 (!FromQuals.hasObjCGCAttr() || !ToQuals.hasObjCGCAttr())) { 2807 FromQuals.removeObjCGCAttr(); 2808 ToQuals.removeObjCGCAttr(); 2809 } 2810 2811 // -- for every j > 0, if const is in cv 1,j then const is in cv 2812 // 2,j, and similarly for volatile. 2813 if (!CStyle && !ToQuals.compatiblyIncludes(FromQuals)) 2814 return false; 2815 2816 // -- if the cv 1,j and cv 2,j are different, then const is in 2817 // every cv for 0 < k < j. 2818 if (!CStyle && FromQuals.getCVRQualifiers() != ToQuals.getCVRQualifiers() 2819 && !PreviousToQualsIncludeConst) 2820 return false; 2821 2822 // Keep track of whether all prior cv-qualifiers in the "to" type 2823 // include const. 2824 PreviousToQualsIncludeConst 2825 = PreviousToQualsIncludeConst && ToQuals.hasConst(); 2826 } 2827 2828 // We are left with FromType and ToType being the pointee types 2829 // after unwrapping the original FromType and ToType the same number 2830 // of types. If we unwrapped any pointers, and if FromType and 2831 // ToType have the same unqualified type (since we checked 2832 // qualifiers above), then this is a qualification conversion. 2833 return UnwrappedAnyPointer && Context.hasSameUnqualifiedType(FromType,ToType); 2834} 2835 2836/// \brief - Determine whether this is a conversion from a scalar type to an 2837/// atomic type. 2838/// 2839/// If successful, updates \c SCS's second and third steps in the conversion 2840/// sequence to finish the conversion. 2841static bool tryAtomicConversion(Sema &S, Expr *From, QualType ToType, 2842 bool InOverloadResolution, 2843 StandardConversionSequence &SCS, 2844 bool CStyle) { 2845 const AtomicType *ToAtomic = ToType->getAs<AtomicType>(); 2846 if (!ToAtomic) 2847 return false; 2848 2849 StandardConversionSequence InnerSCS; 2850 if (!IsStandardConversion(S, From, ToAtomic->getValueType(), 2851 InOverloadResolution, InnerSCS, 2852 CStyle, /*AllowObjCWritebackConversion=*/false)) 2853 return false; 2854 2855 SCS.Second = InnerSCS.Second; 2856 SCS.setToType(1, InnerSCS.getToType(1)); 2857 SCS.Third = InnerSCS.Third; 2858 SCS.QualificationIncludesObjCLifetime 2859 = InnerSCS.QualificationIncludesObjCLifetime; 2860 SCS.setToType(2, InnerSCS.getToType(2)); 2861 return true; 2862} 2863 2864static bool isFirstArgumentCompatibleWithType(ASTContext &Context, 2865 CXXConstructorDecl *Constructor, 2866 QualType Type) { 2867 const FunctionProtoType *CtorType = 2868 Constructor->getType()->getAs<FunctionProtoType>(); 2869 if (CtorType->getNumArgs() > 0) { 2870 QualType FirstArg = CtorType->getArgType(0); 2871 if (Context.hasSameUnqualifiedType(Type, FirstArg.getNonReferenceType())) 2872 return true; 2873 } 2874 return false; 2875} 2876 2877static OverloadingResult 2878IsInitializerListConstructorConversion(Sema &S, Expr *From, QualType ToType, 2879 CXXRecordDecl *To, 2880 UserDefinedConversionSequence &User, 2881 OverloadCandidateSet &CandidateSet, 2882 bool AllowExplicit) { 2883 DeclContext::lookup_iterator Con, ConEnd; 2884 for (llvm::tie(Con, ConEnd) = S.LookupConstructors(To); 2885 Con != ConEnd; ++Con) { 2886 NamedDecl *D = *Con; 2887 DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess()); 2888 2889 // Find the constructor (which may be a template). 2890 CXXConstructorDecl *Constructor = 0; 2891 FunctionTemplateDecl *ConstructorTmpl 2892 = dyn_cast<FunctionTemplateDecl>(D); 2893 if (ConstructorTmpl) 2894 Constructor 2895 = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl()); 2896 else 2897 Constructor = cast<CXXConstructorDecl>(D); 2898 2899 bool Usable = !Constructor->isInvalidDecl() && 2900 S.isInitListConstructor(Constructor) && 2901 (AllowExplicit || !Constructor->isExplicit()); 2902 if (Usable) { 2903 // If the first argument is (a reference to) the target type, 2904 // suppress conversions. 2905 bool SuppressUserConversions = 2906 isFirstArgumentCompatibleWithType(S.Context, Constructor, ToType); 2907 if (ConstructorTmpl) 2908 S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl, 2909 /*ExplicitArgs*/ 0, 2910 From, CandidateSet, 2911 SuppressUserConversions); 2912 else 2913 S.AddOverloadCandidate(Constructor, FoundDecl, 2914 From, CandidateSet, 2915 SuppressUserConversions); 2916 } 2917 } 2918 2919 bool HadMultipleCandidates = (CandidateSet.size() > 1); 2920 2921 OverloadCandidateSet::iterator Best; 2922 switch (CandidateSet.BestViableFunction(S, From->getLocStart(), Best, true)) { 2923 case OR_Success: { 2924 // Record the standard conversion we used and the conversion function. 2925 CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(Best->Function); 2926 S.MarkFunctionReferenced(From->getLocStart(), Constructor); 2927 2928 QualType ThisType = Constructor->getThisType(S.Context); 2929 // Initializer lists don't have conversions as such. 2930 User.Before.setAsIdentityConversion(); 2931 User.HadMultipleCandidates = HadMultipleCandidates; 2932 User.ConversionFunction = Constructor; 2933 User.FoundConversionFunction = Best->FoundDecl; 2934 User.After.setAsIdentityConversion(); 2935 User.After.setFromType(ThisType->getAs<PointerType>()->getPointeeType()); 2936 User.After.setAllToTypes(ToType); 2937 return OR_Success; 2938 } 2939 2940 case OR_No_Viable_Function: 2941 return OR_No_Viable_Function; 2942 case OR_Deleted: 2943 return OR_Deleted; 2944 case OR_Ambiguous: 2945 return OR_Ambiguous; 2946 } 2947 2948 llvm_unreachable("Invalid OverloadResult!"); 2949} 2950 2951/// Determines whether there is a user-defined conversion sequence 2952/// (C++ [over.ics.user]) that converts expression From to the type 2953/// ToType. If such a conversion exists, User will contain the 2954/// user-defined conversion sequence that performs such a conversion 2955/// and this routine will return true. Otherwise, this routine returns 2956/// false and User is unspecified. 2957/// 2958/// \param AllowExplicit true if the conversion should consider C++0x 2959/// "explicit" conversion functions as well as non-explicit conversion 2960/// functions (C++0x [class.conv.fct]p2). 2961static OverloadingResult 2962IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType, 2963 UserDefinedConversionSequence &User, 2964 OverloadCandidateSet &CandidateSet, 2965 bool AllowExplicit) { 2966 // Whether we will only visit constructors. 2967 bool ConstructorsOnly = false; 2968 2969 // If the type we are conversion to is a class type, enumerate its 2970 // constructors. 2971 if (const RecordType *ToRecordType = ToType->getAs<RecordType>()) { 2972 // C++ [over.match.ctor]p1: 2973 // When objects of class type are direct-initialized (8.5), or 2974 // copy-initialized from an expression of the same or a 2975 // derived class type (8.5), overload resolution selects the 2976 // constructor. [...] For copy-initialization, the candidate 2977 // functions are all the converting constructors (12.3.1) of 2978 // that class. The argument list is the expression-list within 2979 // the parentheses of the initializer. 2980 if (S.Context.hasSameUnqualifiedType(ToType, From->getType()) || 2981 (From->getType()->getAs<RecordType>() && 2982 S.IsDerivedFrom(From->getType(), ToType))) 2983 ConstructorsOnly = true; 2984 2985 S.RequireCompleteType(From->getLocStart(), ToType, 0); 2986 // RequireCompleteType may have returned true due to some invalid decl 2987 // during template instantiation, but ToType may be complete enough now 2988 // to try to recover. 2989 if (ToType->isIncompleteType()) { 2990 // We're not going to find any constructors. 2991 } else if (CXXRecordDecl *ToRecordDecl 2992 = dyn_cast<CXXRecordDecl>(ToRecordType->getDecl())) { 2993 2994 Expr **Args = &From; 2995 unsigned NumArgs = 1; 2996 bool ListInitializing = false; 2997 if (InitListExpr *InitList = dyn_cast<InitListExpr>(From)) { 2998 // But first, see if there is an init-list-contructor that will work. 2999 OverloadingResult Result = IsInitializerListConstructorConversion( 3000 S, From, ToType, ToRecordDecl, User, CandidateSet, AllowExplicit); 3001 if (Result != OR_No_Viable_Function) 3002 return Result; 3003 // Never mind. 3004 CandidateSet.clear(); 3005 3006 // If we're list-initializing, we pass the individual elements as 3007 // arguments, not the entire list. 3008 Args = InitList->getInits(); 3009 NumArgs = InitList->getNumInits(); 3010 ListInitializing = true; 3011 } 3012 3013 DeclContext::lookup_iterator Con, ConEnd; 3014 for (llvm::tie(Con, ConEnd) = S.LookupConstructors(ToRecordDecl); 3015 Con != ConEnd; ++Con) { 3016 NamedDecl *D = *Con; 3017 DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess()); 3018 3019 // Find the constructor (which may be a template). 3020 CXXConstructorDecl *Constructor = 0; 3021 FunctionTemplateDecl *ConstructorTmpl 3022 = dyn_cast<FunctionTemplateDecl>(D); 3023 if (ConstructorTmpl) 3024 Constructor 3025 = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl()); 3026 else 3027 Constructor = cast<CXXConstructorDecl>(D); 3028 3029 bool Usable = !Constructor->isInvalidDecl(); 3030 if (ListInitializing) 3031 Usable = Usable && (AllowExplicit || !Constructor->isExplicit()); 3032 else 3033 Usable = Usable &&Constructor->isConvertingConstructor(AllowExplicit); 3034 if (Usable) { 3035 bool SuppressUserConversions = !ConstructorsOnly; 3036 if (SuppressUserConversions && ListInitializing) { 3037 SuppressUserConversions = false; 3038 if (NumArgs == 1) { 3039 // If the first argument is (a reference to) the target type, 3040 // suppress conversions. 3041 SuppressUserConversions = isFirstArgumentCompatibleWithType( 3042 S.Context, Constructor, ToType); 3043 } 3044 } 3045 if (ConstructorTmpl) 3046 S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl, 3047 /*ExplicitArgs*/ 0, 3048 llvm::makeArrayRef(Args, NumArgs), 3049 CandidateSet, SuppressUserConversions); 3050 else 3051 // Allow one user-defined conversion when user specifies a 3052 // From->ToType conversion via an static cast (c-style, etc). 3053 S.AddOverloadCandidate(Constructor, FoundDecl, 3054 llvm::makeArrayRef(Args, NumArgs), 3055 CandidateSet, SuppressUserConversions); 3056 } 3057 } 3058 } 3059 } 3060 3061 // Enumerate conversion functions, if we're allowed to. 3062 if (ConstructorsOnly || isa<InitListExpr>(From)) { 3063 } else if (S.RequireCompleteType(From->getLocStart(), From->getType(), 0)) { 3064 // No conversion functions from incomplete types. 3065 } else if (const RecordType *FromRecordType 3066 = From->getType()->getAs<RecordType>()) { 3067 if (CXXRecordDecl *FromRecordDecl 3068 = dyn_cast<CXXRecordDecl>(FromRecordType->getDecl())) { 3069 // Add all of the conversion functions as candidates. 3070 const UnresolvedSetImpl *Conversions 3071 = FromRecordDecl->getVisibleConversionFunctions(); 3072 for (UnresolvedSetImpl::iterator I = Conversions->begin(), 3073 E = Conversions->end(); I != E; ++I) { 3074 DeclAccessPair FoundDecl = I.getPair(); 3075 NamedDecl *D = FoundDecl.getDecl(); 3076 CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext()); 3077 if (isa<UsingShadowDecl>(D)) 3078 D = cast<UsingShadowDecl>(D)->getTargetDecl(); 3079 3080 CXXConversionDecl *Conv; 3081 FunctionTemplateDecl *ConvTemplate; 3082 if ((ConvTemplate = dyn_cast<FunctionTemplateDecl>(D))) 3083 Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl()); 3084 else 3085 Conv = cast<CXXConversionDecl>(D); 3086 3087 if (AllowExplicit || !Conv->isExplicit()) { 3088 if (ConvTemplate) 3089 S.AddTemplateConversionCandidate(ConvTemplate, FoundDecl, 3090 ActingContext, From, ToType, 3091 CandidateSet); 3092 else 3093 S.AddConversionCandidate(Conv, FoundDecl, ActingContext, 3094 From, ToType, CandidateSet); 3095 } 3096 } 3097 } 3098 } 3099 3100 bool HadMultipleCandidates = (CandidateSet.size() > 1); 3101 3102 OverloadCandidateSet::iterator Best; 3103 switch (CandidateSet.BestViableFunction(S, From->getLocStart(), Best, true)) { 3104 case OR_Success: 3105 // Record the standard conversion we used and the conversion function. 3106 if (CXXConstructorDecl *Constructor 3107 = dyn_cast<CXXConstructorDecl>(Best->Function)) { 3108 S.MarkFunctionReferenced(From->getLocStart(), Constructor); 3109 3110 // C++ [over.ics.user]p1: 3111 // If the user-defined conversion is specified by a 3112 // constructor (12.3.1), the initial standard conversion 3113 // sequence converts the source type to the type required by 3114 // the argument of the constructor. 3115 // 3116 QualType ThisType = Constructor->getThisType(S.Context); 3117 if (isa<InitListExpr>(From)) { 3118 // Initializer lists don't have conversions as such. 3119 User.Before.setAsIdentityConversion(); 3120 } else { 3121 if (Best->Conversions[0].isEllipsis()) 3122 User.EllipsisConversion = true; 3123 else { 3124 User.Before = Best->Conversions[0].Standard; 3125 User.EllipsisConversion = false; 3126 } 3127 } 3128 User.HadMultipleCandidates = HadMultipleCandidates; 3129 User.ConversionFunction = Constructor; 3130 User.FoundConversionFunction = Best->FoundDecl; 3131 User.After.setAsIdentityConversion(); 3132 User.After.setFromType(ThisType->getAs<PointerType>()->getPointeeType()); 3133 User.After.setAllToTypes(ToType); 3134 return OR_Success; 3135 } 3136 if (CXXConversionDecl *Conversion 3137 = dyn_cast<CXXConversionDecl>(Best->Function)) { 3138 S.MarkFunctionReferenced(From->getLocStart(), Conversion); 3139 3140 // C++ [over.ics.user]p1: 3141 // 3142 // [...] If the user-defined conversion is specified by a 3143 // conversion function (12.3.2), the initial standard 3144 // conversion sequence converts the source type to the 3145 // implicit object parameter of the conversion function. 3146 User.Before = Best->Conversions[0].Standard; 3147 User.HadMultipleCandidates = HadMultipleCandidates; 3148 User.ConversionFunction = Conversion; 3149 User.FoundConversionFunction = Best->FoundDecl; 3150 User.EllipsisConversion = false; 3151 3152 // C++ [over.ics.user]p2: 3153 // The second standard conversion sequence converts the 3154 // result of the user-defined conversion to the target type 3155 // for the sequence. Since an implicit conversion sequence 3156 // is an initialization, the special rules for 3157 // initialization by user-defined conversion apply when 3158 // selecting the best user-defined conversion for a 3159 // user-defined conversion sequence (see 13.3.3 and 3160 // 13.3.3.1). 3161 User.After = Best->FinalConversion; 3162 return OR_Success; 3163 } 3164 llvm_unreachable("Not a constructor or conversion function?"); 3165 3166 case OR_No_Viable_Function: 3167 return OR_No_Viable_Function; 3168 case OR_Deleted: 3169 // No conversion here! We're done. 3170 return OR_Deleted; 3171 3172 case OR_Ambiguous: 3173 return OR_Ambiguous; 3174 } 3175 3176 llvm_unreachable("Invalid OverloadResult!"); 3177} 3178 3179bool 3180Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) { 3181 ImplicitConversionSequence ICS; 3182 OverloadCandidateSet CandidateSet(From->getExprLoc()); 3183 OverloadingResult OvResult = 3184 IsUserDefinedConversion(*this, From, ToType, ICS.UserDefined, 3185 CandidateSet, false); 3186 if (OvResult == OR_Ambiguous) 3187 Diag(From->getLocStart(), 3188 diag::err_typecheck_ambiguous_condition) 3189 << From->getType() << ToType << From->getSourceRange(); 3190 else if (OvResult == OR_No_Viable_Function && !CandidateSet.empty()) 3191 Diag(From->getLocStart(), 3192 diag::err_typecheck_nonviable_condition) 3193 << From->getType() << ToType << From->getSourceRange(); 3194 else 3195 return false; 3196 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, From); 3197 return true; 3198} 3199 3200/// \brief Compare the user-defined conversion functions or constructors 3201/// of two user-defined conversion sequences to determine whether any ordering 3202/// is possible. 3203static ImplicitConversionSequence::CompareKind 3204compareConversionFunctions(Sema &S, 3205 FunctionDecl *Function1, 3206 FunctionDecl *Function2) { 3207 if (!S.getLangOpts().ObjC1 || !S.getLangOpts().CPlusPlus0x) 3208 return ImplicitConversionSequence::Indistinguishable; 3209 3210 // Objective-C++: 3211 // If both conversion functions are implicitly-declared conversions from 3212 // a lambda closure type to a function pointer and a block pointer, 3213 // respectively, always prefer the conversion to a function pointer, 3214 // because the function pointer is more lightweight and is more likely 3215 // to keep code working. 3216 CXXConversionDecl *Conv1 = dyn_cast<CXXConversionDecl>(Function1); 3217 if (!Conv1) 3218 return ImplicitConversionSequence::Indistinguishable; 3219 3220 CXXConversionDecl *Conv2 = dyn_cast<CXXConversionDecl>(Function2); 3221 if (!Conv2) 3222 return ImplicitConversionSequence::Indistinguishable; 3223 3224 if (Conv1->getParent()->isLambda() && Conv2->getParent()->isLambda()) { 3225 bool Block1 = Conv1->getConversionType()->isBlockPointerType(); 3226 bool Block2 = Conv2->getConversionType()->isBlockPointerType(); 3227 if (Block1 != Block2) 3228 return Block1? ImplicitConversionSequence::Worse 3229 : ImplicitConversionSequence::Better; 3230 } 3231 3232 return ImplicitConversionSequence::Indistinguishable; 3233} 3234 3235/// CompareImplicitConversionSequences - Compare two implicit 3236/// conversion sequences to determine whether one is better than the 3237/// other or if they are indistinguishable (C++ 13.3.3.2). 3238static ImplicitConversionSequence::CompareKind 3239CompareImplicitConversionSequences(Sema &S, 3240 const ImplicitConversionSequence& ICS1, 3241 const ImplicitConversionSequence& ICS2) 3242{ 3243 // (C++ 13.3.3.2p2): When comparing the basic forms of implicit 3244 // conversion sequences (as defined in 13.3.3.1) 3245 // -- a standard conversion sequence (13.3.3.1.1) is a better 3246 // conversion sequence than a user-defined conversion sequence or 3247 // an ellipsis conversion sequence, and 3248 // -- a user-defined conversion sequence (13.3.3.1.2) is a better 3249 // conversion sequence than an ellipsis conversion sequence 3250 // (13.3.3.1.3). 3251 // 3252 // C++0x [over.best.ics]p10: 3253 // For the purpose of ranking implicit conversion sequences as 3254 // described in 13.3.3.2, the ambiguous conversion sequence is 3255 // treated as a user-defined sequence that is indistinguishable 3256 // from any other user-defined conversion sequence. 3257 if (ICS1.getKindRank() < ICS2.getKindRank()) 3258 return ImplicitConversionSequence::Better; 3259 if (ICS2.getKindRank() < ICS1.getKindRank()) 3260 return ImplicitConversionSequence::Worse; 3261 3262 // The following checks require both conversion sequences to be of 3263 // the same kind. 3264 if (ICS1.getKind() != ICS2.getKind()) 3265 return ImplicitConversionSequence::Indistinguishable; 3266 3267 ImplicitConversionSequence::CompareKind Result = 3268 ImplicitConversionSequence::Indistinguishable; 3269 3270 // Two implicit conversion sequences of the same form are 3271 // indistinguishable conversion sequences unless one of the 3272 // following rules apply: (C++ 13.3.3.2p3): 3273 if (ICS1.isStandard()) 3274 Result = CompareStandardConversionSequences(S, 3275 ICS1.Standard, ICS2.Standard); 3276 else if (ICS1.isUserDefined()) { 3277 // User-defined conversion sequence U1 is a better conversion 3278 // sequence than another user-defined conversion sequence U2 if 3279 // they contain the same user-defined conversion function or 3280 // constructor and if the second standard conversion sequence of 3281 // U1 is better than the second standard conversion sequence of 3282 // U2 (C++ 13.3.3.2p3). 3283 if (ICS1.UserDefined.ConversionFunction == 3284 ICS2.UserDefined.ConversionFunction) 3285 Result = CompareStandardConversionSequences(S, 3286 ICS1.UserDefined.After, 3287 ICS2.UserDefined.After); 3288 else 3289 Result = compareConversionFunctions(S, 3290 ICS1.UserDefined.ConversionFunction, 3291 ICS2.UserDefined.ConversionFunction); 3292 } 3293 3294 // List-initialization sequence L1 is a better conversion sequence than 3295 // list-initialization sequence L2 if L1 converts to std::initializer_list<X> 3296 // for some X and L2 does not. 3297 if (Result == ImplicitConversionSequence::Indistinguishable && 3298 !ICS1.isBad() && 3299 ICS1.isListInitializationSequence() && 3300 ICS2.isListInitializationSequence()) { 3301 if (ICS1.isStdInitializerListElement() && 3302 !ICS2.isStdInitializerListElement()) 3303 return ImplicitConversionSequence::Better; 3304 if (!ICS1.isStdInitializerListElement() && 3305 ICS2.isStdInitializerListElement()) 3306 return ImplicitConversionSequence::Worse; 3307 } 3308 3309 return Result; 3310} 3311 3312static bool hasSimilarType(ASTContext &Context, QualType T1, QualType T2) { 3313 while (Context.UnwrapSimilarPointerTypes(T1, T2)) { 3314 Qualifiers Quals; 3315 T1 = Context.getUnqualifiedArrayType(T1, Quals); 3316 T2 = Context.getUnqualifiedArrayType(T2, Quals); 3317 } 3318 3319 return Context.hasSameUnqualifiedType(T1, T2); 3320} 3321 3322// Per 13.3.3.2p3, compare the given standard conversion sequences to 3323// determine if one is a proper subset of the other. 3324static ImplicitConversionSequence::CompareKind 3325compareStandardConversionSubsets(ASTContext &Context, 3326 const StandardConversionSequence& SCS1, 3327 const StandardConversionSequence& SCS2) { 3328 ImplicitConversionSequence::CompareKind Result 3329 = ImplicitConversionSequence::Indistinguishable; 3330 3331 // the identity conversion sequence is considered to be a subsequence of 3332 // any non-identity conversion sequence 3333 if (SCS1.isIdentityConversion() && !SCS2.isIdentityConversion()) 3334 return ImplicitConversionSequence::Better; 3335 else if (!SCS1.isIdentityConversion() && SCS2.isIdentityConversion()) 3336 return ImplicitConversionSequence::Worse; 3337 3338 if (SCS1.Second != SCS2.Second) { 3339 if (SCS1.Second == ICK_Identity) 3340 Result = ImplicitConversionSequence::Better; 3341 else if (SCS2.Second == ICK_Identity) 3342 Result = ImplicitConversionSequence::Worse; 3343 else 3344 return ImplicitConversionSequence::Indistinguishable; 3345 } else if (!hasSimilarType(Context, SCS1.getToType(1), SCS2.getToType(1))) 3346 return ImplicitConversionSequence::Indistinguishable; 3347 3348 if (SCS1.Third == SCS2.Third) { 3349 return Context.hasSameType(SCS1.getToType(2), SCS2.getToType(2))? Result 3350 : ImplicitConversionSequence::Indistinguishable; 3351 } 3352 3353 if (SCS1.Third == ICK_Identity) 3354 return Result == ImplicitConversionSequence::Worse 3355 ? ImplicitConversionSequence::Indistinguishable 3356 : ImplicitConversionSequence::Better; 3357 3358 if (SCS2.Third == ICK_Identity) 3359 return Result == ImplicitConversionSequence::Better 3360 ? ImplicitConversionSequence::Indistinguishable 3361 : ImplicitConversionSequence::Worse; 3362 3363 return ImplicitConversionSequence::Indistinguishable; 3364} 3365 3366/// \brief Determine whether one of the given reference bindings is better 3367/// than the other based on what kind of bindings they are. 3368static bool isBetterReferenceBindingKind(const StandardConversionSequence &SCS1, 3369 const StandardConversionSequence &SCS2) { 3370 // C++0x [over.ics.rank]p3b4: 3371 // -- S1 and S2 are reference bindings (8.5.3) and neither refers to an 3372 // implicit object parameter of a non-static member function declared 3373 // without a ref-qualifier, and *either* S1 binds an rvalue reference 3374 // to an rvalue and S2 binds an lvalue reference *or S1 binds an 3375 // lvalue reference to a function lvalue and S2 binds an rvalue 3376 // reference*. 3377 // 3378 // FIXME: Rvalue references. We're going rogue with the above edits, 3379 // because the semantics in the current C++0x working paper (N3225 at the 3380 // time of this writing) break the standard definition of std::forward 3381 // and std::reference_wrapper when dealing with references to functions. 3382 // Proposed wording changes submitted to CWG for consideration. 3383 if (SCS1.BindsImplicitObjectArgumentWithoutRefQualifier || 3384 SCS2.BindsImplicitObjectArgumentWithoutRefQualifier) 3385 return false; 3386 3387 return (!SCS1.IsLvalueReference && SCS1.BindsToRvalue && 3388 SCS2.IsLvalueReference) || 3389 (SCS1.IsLvalueReference && SCS1.BindsToFunctionLvalue && 3390 !SCS2.IsLvalueReference); 3391} 3392 3393/// CompareStandardConversionSequences - Compare two standard 3394/// conversion sequences to determine whether one is better than the 3395/// other or if they are indistinguishable (C++ 13.3.3.2p3). 3396static ImplicitConversionSequence::CompareKind 3397CompareStandardConversionSequences(Sema &S, 3398 const StandardConversionSequence& SCS1, 3399 const StandardConversionSequence& SCS2) 3400{ 3401 // Standard conversion sequence S1 is a better conversion sequence 3402 // than standard conversion sequence S2 if (C++ 13.3.3.2p3): 3403 3404 // -- S1 is a proper subsequence of S2 (comparing the conversion 3405 // sequences in the canonical form defined by 13.3.3.1.1, 3406 // excluding any Lvalue Transformation; the identity conversion 3407 // sequence is considered to be a subsequence of any 3408 // non-identity conversion sequence) or, if not that, 3409 if (ImplicitConversionSequence::CompareKind CK 3410 = compareStandardConversionSubsets(S.Context, SCS1, SCS2)) 3411 return CK; 3412 3413 // -- the rank of S1 is better than the rank of S2 (by the rules 3414 // defined below), or, if not that, 3415 ImplicitConversionRank Rank1 = SCS1.getRank(); 3416 ImplicitConversionRank Rank2 = SCS2.getRank(); 3417 if (Rank1 < Rank2) 3418 return ImplicitConversionSequence::Better; 3419 else if (Rank2 < Rank1) 3420 return ImplicitConversionSequence::Worse; 3421 3422 // (C++ 13.3.3.2p4): Two conversion sequences with the same rank 3423 // are indistinguishable unless one of the following rules 3424 // applies: 3425 3426 // A conversion that is not a conversion of a pointer, or 3427 // pointer to member, to bool is better than another conversion 3428 // that is such a conversion. 3429 if (SCS1.isPointerConversionToBool() != SCS2.isPointerConversionToBool()) 3430 return SCS2.isPointerConversionToBool() 3431 ? ImplicitConversionSequence::Better 3432 : ImplicitConversionSequence::Worse; 3433 3434 // C++ [over.ics.rank]p4b2: 3435 // 3436 // If class B is derived directly or indirectly from class A, 3437 // conversion of B* to A* is better than conversion of B* to 3438 // void*, and conversion of A* to void* is better than conversion 3439 // of B* to void*. 3440 bool SCS1ConvertsToVoid 3441 = SCS1.isPointerConversionToVoidPointer(S.Context); 3442 bool SCS2ConvertsToVoid 3443 = SCS2.isPointerConversionToVoidPointer(S.Context); 3444 if (SCS1ConvertsToVoid != SCS2ConvertsToVoid) { 3445 // Exactly one of the conversion sequences is a conversion to 3446 // a void pointer; it's the worse conversion. 3447 return SCS2ConvertsToVoid ? ImplicitConversionSequence::Better 3448 : ImplicitConversionSequence::Worse; 3449 } else if (!SCS1ConvertsToVoid && !SCS2ConvertsToVoid) { 3450 // Neither conversion sequence converts to a void pointer; compare 3451 // their derived-to-base conversions. 3452 if (ImplicitConversionSequence::CompareKind DerivedCK 3453 = CompareDerivedToBaseConversions(S, SCS1, SCS2)) 3454 return DerivedCK; 3455 } else if (SCS1ConvertsToVoid && SCS2ConvertsToVoid && 3456 !S.Context.hasSameType(SCS1.getFromType(), SCS2.getFromType())) { 3457 // Both conversion sequences are conversions to void 3458 // pointers. Compare the source types to determine if there's an 3459 // inheritance relationship in their sources. 3460 QualType FromType1 = SCS1.getFromType(); 3461 QualType FromType2 = SCS2.getFromType(); 3462 3463 // Adjust the types we're converting from via the array-to-pointer 3464 // conversion, if we need to. 3465 if (SCS1.First == ICK_Array_To_Pointer) 3466 FromType1 = S.Context.getArrayDecayedType(FromType1); 3467 if (SCS2.First == ICK_Array_To_Pointer) 3468 FromType2 = S.Context.getArrayDecayedType(FromType2); 3469 3470 QualType FromPointee1 = FromType1->getPointeeType().getUnqualifiedType(); 3471 QualType FromPointee2 = FromType2->getPointeeType().getUnqualifiedType(); 3472 3473 if (S.IsDerivedFrom(FromPointee2, FromPointee1)) 3474 return ImplicitConversionSequence::Better; 3475 else if (S.IsDerivedFrom(FromPointee1, FromPointee2)) 3476 return ImplicitConversionSequence::Worse; 3477 3478 // Objective-C++: If one interface is more specific than the 3479 // other, it is the better one. 3480 const ObjCObjectPointerType* FromObjCPtr1 3481 = FromType1->getAs<ObjCObjectPointerType>(); 3482 const ObjCObjectPointerType* FromObjCPtr2 3483 = FromType2->getAs<ObjCObjectPointerType>(); 3484 if (FromObjCPtr1 && FromObjCPtr2) { 3485 bool AssignLeft = S.Context.canAssignObjCInterfaces(FromObjCPtr1, 3486 FromObjCPtr2); 3487 bool AssignRight = S.Context.canAssignObjCInterfaces(FromObjCPtr2, 3488 FromObjCPtr1); 3489 if (AssignLeft != AssignRight) { 3490 return AssignLeft? ImplicitConversionSequence::Better 3491 : ImplicitConversionSequence::Worse; 3492 } 3493 } 3494 } 3495 3496 // Compare based on qualification conversions (C++ 13.3.3.2p3, 3497 // bullet 3). 3498 if (ImplicitConversionSequence::CompareKind QualCK 3499 = CompareQualificationConversions(S, SCS1, SCS2)) 3500 return QualCK; 3501 3502 if (SCS1.ReferenceBinding && SCS2.ReferenceBinding) { 3503 // Check for a better reference binding based on the kind of bindings. 3504 if (isBetterReferenceBindingKind(SCS1, SCS2)) 3505 return ImplicitConversionSequence::Better; 3506 else if (isBetterReferenceBindingKind(SCS2, SCS1)) 3507 return ImplicitConversionSequence::Worse; 3508 3509 // C++ [over.ics.rank]p3b4: 3510 // -- S1 and S2 are reference bindings (8.5.3), and the types to 3511 // which the references refer are the same type except for 3512 // top-level cv-qualifiers, and the type to which the reference 3513 // initialized by S2 refers is more cv-qualified than the type 3514 // to which the reference initialized by S1 refers. 3515 QualType T1 = SCS1.getToType(2); 3516 QualType T2 = SCS2.getToType(2); 3517 T1 = S.Context.getCanonicalType(T1); 3518 T2 = S.Context.getCanonicalType(T2); 3519 Qualifiers T1Quals, T2Quals; 3520 QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals); 3521 QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals); 3522 if (UnqualT1 == UnqualT2) { 3523 // Objective-C++ ARC: If the references refer to objects with different 3524 // lifetimes, prefer bindings that don't change lifetime. 3525 if (SCS1.ObjCLifetimeConversionBinding != 3526 SCS2.ObjCLifetimeConversionBinding) { 3527 return SCS1.ObjCLifetimeConversionBinding 3528 ? ImplicitConversionSequence::Worse 3529 : ImplicitConversionSequence::Better; 3530 } 3531 3532 // If the type is an array type, promote the element qualifiers to the 3533 // type for comparison. 3534 if (isa<ArrayType>(T1) && T1Quals) 3535 T1 = S.Context.getQualifiedType(UnqualT1, T1Quals); 3536 if (isa<ArrayType>(T2) && T2Quals) 3537 T2 = S.Context.getQualifiedType(UnqualT2, T2Quals); 3538 if (T2.isMoreQualifiedThan(T1)) 3539 return ImplicitConversionSequence::Better; 3540 else if (T1.isMoreQualifiedThan(T2)) 3541 return ImplicitConversionSequence::Worse; 3542 } 3543 } 3544 3545 // In Microsoft mode, prefer an integral conversion to a 3546 // floating-to-integral conversion if the integral conversion 3547 // is between types of the same size. 3548 // For example: 3549 // void f(float); 3550 // void f(int); 3551 // int main { 3552 // long a; 3553 // f(a); 3554 // } 3555 // Here, MSVC will call f(int) instead of generating a compile error 3556 // as clang will do in standard mode. 3557 if (S.getLangOpts().MicrosoftMode && 3558 SCS1.Second == ICK_Integral_Conversion && 3559 SCS2.Second == ICK_Floating_Integral && 3560 S.Context.getTypeSize(SCS1.getFromType()) == 3561 S.Context.getTypeSize(SCS1.getToType(2))) 3562 return ImplicitConversionSequence::Better; 3563 3564 return ImplicitConversionSequence::Indistinguishable; 3565} 3566 3567/// CompareQualificationConversions - Compares two standard conversion 3568/// sequences to determine whether they can be ranked based on their 3569/// qualification conversions (C++ 13.3.3.2p3 bullet 3). 3570ImplicitConversionSequence::CompareKind 3571CompareQualificationConversions(Sema &S, 3572 const StandardConversionSequence& SCS1, 3573 const StandardConversionSequence& SCS2) { 3574 // C++ 13.3.3.2p3: 3575 // -- S1 and S2 differ only in their qualification conversion and 3576 // yield similar types T1 and T2 (C++ 4.4), respectively, and the 3577 // cv-qualification signature of type T1 is a proper subset of 3578 // the cv-qualification signature of type T2, and S1 is not the 3579 // deprecated string literal array-to-pointer conversion (4.2). 3580 if (SCS1.First != SCS2.First || SCS1.Second != SCS2.Second || 3581 SCS1.Third != SCS2.Third || SCS1.Third != ICK_Qualification) 3582 return ImplicitConversionSequence::Indistinguishable; 3583 3584 // FIXME: the example in the standard doesn't use a qualification 3585 // conversion (!) 3586 QualType T1 = SCS1.getToType(2); 3587 QualType T2 = SCS2.getToType(2); 3588 T1 = S.Context.getCanonicalType(T1); 3589 T2 = S.Context.getCanonicalType(T2); 3590 Qualifiers T1Quals, T2Quals; 3591 QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals); 3592 QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals); 3593 3594 // If the types are the same, we won't learn anything by unwrapped 3595 // them. 3596 if (UnqualT1 == UnqualT2) 3597 return ImplicitConversionSequence::Indistinguishable; 3598 3599 // If the type is an array type, promote the element qualifiers to the type 3600 // for comparison. 3601 if (isa<ArrayType>(T1) && T1Quals) 3602 T1 = S.Context.getQualifiedType(UnqualT1, T1Quals); 3603 if (isa<ArrayType>(T2) && T2Quals) 3604 T2 = S.Context.getQualifiedType(UnqualT2, T2Quals); 3605 3606 ImplicitConversionSequence::CompareKind Result 3607 = ImplicitConversionSequence::Indistinguishable; 3608 3609 // Objective-C++ ARC: 3610 // Prefer qualification conversions not involving a change in lifetime 3611 // to qualification conversions that do not change lifetime. 3612 if (SCS1.QualificationIncludesObjCLifetime != 3613 SCS2.QualificationIncludesObjCLifetime) { 3614 Result = SCS1.QualificationIncludesObjCLifetime 3615 ? ImplicitConversionSequence::Worse 3616 : ImplicitConversionSequence::Better; 3617 } 3618 3619 while (S.Context.UnwrapSimilarPointerTypes(T1, T2)) { 3620 // Within each iteration of the loop, we check the qualifiers to 3621 // determine if this still looks like a qualification 3622 // conversion. Then, if all is well, we unwrap one more level of 3623 // pointers or pointers-to-members and do it all again 3624 // until there are no more pointers or pointers-to-members left 3625 // to unwrap. This essentially mimics what 3626 // IsQualificationConversion does, but here we're checking for a 3627 // strict subset of qualifiers. 3628 if (T1.getCVRQualifiers() == T2.getCVRQualifiers()) 3629 // The qualifiers are the same, so this doesn't tell us anything 3630 // about how the sequences rank. 3631 ; 3632 else if (T2.isMoreQualifiedThan(T1)) { 3633 // T1 has fewer qualifiers, so it could be the better sequence. 3634 if (Result == ImplicitConversionSequence::Worse) 3635 // Neither has qualifiers that are a subset of the other's 3636 // qualifiers. 3637 return ImplicitConversionSequence::Indistinguishable; 3638 3639 Result = ImplicitConversionSequence::Better; 3640 } else if (T1.isMoreQualifiedThan(T2)) { 3641 // T2 has fewer qualifiers, so it could be the better sequence. 3642 if (Result == ImplicitConversionSequence::Better) 3643 // Neither has qualifiers that are a subset of the other's 3644 // qualifiers. 3645 return ImplicitConversionSequence::Indistinguishable; 3646 3647 Result = ImplicitConversionSequence::Worse; 3648 } else { 3649 // Qualifiers are disjoint. 3650 return ImplicitConversionSequence::Indistinguishable; 3651 } 3652 3653 // If the types after this point are equivalent, we're done. 3654 if (S.Context.hasSameUnqualifiedType(T1, T2)) 3655 break; 3656 } 3657 3658 // Check that the winning standard conversion sequence isn't using 3659 // the deprecated string literal array to pointer conversion. 3660 switch (Result) { 3661 case ImplicitConversionSequence::Better: 3662 if (SCS1.DeprecatedStringLiteralToCharPtr) 3663 Result = ImplicitConversionSequence::Indistinguishable; 3664 break; 3665 3666 case ImplicitConversionSequence::Indistinguishable: 3667 break; 3668 3669 case ImplicitConversionSequence::Worse: 3670 if (SCS2.DeprecatedStringLiteralToCharPtr) 3671 Result = ImplicitConversionSequence::Indistinguishable; 3672 break; 3673 } 3674 3675 return Result; 3676} 3677 3678/// CompareDerivedToBaseConversions - Compares two standard conversion 3679/// sequences to determine whether they can be ranked based on their 3680/// various kinds of derived-to-base conversions (C++ 3681/// [over.ics.rank]p4b3). As part of these checks, we also look at 3682/// conversions between Objective-C interface types. 3683ImplicitConversionSequence::CompareKind 3684CompareDerivedToBaseConversions(Sema &S, 3685 const StandardConversionSequence& SCS1, 3686 const StandardConversionSequence& SCS2) { 3687 QualType FromType1 = SCS1.getFromType(); 3688 QualType ToType1 = SCS1.getToType(1); 3689 QualType FromType2 = SCS2.getFromType(); 3690 QualType ToType2 = SCS2.getToType(1); 3691 3692 // Adjust the types we're converting from via the array-to-pointer 3693 // conversion, if we need to. 3694 if (SCS1.First == ICK_Array_To_Pointer) 3695 FromType1 = S.Context.getArrayDecayedType(FromType1); 3696 if (SCS2.First == ICK_Array_To_Pointer) 3697 FromType2 = S.Context.getArrayDecayedType(FromType2); 3698 3699 // Canonicalize all of the types. 3700 FromType1 = S.Context.getCanonicalType(FromType1); 3701 ToType1 = S.Context.getCanonicalType(ToType1); 3702 FromType2 = S.Context.getCanonicalType(FromType2); 3703 ToType2 = S.Context.getCanonicalType(ToType2); 3704 3705 // C++ [over.ics.rank]p4b3: 3706 // 3707 // If class B is derived directly or indirectly from class A and 3708 // class C is derived directly or indirectly from B, 3709 // 3710 // Compare based on pointer conversions. 3711 if (SCS1.Second == ICK_Pointer_Conversion && 3712 SCS2.Second == ICK_Pointer_Conversion && 3713 /*FIXME: Remove if Objective-C id conversions get their own rank*/ 3714 FromType1->isPointerType() && FromType2->isPointerType() && 3715 ToType1->isPointerType() && ToType2->isPointerType()) { 3716 QualType FromPointee1 3717 = FromType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType(); 3718 QualType ToPointee1 3719 = ToType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType(); 3720 QualType FromPointee2 3721 = FromType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType(); 3722 QualType ToPointee2 3723 = ToType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType(); 3724 3725 // -- conversion of C* to B* is better than conversion of C* to A*, 3726 if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) { 3727 if (S.IsDerivedFrom(ToPointee1, ToPointee2)) 3728 return ImplicitConversionSequence::Better; 3729 else if (S.IsDerivedFrom(ToPointee2, ToPointee1)) 3730 return ImplicitConversionSequence::Worse; 3731 } 3732 3733 // -- conversion of B* to A* is better than conversion of C* to A*, 3734 if (FromPointee1 != FromPointee2 && ToPointee1 == ToPointee2) { 3735 if (S.IsDerivedFrom(FromPointee2, FromPointee1)) 3736 return ImplicitConversionSequence::Better; 3737 else if (S.IsDerivedFrom(FromPointee1, FromPointee2)) 3738 return ImplicitConversionSequence::Worse; 3739 } 3740 } else if (SCS1.Second == ICK_Pointer_Conversion && 3741 SCS2.Second == ICK_Pointer_Conversion) { 3742 const ObjCObjectPointerType *FromPtr1 3743 = FromType1->getAs<ObjCObjectPointerType>(); 3744 const ObjCObjectPointerType *FromPtr2 3745 = FromType2->getAs<ObjCObjectPointerType>(); 3746 const ObjCObjectPointerType *ToPtr1 3747 = ToType1->getAs<ObjCObjectPointerType>(); 3748 const ObjCObjectPointerType *ToPtr2 3749 = ToType2->getAs<ObjCObjectPointerType>(); 3750 3751 if (FromPtr1 && FromPtr2 && ToPtr1 && ToPtr2) { 3752 // Apply the same conversion ranking rules for Objective-C pointer types 3753 // that we do for C++ pointers to class types. However, we employ the 3754 // Objective-C pseudo-subtyping relationship used for assignment of 3755 // Objective-C pointer types. 3756 bool FromAssignLeft 3757 = S.Context.canAssignObjCInterfaces(FromPtr1, FromPtr2); 3758 bool FromAssignRight 3759 = S.Context.canAssignObjCInterfaces(FromPtr2, FromPtr1); 3760 bool ToAssignLeft 3761 = S.Context.canAssignObjCInterfaces(ToPtr1, ToPtr2); 3762 bool ToAssignRight 3763 = S.Context.canAssignObjCInterfaces(ToPtr2, ToPtr1); 3764 3765 // A conversion to an a non-id object pointer type or qualified 'id' 3766 // type is better than a conversion to 'id'. 3767 if (ToPtr1->isObjCIdType() && 3768 (ToPtr2->isObjCQualifiedIdType() || ToPtr2->getInterfaceDecl())) 3769 return ImplicitConversionSequence::Worse; 3770 if (ToPtr2->isObjCIdType() && 3771 (ToPtr1->isObjCQualifiedIdType() || ToPtr1->getInterfaceDecl())) 3772 return ImplicitConversionSequence::Better; 3773 3774 // A conversion to a non-id object pointer type is better than a 3775 // conversion to a qualified 'id' type 3776 if (ToPtr1->isObjCQualifiedIdType() && ToPtr2->getInterfaceDecl()) 3777 return ImplicitConversionSequence::Worse; 3778 if (ToPtr2->isObjCQualifiedIdType() && ToPtr1->getInterfaceDecl()) 3779 return ImplicitConversionSequence::Better; 3780 3781 // A conversion to an a non-Class object pointer type or qualified 'Class' 3782 // type is better than a conversion to 'Class'. 3783 if (ToPtr1->isObjCClassType() && 3784 (ToPtr2->isObjCQualifiedClassType() || ToPtr2->getInterfaceDecl())) 3785 return ImplicitConversionSequence::Worse; 3786 if (ToPtr2->isObjCClassType() && 3787 (ToPtr1->isObjCQualifiedClassType() || ToPtr1->getInterfaceDecl())) 3788 return ImplicitConversionSequence::Better; 3789 3790 // A conversion to a non-Class object pointer type is better than a 3791 // conversion to a qualified 'Class' type. 3792 if (ToPtr1->isObjCQualifiedClassType() && ToPtr2->getInterfaceDecl()) 3793 return ImplicitConversionSequence::Worse; 3794 if (ToPtr2->isObjCQualifiedClassType() && ToPtr1->getInterfaceDecl()) 3795 return ImplicitConversionSequence::Better; 3796 3797 // -- "conversion of C* to B* is better than conversion of C* to A*," 3798 if (S.Context.hasSameType(FromType1, FromType2) && 3799 !FromPtr1->isObjCIdType() && !FromPtr1->isObjCClassType() && 3800 (ToAssignLeft != ToAssignRight)) 3801 return ToAssignLeft? ImplicitConversionSequence::Worse 3802 : ImplicitConversionSequence::Better; 3803 3804 // -- "conversion of B* to A* is better than conversion of C* to A*," 3805 if (S.Context.hasSameUnqualifiedType(ToType1, ToType2) && 3806 (FromAssignLeft != FromAssignRight)) 3807 return FromAssignLeft? ImplicitConversionSequence::Better 3808 : ImplicitConversionSequence::Worse; 3809 } 3810 } 3811 3812 // Ranking of member-pointer types. 3813 if (SCS1.Second == ICK_Pointer_Member && SCS2.Second == ICK_Pointer_Member && 3814 FromType1->isMemberPointerType() && FromType2->isMemberPointerType() && 3815 ToType1->isMemberPointerType() && ToType2->isMemberPointerType()) { 3816 const MemberPointerType * FromMemPointer1 = 3817 FromType1->getAs<MemberPointerType>(); 3818 const MemberPointerType * ToMemPointer1 = 3819 ToType1->getAs<MemberPointerType>(); 3820 const MemberPointerType * FromMemPointer2 = 3821 FromType2->getAs<MemberPointerType>(); 3822 const MemberPointerType * ToMemPointer2 = 3823 ToType2->getAs<MemberPointerType>(); 3824 const Type *FromPointeeType1 = FromMemPointer1->getClass(); 3825 const Type *ToPointeeType1 = ToMemPointer1->getClass(); 3826 const Type *FromPointeeType2 = FromMemPointer2->getClass(); 3827 const Type *ToPointeeType2 = ToMemPointer2->getClass(); 3828 QualType FromPointee1 = QualType(FromPointeeType1, 0).getUnqualifiedType(); 3829 QualType ToPointee1 = QualType(ToPointeeType1, 0).getUnqualifiedType(); 3830 QualType FromPointee2 = QualType(FromPointeeType2, 0).getUnqualifiedType(); 3831 QualType ToPointee2 = QualType(ToPointeeType2, 0).getUnqualifiedType(); 3832 // conversion of A::* to B::* is better than conversion of A::* to C::*, 3833 if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) { 3834 if (S.IsDerivedFrom(ToPointee1, ToPointee2)) 3835 return ImplicitConversionSequence::Worse; 3836 else if (S.IsDerivedFrom(ToPointee2, ToPointee1)) 3837 return ImplicitConversionSequence::Better; 3838 } 3839 // conversion of B::* to C::* is better than conversion of A::* to C::* 3840 if (ToPointee1 == ToPointee2 && FromPointee1 != FromPointee2) { 3841 if (S.IsDerivedFrom(FromPointee1, FromPointee2)) 3842 return ImplicitConversionSequence::Better; 3843 else if (S.IsDerivedFrom(FromPointee2, FromPointee1)) 3844 return ImplicitConversionSequence::Worse; 3845 } 3846 } 3847 3848 if (SCS1.Second == ICK_Derived_To_Base) { 3849 // -- conversion of C to B is better than conversion of C to A, 3850 // -- binding of an expression of type C to a reference of type 3851 // B& is better than binding an expression of type C to a 3852 // reference of type A&, 3853 if (S.Context.hasSameUnqualifiedType(FromType1, FromType2) && 3854 !S.Context.hasSameUnqualifiedType(ToType1, ToType2)) { 3855 if (S.IsDerivedFrom(ToType1, ToType2)) 3856 return ImplicitConversionSequence::Better; 3857 else if (S.IsDerivedFrom(ToType2, ToType1)) 3858 return ImplicitConversionSequence::Worse; 3859 } 3860 3861 // -- conversion of B to A is better than conversion of C to A. 3862 // -- binding of an expression of type B to a reference of type 3863 // A& is better than binding an expression of type C to a 3864 // reference of type A&, 3865 if (!S.Context.hasSameUnqualifiedType(FromType1, FromType2) && 3866 S.Context.hasSameUnqualifiedType(ToType1, ToType2)) { 3867 if (S.IsDerivedFrom(FromType2, FromType1)) 3868 return ImplicitConversionSequence::Better; 3869 else if (S.IsDerivedFrom(FromType1, FromType2)) 3870 return ImplicitConversionSequence::Worse; 3871 } 3872 } 3873 3874 return ImplicitConversionSequence::Indistinguishable; 3875} 3876 3877/// CompareReferenceRelationship - Compare the two types T1 and T2 to 3878/// determine whether they are reference-related, 3879/// reference-compatible, reference-compatible with added 3880/// qualification, or incompatible, for use in C++ initialization by 3881/// reference (C++ [dcl.ref.init]p4). Neither type can be a reference 3882/// type, and the first type (T1) is the pointee type of the reference 3883/// type being initialized. 3884Sema::ReferenceCompareResult 3885Sema::CompareReferenceRelationship(SourceLocation Loc, 3886 QualType OrigT1, QualType OrigT2, 3887 bool &DerivedToBase, 3888 bool &ObjCConversion, 3889 bool &ObjCLifetimeConversion) { 3890 assert(!OrigT1->isReferenceType() && 3891 "T1 must be the pointee type of the reference type"); 3892 assert(!OrigT2->isReferenceType() && "T2 cannot be a reference type"); 3893 3894 QualType T1 = Context.getCanonicalType(OrigT1); 3895 QualType T2 = Context.getCanonicalType(OrigT2); 3896 Qualifiers T1Quals, T2Quals; 3897 QualType UnqualT1 = Context.getUnqualifiedArrayType(T1, T1Quals); 3898 QualType UnqualT2 = Context.getUnqualifiedArrayType(T2, T2Quals); 3899 3900 // C++ [dcl.init.ref]p4: 3901 // Given types "cv1 T1" and "cv2 T2," "cv1 T1" is 3902 // reference-related to "cv2 T2" if T1 is the same type as T2, or 3903 // T1 is a base class of T2. 3904 DerivedToBase = false; 3905 ObjCConversion = false; 3906 ObjCLifetimeConversion = false; 3907 if (UnqualT1 == UnqualT2) { 3908 // Nothing to do. 3909 } else if (!RequireCompleteType(Loc, OrigT2, 0) && 3910 IsDerivedFrom(UnqualT2, UnqualT1)) 3911 DerivedToBase = true; 3912 else if (UnqualT1->isObjCObjectOrInterfaceType() && 3913 UnqualT2->isObjCObjectOrInterfaceType() && 3914 Context.canBindObjCObjectType(UnqualT1, UnqualT2)) 3915 ObjCConversion = true; 3916 else 3917 return Ref_Incompatible; 3918 3919 // At this point, we know that T1 and T2 are reference-related (at 3920 // least). 3921 3922 // If the type is an array type, promote the element qualifiers to the type 3923 // for comparison. 3924 if (isa<ArrayType>(T1) && T1Quals) 3925 T1 = Context.getQualifiedType(UnqualT1, T1Quals); 3926 if (isa<ArrayType>(T2) && T2Quals) 3927 T2 = Context.getQualifiedType(UnqualT2, T2Quals); 3928 3929 // C++ [dcl.init.ref]p4: 3930 // "cv1 T1" is reference-compatible with "cv2 T2" if T1 is 3931 // reference-related to T2 and cv1 is the same cv-qualification 3932 // as, or greater cv-qualification than, cv2. For purposes of 3933 // overload resolution, cases for which cv1 is greater 3934 // cv-qualification than cv2 are identified as 3935 // reference-compatible with added qualification (see 13.3.3.2). 3936 // 3937 // Note that we also require equivalence of Objective-C GC and address-space 3938 // qualifiers when performing these computations, so that e.g., an int in 3939 // address space 1 is not reference-compatible with an int in address 3940 // space 2. 3941 if (T1Quals.getObjCLifetime() != T2Quals.getObjCLifetime() && 3942 T1Quals.compatiblyIncludesObjCLifetime(T2Quals)) { 3943 T1Quals.removeObjCLifetime(); 3944 T2Quals.removeObjCLifetime(); 3945 ObjCLifetimeConversion = true; 3946 } 3947 3948 if (T1Quals == T2Quals) 3949 return Ref_Compatible; 3950 else if (T1Quals.compatiblyIncludes(T2Quals)) 3951 return Ref_Compatible_With_Added_Qualification; 3952 else 3953 return Ref_Related; 3954} 3955 3956/// \brief Look for a user-defined conversion to an value reference-compatible 3957/// with DeclType. Return true if something definite is found. 3958static bool 3959FindConversionForRefInit(Sema &S, ImplicitConversionSequence &ICS, 3960 QualType DeclType, SourceLocation DeclLoc, 3961 Expr *Init, QualType T2, bool AllowRvalues, 3962 bool AllowExplicit) { 3963 assert(T2->isRecordType() && "Can only find conversions of record types."); 3964 CXXRecordDecl *T2RecordDecl 3965 = dyn_cast<CXXRecordDecl>(T2->getAs<RecordType>()->getDecl()); 3966 3967 OverloadCandidateSet CandidateSet(DeclLoc); 3968 const UnresolvedSetImpl *Conversions 3969 = T2RecordDecl->getVisibleConversionFunctions(); 3970 for (UnresolvedSetImpl::iterator I = Conversions->begin(), 3971 E = Conversions->end(); I != E; ++I) { 3972 NamedDecl *D = *I; 3973 CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(D->getDeclContext()); 3974 if (isa<UsingShadowDecl>(D)) 3975 D = cast<UsingShadowDecl>(D)->getTargetDecl(); 3976 3977 FunctionTemplateDecl *ConvTemplate 3978 = dyn_cast<FunctionTemplateDecl>(D); 3979 CXXConversionDecl *Conv; 3980 if (ConvTemplate) 3981 Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl()); 3982 else 3983 Conv = cast<CXXConversionDecl>(D); 3984 3985 // If this is an explicit conversion, and we're not allowed to consider 3986 // explicit conversions, skip it. 3987 if (!AllowExplicit && Conv->isExplicit()) 3988 continue; 3989 3990 if (AllowRvalues) { 3991 bool DerivedToBase = false; 3992 bool ObjCConversion = false; 3993 bool ObjCLifetimeConversion = false; 3994 3995 // If we are initializing an rvalue reference, don't permit conversion 3996 // functions that return lvalues. 3997 if (!ConvTemplate && DeclType->isRValueReferenceType()) { 3998 const ReferenceType *RefType 3999 = Conv->getConversionType()->getAs<LValueReferenceType>(); 4000 if (RefType && !RefType->getPointeeType()->isFunctionType()) 4001 continue; 4002 } 4003 4004 if (!ConvTemplate && 4005 S.CompareReferenceRelationship( 4006 DeclLoc, 4007 Conv->getConversionType().getNonReferenceType() 4008 .getUnqualifiedType(), 4009 DeclType.getNonReferenceType().getUnqualifiedType(), 4010 DerivedToBase, ObjCConversion, ObjCLifetimeConversion) == 4011 Sema::Ref_Incompatible) 4012 continue; 4013 } else { 4014 // If the conversion function doesn't return a reference type, 4015 // it can't be considered for this conversion. An rvalue reference 4016 // is only acceptable if its referencee is a function type. 4017 4018 const ReferenceType *RefType = 4019 Conv->getConversionType()->getAs<ReferenceType>(); 4020 if (!RefType || 4021 (!RefType->isLValueReferenceType() && 4022 !RefType->getPointeeType()->isFunctionType())) 4023 continue; 4024 } 4025 4026 if (ConvTemplate) 4027 S.AddTemplateConversionCandidate(ConvTemplate, I.getPair(), ActingDC, 4028 Init, DeclType, CandidateSet); 4029 else 4030 S.AddConversionCandidate(Conv, I.getPair(), ActingDC, Init, 4031 DeclType, CandidateSet); 4032 } 4033 4034 bool HadMultipleCandidates = (CandidateSet.size() > 1); 4035 4036 OverloadCandidateSet::iterator Best; 4037 switch (CandidateSet.BestViableFunction(S, DeclLoc, Best, true)) { 4038 case OR_Success: 4039 // C++ [over.ics.ref]p1: 4040 // 4041 // [...] If the parameter binds directly to the result of 4042 // applying a conversion function to the argument 4043 // expression, the implicit conversion sequence is a 4044 // user-defined conversion sequence (13.3.3.1.2), with the 4045 // second standard conversion sequence either an identity 4046 // conversion or, if the conversion function returns an 4047 // entity of a type that is a derived class of the parameter 4048 // type, a derived-to-base Conversion. 4049 if (!Best->FinalConversion.DirectBinding) 4050 return false; 4051 4052 if (Best->Function) 4053 S.MarkFunctionReferenced(DeclLoc, Best->Function); 4054 ICS.setUserDefined(); 4055 ICS.UserDefined.Before = Best->Conversions[0].Standard; 4056 ICS.UserDefined.After = Best->FinalConversion; 4057 ICS.UserDefined.HadMultipleCandidates = HadMultipleCandidates; 4058 ICS.UserDefined.ConversionFunction = Best->Function; 4059 ICS.UserDefined.FoundConversionFunction = Best->FoundDecl; 4060 ICS.UserDefined.EllipsisConversion = false; 4061 assert(ICS.UserDefined.After.ReferenceBinding && 4062 ICS.UserDefined.After.DirectBinding && 4063 "Expected a direct reference binding!"); 4064 return true; 4065 4066 case OR_Ambiguous: 4067 ICS.setAmbiguous(); 4068 for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(); 4069 Cand != CandidateSet.end(); ++Cand) 4070 if (Cand->Viable) 4071 ICS.Ambiguous.addConversion(Cand->Function); 4072 return true; 4073 4074 case OR_No_Viable_Function: 4075 case OR_Deleted: 4076 // There was no suitable conversion, or we found a deleted 4077 // conversion; continue with other checks. 4078 return false; 4079 } 4080 4081 llvm_unreachable("Invalid OverloadResult!"); 4082} 4083 4084/// \brief Compute an implicit conversion sequence for reference 4085/// initialization. 4086static ImplicitConversionSequence 4087TryReferenceInit(Sema &S, Expr *Init, QualType DeclType, 4088 SourceLocation DeclLoc, 4089 bool SuppressUserConversions, 4090 bool AllowExplicit) { 4091 assert(DeclType->isReferenceType() && "Reference init needs a reference"); 4092 4093 // Most paths end in a failed conversion. 4094 ImplicitConversionSequence ICS; 4095 ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType); 4096 4097 QualType T1 = DeclType->getAs<ReferenceType>()->getPointeeType(); 4098 QualType T2 = Init->getType(); 4099 4100 // If the initializer is the address of an overloaded function, try 4101 // to resolve the overloaded function. If all goes well, T2 is the 4102 // type of the resulting function. 4103 if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) { 4104 DeclAccessPair Found; 4105 if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(Init, DeclType, 4106 false, Found)) 4107 T2 = Fn->getType(); 4108 } 4109 4110 // Compute some basic properties of the types and the initializer. 4111 bool isRValRef = DeclType->isRValueReferenceType(); 4112 bool DerivedToBase = false; 4113 bool ObjCConversion = false; 4114 bool ObjCLifetimeConversion = false; 4115 Expr::Classification InitCategory = Init->Classify(S.Context); 4116 Sema::ReferenceCompareResult RefRelationship 4117 = S.CompareReferenceRelationship(DeclLoc, T1, T2, DerivedToBase, 4118 ObjCConversion, ObjCLifetimeConversion); 4119 4120 4121 // C++0x [dcl.init.ref]p5: 4122 // A reference to type "cv1 T1" is initialized by an expression 4123 // of type "cv2 T2" as follows: 4124 4125 // -- If reference is an lvalue reference and the initializer expression 4126 if (!isRValRef) { 4127 // -- is an lvalue (but is not a bit-field), and "cv1 T1" is 4128 // reference-compatible with "cv2 T2," or 4129 // 4130 // Per C++ [over.ics.ref]p4, we don't check the bit-field property here. 4131 if (InitCategory.isLValue() && 4132 RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification) { 4133 // C++ [over.ics.ref]p1: 4134 // When a parameter of reference type binds directly (8.5.3) 4135 // to an argument expression, the implicit conversion sequence 4136 // is the identity conversion, unless the argument expression 4137 // has a type that is a derived class of the parameter type, 4138 // in which case the implicit conversion sequence is a 4139 // derived-to-base Conversion (13.3.3.1). 4140 ICS.setStandard(); 4141 ICS.Standard.First = ICK_Identity; 4142 ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base 4143 : ObjCConversion? ICK_Compatible_Conversion 4144 : ICK_Identity; 4145 ICS.Standard.Third = ICK_Identity; 4146 ICS.Standard.FromTypePtr = T2.getAsOpaquePtr(); 4147 ICS.Standard.setToType(0, T2); 4148 ICS.Standard.setToType(1, T1); 4149 ICS.Standard.setToType(2, T1); 4150 ICS.Standard.ReferenceBinding = true; 4151 ICS.Standard.DirectBinding = true; 4152 ICS.Standard.IsLvalueReference = !isRValRef; 4153 ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType(); 4154 ICS.Standard.BindsToRvalue = false; 4155 ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false; 4156 ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion; 4157 ICS.Standard.CopyConstructor = 0; 4158 4159 // Nothing more to do: the inaccessibility/ambiguity check for 4160 // derived-to-base conversions is suppressed when we're 4161 // computing the implicit conversion sequence (C++ 4162 // [over.best.ics]p2). 4163 return ICS; 4164 } 4165 4166 // -- has a class type (i.e., T2 is a class type), where T1 is 4167 // not reference-related to T2, and can be implicitly 4168 // converted to an lvalue of type "cv3 T3," where "cv1 T1" 4169 // is reference-compatible with "cv3 T3" 92) (this 4170 // conversion is selected by enumerating the applicable 4171 // conversion functions (13.3.1.6) and choosing the best 4172 // one through overload resolution (13.3)), 4173 if (!SuppressUserConversions && T2->isRecordType() && 4174 !S.RequireCompleteType(DeclLoc, T2, 0) && 4175 RefRelationship == Sema::Ref_Incompatible) { 4176 if (FindConversionForRefInit(S, ICS, DeclType, DeclLoc, 4177 Init, T2, /*AllowRvalues=*/false, 4178 AllowExplicit)) 4179 return ICS; 4180 } 4181 } 4182 4183 // -- Otherwise, the reference shall be an lvalue reference to a 4184 // non-volatile const type (i.e., cv1 shall be const), or the reference 4185 // shall be an rvalue reference. 4186 // 4187 // We actually handle one oddity of C++ [over.ics.ref] at this 4188 // point, which is that, due to p2 (which short-circuits reference 4189 // binding by only attempting a simple conversion for non-direct 4190 // bindings) and p3's strange wording, we allow a const volatile 4191 // reference to bind to an rvalue. Hence the check for the presence 4192 // of "const" rather than checking for "const" being the only 4193 // qualifier. 4194 // This is also the point where rvalue references and lvalue inits no longer 4195 // go together. 4196 if (!isRValRef && (!T1.isConstQualified() || T1.isVolatileQualified())) 4197 return ICS; 4198 4199 // -- If the initializer expression 4200 // 4201 // -- is an xvalue, class prvalue, array prvalue or function 4202 // lvalue and "cv1 T1" is reference-compatible with "cv2 T2", or 4203 if (RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification && 4204 (InitCategory.isXValue() || 4205 (InitCategory.isPRValue() && (T2->isRecordType() || T2->isArrayType())) || 4206 (InitCategory.isLValue() && T2->isFunctionType()))) { 4207 ICS.setStandard(); 4208 ICS.Standard.First = ICK_Identity; 4209 ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base 4210 : ObjCConversion? ICK_Compatible_Conversion 4211 : ICK_Identity; 4212 ICS.Standard.Third = ICK_Identity; 4213 ICS.Standard.FromTypePtr = T2.getAsOpaquePtr(); 4214 ICS.Standard.setToType(0, T2); 4215 ICS.Standard.setToType(1, T1); 4216 ICS.Standard.setToType(2, T1); 4217 ICS.Standard.ReferenceBinding = true; 4218 // In C++0x, this is always a direct binding. In C++98/03, it's a direct 4219 // binding unless we're binding to a class prvalue. 4220 // Note: Although xvalues wouldn't normally show up in C++98/03 code, we 4221 // allow the use of rvalue references in C++98/03 for the benefit of 4222 // standard library implementors; therefore, we need the xvalue check here. 4223 ICS.Standard.DirectBinding = 4224 S.getLangOpts().CPlusPlus0x || 4225 (InitCategory.isPRValue() && !T2->isRecordType()); 4226 ICS.Standard.IsLvalueReference = !isRValRef; 4227 ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType(); 4228 ICS.Standard.BindsToRvalue = InitCategory.isRValue(); 4229 ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false; 4230 ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion; 4231 ICS.Standard.CopyConstructor = 0; 4232 return ICS; 4233 } 4234 4235 // -- has a class type (i.e., T2 is a class type), where T1 is not 4236 // reference-related to T2, and can be implicitly converted to 4237 // an xvalue, class prvalue, or function lvalue of type 4238 // "cv3 T3", where "cv1 T1" is reference-compatible with 4239 // "cv3 T3", 4240 // 4241 // then the reference is bound to the value of the initializer 4242 // expression in the first case and to the result of the conversion 4243 // in the second case (or, in either case, to an appropriate base 4244 // class subobject). 4245 if (!SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible && 4246 T2->isRecordType() && !S.RequireCompleteType(DeclLoc, T2, 0) && 4247 FindConversionForRefInit(S, ICS, DeclType, DeclLoc, 4248 Init, T2, /*AllowRvalues=*/true, 4249 AllowExplicit)) { 4250 // In the second case, if the reference is an rvalue reference 4251 // and the second standard conversion sequence of the 4252 // user-defined conversion sequence includes an lvalue-to-rvalue 4253 // conversion, the program is ill-formed. 4254 if (ICS.isUserDefined() && isRValRef && 4255 ICS.UserDefined.After.First == ICK_Lvalue_To_Rvalue) 4256 ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType); 4257 4258 return ICS; 4259 } 4260 4261 // -- Otherwise, a temporary of type "cv1 T1" is created and 4262 // initialized from the initializer expression using the 4263 // rules for a non-reference copy initialization (8.5). The 4264 // reference is then bound to the temporary. If T1 is 4265 // reference-related to T2, cv1 must be the same 4266 // cv-qualification as, or greater cv-qualification than, 4267 // cv2; otherwise, the program is ill-formed. 4268 if (RefRelationship == Sema::Ref_Related) { 4269 // If cv1 == cv2 or cv1 is a greater cv-qualified than cv2, then 4270 // we would be reference-compatible or reference-compatible with 4271 // added qualification. But that wasn't the case, so the reference 4272 // initialization fails. 4273 // 4274 // Note that we only want to check address spaces and cvr-qualifiers here. 4275 // ObjC GC and lifetime qualifiers aren't important. 4276 Qualifiers T1Quals = T1.getQualifiers(); 4277 Qualifiers T2Quals = T2.getQualifiers(); 4278 T1Quals.removeObjCGCAttr(); 4279 T1Quals.removeObjCLifetime(); 4280 T2Quals.removeObjCGCAttr(); 4281 T2Quals.removeObjCLifetime(); 4282 if (!T1Quals.compatiblyIncludes(T2Quals)) 4283 return ICS; 4284 } 4285 4286 // If at least one of the types is a class type, the types are not 4287 // related, and we aren't allowed any user conversions, the 4288 // reference binding fails. This case is important for breaking 4289 // recursion, since TryImplicitConversion below will attempt to 4290 // create a temporary through the use of a copy constructor. 4291 if (SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible && 4292 (T1->isRecordType() || T2->isRecordType())) 4293 return ICS; 4294 4295 // If T1 is reference-related to T2 and the reference is an rvalue 4296 // reference, the initializer expression shall not be an lvalue. 4297 if (RefRelationship >= Sema::Ref_Related && 4298 isRValRef && Init->Classify(S.Context).isLValue()) 4299 return ICS; 4300 4301 // C++ [over.ics.ref]p2: 4302 // When a parameter of reference type is not bound directly to 4303 // an argument expression, the conversion sequence is the one 4304 // required to convert the argument expression to the 4305 // underlying type of the reference according to 4306 // 13.3.3.1. Conceptually, this conversion sequence corresponds 4307 // to copy-initializing a temporary of the underlying type with 4308 // the argument expression. Any difference in top-level 4309 // cv-qualification is subsumed by the initialization itself 4310 // and does not constitute a conversion. 4311 ICS = TryImplicitConversion(S, Init, T1, SuppressUserConversions, 4312 /*AllowExplicit=*/false, 4313 /*InOverloadResolution=*/false, 4314 /*CStyle=*/false, 4315 /*AllowObjCWritebackConversion=*/false); 4316 4317 // Of course, that's still a reference binding. 4318 if (ICS.isStandard()) { 4319 ICS.Standard.ReferenceBinding = true; 4320 ICS.Standard.IsLvalueReference = !isRValRef; 4321 ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType(); 4322 ICS.Standard.BindsToRvalue = true; 4323 ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false; 4324 ICS.Standard.ObjCLifetimeConversionBinding = false; 4325 } else if (ICS.isUserDefined()) { 4326 // Don't allow rvalue references to bind to lvalues. 4327 if (DeclType->isRValueReferenceType()) { 4328 if (const ReferenceType *RefType 4329 = ICS.UserDefined.ConversionFunction->getResultType() 4330 ->getAs<LValueReferenceType>()) { 4331 if (!RefType->getPointeeType()->isFunctionType()) { 4332 ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, Init, 4333 DeclType); 4334 return ICS; 4335 } 4336 } 4337 } 4338 4339 ICS.UserDefined.After.ReferenceBinding = true; 4340 ICS.UserDefined.After.IsLvalueReference = !isRValRef; 4341 ICS.UserDefined.After.BindsToFunctionLvalue = T2->isFunctionType(); 4342 ICS.UserDefined.After.BindsToRvalue = true; 4343 ICS.UserDefined.After.BindsImplicitObjectArgumentWithoutRefQualifier = false; 4344 ICS.UserDefined.After.ObjCLifetimeConversionBinding = false; 4345 } 4346 4347 return ICS; 4348} 4349 4350static ImplicitConversionSequence 4351TryCopyInitialization(Sema &S, Expr *From, QualType ToType, 4352 bool SuppressUserConversions, 4353 bool InOverloadResolution, 4354 bool AllowObjCWritebackConversion, 4355 bool AllowExplicit = false); 4356 4357/// TryListConversion - Try to copy-initialize a value of type ToType from the 4358/// initializer list From. 4359static ImplicitConversionSequence 4360TryListConversion(Sema &S, InitListExpr *From, QualType ToType, 4361 bool SuppressUserConversions, 4362 bool InOverloadResolution, 4363 bool AllowObjCWritebackConversion) { 4364 // C++11 [over.ics.list]p1: 4365 // When an argument is an initializer list, it is not an expression and 4366 // special rules apply for converting it to a parameter type. 4367 4368 ImplicitConversionSequence Result; 4369 Result.setBad(BadConversionSequence::no_conversion, From, ToType); 4370 Result.setListInitializationSequence(); 4371 4372 // We need a complete type for what follows. Incomplete types can never be 4373 // initialized from init lists. 4374 if (S.RequireCompleteType(From->getLocStart(), ToType, 0)) 4375 return Result; 4376 4377 // C++11 [over.ics.list]p2: 4378 // If the parameter type is std::initializer_list<X> or "array of X" and 4379 // all the elements can be implicitly converted to X, the implicit 4380 // conversion sequence is the worst conversion necessary to convert an 4381 // element of the list to X. 4382 bool toStdInitializerList = false; 4383 QualType X; 4384 if (ToType->isArrayType()) 4385 X = S.Context.getBaseElementType(ToType); 4386 else 4387 toStdInitializerList = S.isStdInitializerList(ToType, &X); 4388 if (!X.isNull()) { 4389 for (unsigned i = 0, e = From->getNumInits(); i < e; ++i) { 4390 Expr *Init = From->getInit(i); 4391 ImplicitConversionSequence ICS = 4392 TryCopyInitialization(S, Init, X, SuppressUserConversions, 4393 InOverloadResolution, 4394 AllowObjCWritebackConversion); 4395 // If a single element isn't convertible, fail. 4396 if (ICS.isBad()) { 4397 Result = ICS; 4398 break; 4399 } 4400 // Otherwise, look for the worst conversion. 4401 if (Result.isBad() || 4402 CompareImplicitConversionSequences(S, ICS, Result) == 4403 ImplicitConversionSequence::Worse) 4404 Result = ICS; 4405 } 4406 4407 // For an empty list, we won't have computed any conversion sequence. 4408 // Introduce the identity conversion sequence. 4409 if (From->getNumInits() == 0) { 4410 Result.setStandard(); 4411 Result.Standard.setAsIdentityConversion(); 4412 Result.Standard.setFromType(ToType); 4413 Result.Standard.setAllToTypes(ToType); 4414 } 4415 4416 Result.setListInitializationSequence(); 4417 Result.setStdInitializerListElement(toStdInitializerList); 4418 return Result; 4419 } 4420 4421 // C++11 [over.ics.list]p3: 4422 // Otherwise, if the parameter is a non-aggregate class X and overload 4423 // resolution chooses a single best constructor [...] the implicit 4424 // conversion sequence is a user-defined conversion sequence. If multiple 4425 // constructors are viable but none is better than the others, the 4426 // implicit conversion sequence is a user-defined conversion sequence. 4427 if (ToType->isRecordType() && !ToType->isAggregateType()) { 4428 // This function can deal with initializer lists. 4429 Result = TryUserDefinedConversion(S, From, ToType, SuppressUserConversions, 4430 /*AllowExplicit=*/false, 4431 InOverloadResolution, /*CStyle=*/false, 4432 AllowObjCWritebackConversion); 4433 Result.setListInitializationSequence(); 4434 return Result; 4435 } 4436 4437 // C++11 [over.ics.list]p4: 4438 // Otherwise, if the parameter has an aggregate type which can be 4439 // initialized from the initializer list [...] the implicit conversion 4440 // sequence is a user-defined conversion sequence. 4441 if (ToType->isAggregateType()) { 4442 // Type is an aggregate, argument is an init list. At this point it comes 4443 // down to checking whether the initialization works. 4444 // FIXME: Find out whether this parameter is consumed or not. 4445 InitializedEntity Entity = 4446 InitializedEntity::InitializeParameter(S.Context, ToType, 4447 /*Consumed=*/false); 4448 if (S.CanPerformCopyInitialization(Entity, S.Owned(From))) { 4449 Result.setUserDefined(); 4450 Result.UserDefined.Before.setAsIdentityConversion(); 4451 // Initializer lists don't have a type. 4452 Result.UserDefined.Before.setFromType(QualType()); 4453 Result.UserDefined.Before.setAllToTypes(QualType()); 4454 4455 Result.UserDefined.After.setAsIdentityConversion(); 4456 Result.UserDefined.After.setFromType(ToType); 4457 Result.UserDefined.After.setAllToTypes(ToType); 4458 Result.UserDefined.ConversionFunction = 0; 4459 } 4460 return Result; 4461 } 4462 4463 // C++11 [over.ics.list]p5: 4464 // Otherwise, if the parameter is a reference, see 13.3.3.1.4. 4465 if (ToType->isReferenceType()) { 4466 // The standard is notoriously unclear here, since 13.3.3.1.4 doesn't 4467 // mention initializer lists in any way. So we go by what list- 4468 // initialization would do and try to extrapolate from that. 4469 4470 QualType T1 = ToType->getAs<ReferenceType>()->getPointeeType(); 4471 4472 // If the initializer list has a single element that is reference-related 4473 // to the parameter type, we initialize the reference from that. 4474 if (From->getNumInits() == 1) { 4475 Expr *Init = From->getInit(0); 4476 4477 QualType T2 = Init->getType(); 4478 4479 // If the initializer is the address of an overloaded function, try 4480 // to resolve the overloaded function. If all goes well, T2 is the 4481 // type of the resulting function. 4482 if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) { 4483 DeclAccessPair Found; 4484 if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction( 4485 Init, ToType, false, Found)) 4486 T2 = Fn->getType(); 4487 } 4488 4489 // Compute some basic properties of the types and the initializer. 4490 bool dummy1 = false; 4491 bool dummy2 = false; 4492 bool dummy3 = false; 4493 Sema::ReferenceCompareResult RefRelationship 4494 = S.CompareReferenceRelationship(From->getLocStart(), T1, T2, dummy1, 4495 dummy2, dummy3); 4496 4497 if (RefRelationship >= Sema::Ref_Related) 4498 return TryReferenceInit(S, Init, ToType, 4499 /*FIXME:*/From->getLocStart(), 4500 SuppressUserConversions, 4501 /*AllowExplicit=*/false); 4502 } 4503 4504 // Otherwise, we bind the reference to a temporary created from the 4505 // initializer list. 4506 Result = TryListConversion(S, From, T1, SuppressUserConversions, 4507 InOverloadResolution, 4508 AllowObjCWritebackConversion); 4509 if (Result.isFailure()) 4510 return Result; 4511 assert(!Result.isEllipsis() && 4512 "Sub-initialization cannot result in ellipsis conversion."); 4513 4514 // Can we even bind to a temporary? 4515 if (ToType->isRValueReferenceType() || 4516 (T1.isConstQualified() && !T1.isVolatileQualified())) { 4517 StandardConversionSequence &SCS = Result.isStandard() ? Result.Standard : 4518 Result.UserDefined.After; 4519 SCS.ReferenceBinding = true; 4520 SCS.IsLvalueReference = ToType->isLValueReferenceType(); 4521 SCS.BindsToRvalue = true; 4522 SCS.BindsToFunctionLvalue = false; 4523 SCS.BindsImplicitObjectArgumentWithoutRefQualifier = false; 4524 SCS.ObjCLifetimeConversionBinding = false; 4525 } else 4526 Result.setBad(BadConversionSequence::lvalue_ref_to_rvalue, 4527 From, ToType); 4528 return Result; 4529 } 4530 4531 // C++11 [over.ics.list]p6: 4532 // Otherwise, if the parameter type is not a class: 4533 if (!ToType->isRecordType()) { 4534 // - if the initializer list has one element, the implicit conversion 4535 // sequence is the one required to convert the element to the 4536 // parameter type. 4537 unsigned NumInits = From->getNumInits(); 4538 if (NumInits == 1) 4539 Result = TryCopyInitialization(S, From->getInit(0), ToType, 4540 SuppressUserConversions, 4541 InOverloadResolution, 4542 AllowObjCWritebackConversion); 4543 // - if the initializer list has no elements, the implicit conversion 4544 // sequence is the identity conversion. 4545 else if (NumInits == 0) { 4546 Result.setStandard(); 4547 Result.Standard.setAsIdentityConversion(); 4548 Result.Standard.setFromType(ToType); 4549 Result.Standard.setAllToTypes(ToType); 4550 } 4551 Result.setListInitializationSequence(); 4552 return Result; 4553 } 4554 4555 // C++11 [over.ics.list]p7: 4556 // In all cases other than those enumerated above, no conversion is possible 4557 return Result; 4558} 4559 4560/// TryCopyInitialization - Try to copy-initialize a value of type 4561/// ToType from the expression From. Return the implicit conversion 4562/// sequence required to pass this argument, which may be a bad 4563/// conversion sequence (meaning that the argument cannot be passed to 4564/// a parameter of this type). If @p SuppressUserConversions, then we 4565/// do not permit any user-defined conversion sequences. 4566static ImplicitConversionSequence 4567TryCopyInitialization(Sema &S, Expr *From, QualType ToType, 4568 bool SuppressUserConversions, 4569 bool InOverloadResolution, 4570 bool AllowObjCWritebackConversion, 4571 bool AllowExplicit) { 4572 if (InitListExpr *FromInitList = dyn_cast<InitListExpr>(From)) 4573 return TryListConversion(S, FromInitList, ToType, SuppressUserConversions, 4574 InOverloadResolution,AllowObjCWritebackConversion); 4575 4576 if (ToType->isReferenceType()) 4577 return TryReferenceInit(S, From, ToType, 4578 /*FIXME:*/From->getLocStart(), 4579 SuppressUserConversions, 4580 AllowExplicit); 4581 4582 return TryImplicitConversion(S, From, ToType, 4583 SuppressUserConversions, 4584 /*AllowExplicit=*/false, 4585 InOverloadResolution, 4586 /*CStyle=*/false, 4587 AllowObjCWritebackConversion); 4588} 4589 4590static bool TryCopyInitialization(const CanQualType FromQTy, 4591 const CanQualType ToQTy, 4592 Sema &S, 4593 SourceLocation Loc, 4594 ExprValueKind FromVK) { 4595 OpaqueValueExpr TmpExpr(Loc, FromQTy, FromVK); 4596 ImplicitConversionSequence ICS = 4597 TryCopyInitialization(S, &TmpExpr, ToQTy, true, true, false); 4598 4599 return !ICS.isBad(); 4600} 4601 4602/// TryObjectArgumentInitialization - Try to initialize the object 4603/// parameter of the given member function (@c Method) from the 4604/// expression @p From. 4605static ImplicitConversionSequence 4606TryObjectArgumentInitialization(Sema &S, QualType OrigFromType, 4607 Expr::Classification FromClassification, 4608 CXXMethodDecl *Method, 4609 CXXRecordDecl *ActingContext) { 4610 QualType ClassType = S.Context.getTypeDeclType(ActingContext); 4611 // [class.dtor]p2: A destructor can be invoked for a const, volatile or 4612 // const volatile object. 4613 unsigned Quals = isa<CXXDestructorDecl>(Method) ? 4614 Qualifiers::Const | Qualifiers::Volatile : Method->getTypeQualifiers(); 4615 QualType ImplicitParamType = S.Context.getCVRQualifiedType(ClassType, Quals); 4616 4617 // Set up the conversion sequence as a "bad" conversion, to allow us 4618 // to exit early. 4619 ImplicitConversionSequence ICS; 4620 4621 // We need to have an object of class type. 4622 QualType FromType = OrigFromType; 4623 if (const PointerType *PT = FromType->getAs<PointerType>()) { 4624 FromType = PT->getPointeeType(); 4625 4626 // When we had a pointer, it's implicitly dereferenced, so we 4627 // better have an lvalue. 4628 assert(FromClassification.isLValue()); 4629 } 4630 4631 assert(FromType->isRecordType()); 4632 4633 // C++0x [over.match.funcs]p4: 4634 // For non-static member functions, the type of the implicit object 4635 // parameter is 4636 // 4637 // - "lvalue reference to cv X" for functions declared without a 4638 // ref-qualifier or with the & ref-qualifier 4639 // - "rvalue reference to cv X" for functions declared with the && 4640 // ref-qualifier 4641 // 4642 // where X is the class of which the function is a member and cv is the 4643 // cv-qualification on the member function declaration. 4644 // 4645 // However, when finding an implicit conversion sequence for the argument, we 4646 // are not allowed to create temporaries or perform user-defined conversions 4647 // (C++ [over.match.funcs]p5). We perform a simplified version of 4648 // reference binding here, that allows class rvalues to bind to 4649 // non-constant references. 4650 4651 // First check the qualifiers. 4652 QualType FromTypeCanon = S.Context.getCanonicalType(FromType); 4653 if (ImplicitParamType.getCVRQualifiers() 4654 != FromTypeCanon.getLocalCVRQualifiers() && 4655 !ImplicitParamType.isAtLeastAsQualifiedAs(FromTypeCanon)) { 4656 ICS.setBad(BadConversionSequence::bad_qualifiers, 4657 OrigFromType, ImplicitParamType); 4658 return ICS; 4659 } 4660 4661 // Check that we have either the same type or a derived type. It 4662 // affects the conversion rank. 4663 QualType ClassTypeCanon = S.Context.getCanonicalType(ClassType); 4664 ImplicitConversionKind SecondKind; 4665 if (ClassTypeCanon == FromTypeCanon.getLocalUnqualifiedType()) { 4666 SecondKind = ICK_Identity; 4667 } else if (S.IsDerivedFrom(FromType, ClassType)) 4668 SecondKind = ICK_Derived_To_Base; 4669 else { 4670 ICS.setBad(BadConversionSequence::unrelated_class, 4671 FromType, ImplicitParamType); 4672 return ICS; 4673 } 4674 4675 // Check the ref-qualifier. 4676 switch (Method->getRefQualifier()) { 4677 case RQ_None: 4678 // Do nothing; we don't care about lvalueness or rvalueness. 4679 break; 4680 4681 case RQ_LValue: 4682 if (!FromClassification.isLValue() && Quals != Qualifiers::Const) { 4683 // non-const lvalue reference cannot bind to an rvalue 4684 ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, FromType, 4685 ImplicitParamType); 4686 return ICS; 4687 } 4688 break; 4689 4690 case RQ_RValue: 4691 if (!FromClassification.isRValue()) { 4692 // rvalue reference cannot bind to an lvalue 4693 ICS.setBad(BadConversionSequence::rvalue_ref_to_lvalue, FromType, 4694 ImplicitParamType); 4695 return ICS; 4696 } 4697 break; 4698 } 4699 4700 // Success. Mark this as a reference binding. 4701 ICS.setStandard(); 4702 ICS.Standard.setAsIdentityConversion(); 4703 ICS.Standard.Second = SecondKind; 4704 ICS.Standard.setFromType(FromType); 4705 ICS.Standard.setAllToTypes(ImplicitParamType); 4706 ICS.Standard.ReferenceBinding = true; 4707 ICS.Standard.DirectBinding = true; 4708 ICS.Standard.IsLvalueReference = Method->getRefQualifier() != RQ_RValue; 4709 ICS.Standard.BindsToFunctionLvalue = false; 4710 ICS.Standard.BindsToRvalue = FromClassification.isRValue(); 4711 ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier 4712 = (Method->getRefQualifier() == RQ_None); 4713 return ICS; 4714} 4715 4716/// PerformObjectArgumentInitialization - Perform initialization of 4717/// the implicit object parameter for the given Method with the given 4718/// expression. 4719ExprResult 4720Sema::PerformObjectArgumentInitialization(Expr *From, 4721 NestedNameSpecifier *Qualifier, 4722 NamedDecl *FoundDecl, 4723 CXXMethodDecl *Method) { 4724 QualType FromRecordType, DestType; 4725 QualType ImplicitParamRecordType = 4726 Method->getThisType(Context)->getAs<PointerType>()->getPointeeType(); 4727 4728 Expr::Classification FromClassification; 4729 if (const PointerType *PT = From->getType()->getAs<PointerType>()) { 4730 FromRecordType = PT->getPointeeType(); 4731 DestType = Method->getThisType(Context); 4732 FromClassification = Expr::Classification::makeSimpleLValue(); 4733 } else { 4734 FromRecordType = From->getType(); 4735 DestType = ImplicitParamRecordType; 4736 FromClassification = From->Classify(Context); 4737 } 4738 4739 // Note that we always use the true parent context when performing 4740 // the actual argument initialization. 4741 ImplicitConversionSequence ICS 4742 = TryObjectArgumentInitialization(*this, From->getType(), FromClassification, 4743 Method, Method->getParent()); 4744 if (ICS.isBad()) { 4745 if (ICS.Bad.Kind == BadConversionSequence::bad_qualifiers) { 4746 Qualifiers FromQs = FromRecordType.getQualifiers(); 4747 Qualifiers ToQs = DestType.getQualifiers(); 4748 unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers(); 4749 if (CVR) { 4750 Diag(From->getLocStart(), 4751 diag::err_member_function_call_bad_cvr) 4752 << Method->getDeclName() << FromRecordType << (CVR - 1) 4753 << From->getSourceRange(); 4754 Diag(Method->getLocation(), diag::note_previous_decl) 4755 << Method->getDeclName(); 4756 return ExprError(); 4757 } 4758 } 4759 4760 return Diag(From->getLocStart(), 4761 diag::err_implicit_object_parameter_init) 4762 << ImplicitParamRecordType << FromRecordType << From->getSourceRange(); 4763 } 4764 4765 if (ICS.Standard.Second == ICK_Derived_To_Base) { 4766 ExprResult FromRes = 4767 PerformObjectMemberConversion(From, Qualifier, FoundDecl, Method); 4768 if (FromRes.isInvalid()) 4769 return ExprError(); 4770 From = FromRes.take(); 4771 } 4772 4773 if (!Context.hasSameType(From->getType(), DestType)) 4774 From = ImpCastExprToType(From, DestType, CK_NoOp, 4775 From->getValueKind()).take(); 4776 return Owned(From); 4777} 4778 4779/// TryContextuallyConvertToBool - Attempt to contextually convert the 4780/// expression From to bool (C++0x [conv]p3). 4781static ImplicitConversionSequence 4782TryContextuallyConvertToBool(Sema &S, Expr *From) { 4783 // FIXME: This is pretty broken. 4784 return TryImplicitConversion(S, From, S.Context.BoolTy, 4785 // FIXME: Are these flags correct? 4786 /*SuppressUserConversions=*/false, 4787 /*AllowExplicit=*/true, 4788 /*InOverloadResolution=*/false, 4789 /*CStyle=*/false, 4790 /*AllowObjCWritebackConversion=*/false); 4791} 4792 4793/// PerformContextuallyConvertToBool - Perform a contextual conversion 4794/// of the expression From to bool (C++0x [conv]p3). 4795ExprResult Sema::PerformContextuallyConvertToBool(Expr *From) { 4796 if (checkPlaceholderForOverload(*this, From)) 4797 return ExprError(); 4798 4799 ImplicitConversionSequence ICS = TryContextuallyConvertToBool(*this, From); 4800 if (!ICS.isBad()) 4801 return PerformImplicitConversion(From, Context.BoolTy, ICS, AA_Converting); 4802 4803 if (!DiagnoseMultipleUserDefinedConversion(From, Context.BoolTy)) 4804 return Diag(From->getLocStart(), 4805 diag::err_typecheck_bool_condition) 4806 << From->getType() << From->getSourceRange(); 4807 return ExprError(); 4808} 4809 4810/// Check that the specified conversion is permitted in a converted constant 4811/// expression, according to C++11 [expr.const]p3. Return true if the conversion 4812/// is acceptable. 4813static bool CheckConvertedConstantConversions(Sema &S, 4814 StandardConversionSequence &SCS) { 4815 // Since we know that the target type is an integral or unscoped enumeration 4816 // type, most conversion kinds are impossible. All possible First and Third 4817 // conversions are fine. 4818 switch (SCS.Second) { 4819 case ICK_Identity: 4820 case ICK_Integral_Promotion: 4821 case ICK_Integral_Conversion: 4822 return true; 4823 4824 case ICK_Boolean_Conversion: 4825 // Conversion from an integral or unscoped enumeration type to bool is 4826 // classified as ICK_Boolean_Conversion, but it's also an integral 4827 // conversion, so it's permitted in a converted constant expression. 4828 return SCS.getFromType()->isIntegralOrUnscopedEnumerationType() && 4829 SCS.getToType(2)->isBooleanType(); 4830 4831 case ICK_Floating_Integral: 4832 case ICK_Complex_Real: 4833 return false; 4834 4835 case ICK_Lvalue_To_Rvalue: 4836 case ICK_Array_To_Pointer: 4837 case ICK_Function_To_Pointer: 4838 case ICK_NoReturn_Adjustment: 4839 case ICK_Qualification: 4840 case ICK_Compatible_Conversion: 4841 case ICK_Vector_Conversion: 4842 case ICK_Vector_Splat: 4843 case ICK_Derived_To_Base: 4844 case ICK_Pointer_Conversion: 4845 case ICK_Pointer_Member: 4846 case ICK_Block_Pointer_Conversion: 4847 case ICK_Writeback_Conversion: 4848 case ICK_Floating_Promotion: 4849 case ICK_Complex_Promotion: 4850 case ICK_Complex_Conversion: 4851 case ICK_Floating_Conversion: 4852 case ICK_TransparentUnionConversion: 4853 llvm_unreachable("unexpected second conversion kind"); 4854 4855 case ICK_Num_Conversion_Kinds: 4856 break; 4857 } 4858 4859 llvm_unreachable("unknown conversion kind"); 4860} 4861 4862/// CheckConvertedConstantExpression - Check that the expression From is a 4863/// converted constant expression of type T, perform the conversion and produce 4864/// the converted expression, per C++11 [expr.const]p3. 4865ExprResult Sema::CheckConvertedConstantExpression(Expr *From, QualType T, 4866 llvm::APSInt &Value, 4867 CCEKind CCE) { 4868 assert(LangOpts.CPlusPlus0x && "converted constant expression outside C++11"); 4869 assert(T->isIntegralOrEnumerationType() && "unexpected converted const type"); 4870 4871 if (checkPlaceholderForOverload(*this, From)) 4872 return ExprError(); 4873 4874 // C++11 [expr.const]p3 with proposed wording fixes: 4875 // A converted constant expression of type T is a core constant expression, 4876 // implicitly converted to a prvalue of type T, where the converted 4877 // expression is a literal constant expression and the implicit conversion 4878 // sequence contains only user-defined conversions, lvalue-to-rvalue 4879 // conversions, integral promotions, and integral conversions other than 4880 // narrowing conversions. 4881 ImplicitConversionSequence ICS = 4882 TryImplicitConversion(From, T, 4883 /*SuppressUserConversions=*/false, 4884 /*AllowExplicit=*/false, 4885 /*InOverloadResolution=*/false, 4886 /*CStyle=*/false, 4887 /*AllowObjcWritebackConversion=*/false); 4888 StandardConversionSequence *SCS = 0; 4889 switch (ICS.getKind()) { 4890 case ImplicitConversionSequence::StandardConversion: 4891 if (!CheckConvertedConstantConversions(*this, ICS.Standard)) 4892 return Diag(From->getLocStart(), 4893 diag::err_typecheck_converted_constant_expression_disallowed) 4894 << From->getType() << From->getSourceRange() << T; 4895 SCS = &ICS.Standard; 4896 break; 4897 case ImplicitConversionSequence::UserDefinedConversion: 4898 // We are converting from class type to an integral or enumeration type, so 4899 // the Before sequence must be trivial. 4900 if (!CheckConvertedConstantConversions(*this, ICS.UserDefined.After)) 4901 return Diag(From->getLocStart(), 4902 diag::err_typecheck_converted_constant_expression_disallowed) 4903 << From->getType() << From->getSourceRange() << T; 4904 SCS = &ICS.UserDefined.After; 4905 break; 4906 case ImplicitConversionSequence::AmbiguousConversion: 4907 case ImplicitConversionSequence::BadConversion: 4908 if (!DiagnoseMultipleUserDefinedConversion(From, T)) 4909 return Diag(From->getLocStart(), 4910 diag::err_typecheck_converted_constant_expression) 4911 << From->getType() << From->getSourceRange() << T; 4912 return ExprError(); 4913 4914 case ImplicitConversionSequence::EllipsisConversion: 4915 llvm_unreachable("ellipsis conversion in converted constant expression"); 4916 } 4917 4918 ExprResult Result = PerformImplicitConversion(From, T, ICS, AA_Converting); 4919 if (Result.isInvalid()) 4920 return Result; 4921 4922 // Check for a narrowing implicit conversion. 4923 APValue PreNarrowingValue; 4924 QualType PreNarrowingType; 4925 switch (SCS->getNarrowingKind(Context, Result.get(), PreNarrowingValue, 4926 PreNarrowingType)) { 4927 case NK_Variable_Narrowing: 4928 // Implicit conversion to a narrower type, and the value is not a constant 4929 // expression. We'll diagnose this in a moment. 4930 case NK_Not_Narrowing: 4931 break; 4932 4933 case NK_Constant_Narrowing: 4934 Diag(From->getLocStart(), 4935 isSFINAEContext() ? diag::err_cce_narrowing_sfinae : 4936 diag::err_cce_narrowing) 4937 << CCE << /*Constant*/1 4938 << PreNarrowingValue.getAsString(Context, PreNarrowingType) << T; 4939 break; 4940 4941 case NK_Type_Narrowing: 4942 Diag(From->getLocStart(), 4943 isSFINAEContext() ? diag::err_cce_narrowing_sfinae : 4944 diag::err_cce_narrowing) 4945 << CCE << /*Constant*/0 << From->getType() << T; 4946 break; 4947 } 4948 4949 // Check the expression is a constant expression. 4950 llvm::SmallVector<PartialDiagnosticAt, 8> Notes; 4951 Expr::EvalResult Eval; 4952 Eval.Diag = &Notes; 4953 4954 if (!Result.get()->EvaluateAsRValue(Eval, Context)) { 4955 // The expression can't be folded, so we can't keep it at this position in 4956 // the AST. 4957 Result = ExprError(); 4958 } else { 4959 Value = Eval.Val.getInt(); 4960 4961 if (Notes.empty()) { 4962 // It's a constant expression. 4963 return Result; 4964 } 4965 } 4966 4967 // It's not a constant expression. Produce an appropriate diagnostic. 4968 if (Notes.size() == 1 && 4969 Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr) 4970 Diag(Notes[0].first, diag::err_expr_not_cce) << CCE; 4971 else { 4972 Diag(From->getLocStart(), diag::err_expr_not_cce) 4973 << CCE << From->getSourceRange(); 4974 for (unsigned I = 0; I < Notes.size(); ++I) 4975 Diag(Notes[I].first, Notes[I].second); 4976 } 4977 return Result; 4978} 4979 4980/// dropPointerConversions - If the given standard conversion sequence 4981/// involves any pointer conversions, remove them. This may change 4982/// the result type of the conversion sequence. 4983static void dropPointerConversion(StandardConversionSequence &SCS) { 4984 if (SCS.Second == ICK_Pointer_Conversion) { 4985 SCS.Second = ICK_Identity; 4986 SCS.Third = ICK_Identity; 4987 SCS.ToTypePtrs[2] = SCS.ToTypePtrs[1] = SCS.ToTypePtrs[0]; 4988 } 4989} 4990 4991/// TryContextuallyConvertToObjCPointer - Attempt to contextually 4992/// convert the expression From to an Objective-C pointer type. 4993static ImplicitConversionSequence 4994TryContextuallyConvertToObjCPointer(Sema &S, Expr *From) { 4995 // Do an implicit conversion to 'id'. 4996 QualType Ty = S.Context.getObjCIdType(); 4997 ImplicitConversionSequence ICS 4998 = TryImplicitConversion(S, From, Ty, 4999 // FIXME: Are these flags correct? 5000 /*SuppressUserConversions=*/false, 5001 /*AllowExplicit=*/true, 5002 /*InOverloadResolution=*/false, 5003 /*CStyle=*/false, 5004 /*AllowObjCWritebackConversion=*/false); 5005 5006 // Strip off any final conversions to 'id'. 5007 switch (ICS.getKind()) { 5008 case ImplicitConversionSequence::BadConversion: 5009 case ImplicitConversionSequence::AmbiguousConversion: 5010 case ImplicitConversionSequence::EllipsisConversion: 5011 break; 5012 5013 case ImplicitConversionSequence::UserDefinedConversion: 5014 dropPointerConversion(ICS.UserDefined.After); 5015 break; 5016 5017 case ImplicitConversionSequence::StandardConversion: 5018 dropPointerConversion(ICS.Standard); 5019 break; 5020 } 5021 5022 return ICS; 5023} 5024 5025/// PerformContextuallyConvertToObjCPointer - Perform a contextual 5026/// conversion of the expression From to an Objective-C pointer type. 5027ExprResult Sema::PerformContextuallyConvertToObjCPointer(Expr *From) { 5028 if (checkPlaceholderForOverload(*this, From)) 5029 return ExprError(); 5030 5031 QualType Ty = Context.getObjCIdType(); 5032 ImplicitConversionSequence ICS = 5033 TryContextuallyConvertToObjCPointer(*this, From); 5034 if (!ICS.isBad()) 5035 return PerformImplicitConversion(From, Ty, ICS, AA_Converting); 5036 return ExprError(); 5037} 5038 5039/// Determine whether the provided type is an integral type, or an enumeration 5040/// type of a permitted flavor. 5041static bool isIntegralOrEnumerationType(QualType T, bool AllowScopedEnum) { 5042 return AllowScopedEnum ? T->isIntegralOrEnumerationType() 5043 : T->isIntegralOrUnscopedEnumerationType(); 5044} 5045 5046/// \brief Attempt to convert the given expression to an integral or 5047/// enumeration type. 5048/// 5049/// This routine will attempt to convert an expression of class type to an 5050/// integral or enumeration type, if that class type only has a single 5051/// conversion to an integral or enumeration type. 5052/// 5053/// \param Loc The source location of the construct that requires the 5054/// conversion. 5055/// 5056/// \param From The expression we're converting from. 5057/// 5058/// \param Diagnoser Used to output any diagnostics. 5059/// 5060/// \param AllowScopedEnumerations Specifies whether conversions to scoped 5061/// enumerations should be considered. 5062/// 5063/// \returns The expression, converted to an integral or enumeration type if 5064/// successful. 5065ExprResult 5066Sema::ConvertToIntegralOrEnumerationType(SourceLocation Loc, Expr *From, 5067 ICEConvertDiagnoser &Diagnoser, 5068 bool AllowScopedEnumerations) { 5069 // We can't perform any more checking for type-dependent expressions. 5070 if (From->isTypeDependent()) 5071 return Owned(From); 5072 5073 // Process placeholders immediately. 5074 if (From->hasPlaceholderType()) { 5075 ExprResult result = CheckPlaceholderExpr(From); 5076 if (result.isInvalid()) return result; 5077 From = result.take(); 5078 } 5079 5080 // If the expression already has integral or enumeration type, we're golden. 5081 QualType T = From->getType(); 5082 if (isIntegralOrEnumerationType(T, AllowScopedEnumerations)) 5083 return DefaultLvalueConversion(From); 5084 5085 // FIXME: Check for missing '()' if T is a function type? 5086 5087 // If we don't have a class type in C++, there's no way we can get an 5088 // expression of integral or enumeration type. 5089 const RecordType *RecordTy = T->getAs<RecordType>(); 5090 if (!RecordTy || !getLangOpts().CPlusPlus) { 5091 if (!Diagnoser.Suppress) 5092 Diagnoser.diagnoseNotInt(*this, Loc, T) << From->getSourceRange(); 5093 return Owned(From); 5094 } 5095 5096 // We must have a complete class type. 5097 struct TypeDiagnoserPartialDiag : TypeDiagnoser { 5098 ICEConvertDiagnoser &Diagnoser; 5099 Expr *From; 5100 5101 TypeDiagnoserPartialDiag(ICEConvertDiagnoser &Diagnoser, Expr *From) 5102 : TypeDiagnoser(Diagnoser.Suppress), Diagnoser(Diagnoser), From(From) {} 5103 5104 virtual void diagnose(Sema &S, SourceLocation Loc, QualType T) { 5105 Diagnoser.diagnoseIncomplete(S, Loc, T) << From->getSourceRange(); 5106 } 5107 } IncompleteDiagnoser(Diagnoser, From); 5108 5109 if (RequireCompleteType(Loc, T, IncompleteDiagnoser)) 5110 return Owned(From); 5111 5112 // Look for a conversion to an integral or enumeration type. 5113 UnresolvedSet<4> ViableConversions; 5114 UnresolvedSet<4> ExplicitConversions; 5115 const UnresolvedSetImpl *Conversions 5116 = cast<CXXRecordDecl>(RecordTy->getDecl())->getVisibleConversionFunctions(); 5117 5118 bool HadMultipleCandidates = (Conversions->size() > 1); 5119 5120 for (UnresolvedSetImpl::iterator I = Conversions->begin(), 5121 E = Conversions->end(); 5122 I != E; 5123 ++I) { 5124 if (CXXConversionDecl *Conversion 5125 = dyn_cast<CXXConversionDecl>((*I)->getUnderlyingDecl())) { 5126 if (isIntegralOrEnumerationType( 5127 Conversion->getConversionType().getNonReferenceType(), 5128 AllowScopedEnumerations)) { 5129 if (Conversion->isExplicit()) 5130 ExplicitConversions.addDecl(I.getDecl(), I.getAccess()); 5131 else 5132 ViableConversions.addDecl(I.getDecl(), I.getAccess()); 5133 } 5134 } 5135 } 5136 5137 switch (ViableConversions.size()) { 5138 case 0: 5139 if (ExplicitConversions.size() == 1 && !Diagnoser.Suppress) { 5140 DeclAccessPair Found = ExplicitConversions[0]; 5141 CXXConversionDecl *Conversion 5142 = cast<CXXConversionDecl>(Found->getUnderlyingDecl()); 5143 5144 // The user probably meant to invoke the given explicit 5145 // conversion; use it. 5146 QualType ConvTy 5147 = Conversion->getConversionType().getNonReferenceType(); 5148 std::string TypeStr; 5149 ConvTy.getAsStringInternal(TypeStr, getPrintingPolicy()); 5150 5151 Diagnoser.diagnoseExplicitConv(*this, Loc, T, ConvTy) 5152 << FixItHint::CreateInsertion(From->getLocStart(), 5153 "static_cast<" + TypeStr + ">(") 5154 << FixItHint::CreateInsertion(PP.getLocForEndOfToken(From->getLocEnd()), 5155 ")"); 5156 Diagnoser.noteExplicitConv(*this, Conversion, ConvTy); 5157 5158 // If we aren't in a SFINAE context, build a call to the 5159 // explicit conversion function. 5160 if (isSFINAEContext()) 5161 return ExprError(); 5162 5163 CheckMemberOperatorAccess(From->getExprLoc(), From, 0, Found); 5164 ExprResult Result = BuildCXXMemberCallExpr(From, Found, Conversion, 5165 HadMultipleCandidates); 5166 if (Result.isInvalid()) 5167 return ExprError(); 5168 // Record usage of conversion in an implicit cast. 5169 From = ImplicitCastExpr::Create(Context, Result.get()->getType(), 5170 CK_UserDefinedConversion, 5171 Result.get(), 0, 5172 Result.get()->getValueKind()); 5173 } 5174 5175 // We'll complain below about a non-integral condition type. 5176 break; 5177 5178 case 1: { 5179 // Apply this conversion. 5180 DeclAccessPair Found = ViableConversions[0]; 5181 CheckMemberOperatorAccess(From->getExprLoc(), From, 0, Found); 5182 5183 CXXConversionDecl *Conversion 5184 = cast<CXXConversionDecl>(Found->getUnderlyingDecl()); 5185 QualType ConvTy 5186 = Conversion->getConversionType().getNonReferenceType(); 5187 if (!Diagnoser.SuppressConversion) { 5188 if (isSFINAEContext()) 5189 return ExprError(); 5190 5191 Diagnoser.diagnoseConversion(*this, Loc, T, ConvTy) 5192 << From->getSourceRange(); 5193 } 5194 5195 ExprResult Result = BuildCXXMemberCallExpr(From, Found, Conversion, 5196 HadMultipleCandidates); 5197 if (Result.isInvalid()) 5198 return ExprError(); 5199 // Record usage of conversion in an implicit cast. 5200 From = ImplicitCastExpr::Create(Context, Result.get()->getType(), 5201 CK_UserDefinedConversion, 5202 Result.get(), 0, 5203 Result.get()->getValueKind()); 5204 break; 5205 } 5206 5207 default: 5208 if (Diagnoser.Suppress) 5209 return ExprError(); 5210 5211 Diagnoser.diagnoseAmbiguous(*this, Loc, T) << From->getSourceRange(); 5212 for (unsigned I = 0, N = ViableConversions.size(); I != N; ++I) { 5213 CXXConversionDecl *Conv 5214 = cast<CXXConversionDecl>(ViableConversions[I]->getUnderlyingDecl()); 5215 QualType ConvTy = Conv->getConversionType().getNonReferenceType(); 5216 Diagnoser.noteAmbiguous(*this, Conv, ConvTy); 5217 } 5218 return Owned(From); 5219 } 5220 5221 if (!isIntegralOrEnumerationType(From->getType(), AllowScopedEnumerations) && 5222 !Diagnoser.Suppress) { 5223 Diagnoser.diagnoseNotInt(*this, Loc, From->getType()) 5224 << From->getSourceRange(); 5225 } 5226 5227 return DefaultLvalueConversion(From); 5228} 5229 5230/// AddOverloadCandidate - Adds the given function to the set of 5231/// candidate functions, using the given function call arguments. If 5232/// @p SuppressUserConversions, then don't allow user-defined 5233/// conversions via constructors or conversion operators. 5234/// 5235/// \param PartialOverloading true if we are performing "partial" overloading 5236/// based on an incomplete set of function arguments. This feature is used by 5237/// code completion. 5238void 5239Sema::AddOverloadCandidate(FunctionDecl *Function, 5240 DeclAccessPair FoundDecl, 5241 llvm::ArrayRef<Expr *> Args, 5242 OverloadCandidateSet& CandidateSet, 5243 bool SuppressUserConversions, 5244 bool PartialOverloading, 5245 bool AllowExplicit) { 5246 const FunctionProtoType* Proto 5247 = dyn_cast<FunctionProtoType>(Function->getType()->getAs<FunctionType>()); 5248 assert(Proto && "Functions without a prototype cannot be overloaded"); 5249 assert(!Function->getDescribedFunctionTemplate() && 5250 "Use AddTemplateOverloadCandidate for function templates"); 5251 5252 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Function)) { 5253 if (!isa<CXXConstructorDecl>(Method)) { 5254 // If we get here, it's because we're calling a member function 5255 // that is named without a member access expression (e.g., 5256 // "this->f") that was either written explicitly or created 5257 // implicitly. This can happen with a qualified call to a member 5258 // function, e.g., X::f(). We use an empty type for the implied 5259 // object argument (C++ [over.call.func]p3), and the acting context 5260 // is irrelevant. 5261 AddMethodCandidate(Method, FoundDecl, Method->getParent(), 5262 QualType(), Expr::Classification::makeSimpleLValue(), 5263 Args, CandidateSet, SuppressUserConversions); 5264 return; 5265 } 5266 // We treat a constructor like a non-member function, since its object 5267 // argument doesn't participate in overload resolution. 5268 } 5269 5270 if (!CandidateSet.isNewCandidate(Function)) 5271 return; 5272 5273 // Overload resolution is always an unevaluated context. 5274 EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated); 5275 5276 if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Function)){ 5277 // C++ [class.copy]p3: 5278 // A member function template is never instantiated to perform the copy 5279 // of a class object to an object of its class type. 5280 QualType ClassType = Context.getTypeDeclType(Constructor->getParent()); 5281 if (Args.size() == 1 && 5282 Constructor->isSpecializationCopyingObject() && 5283 (Context.hasSameUnqualifiedType(ClassType, Args[0]->getType()) || 5284 IsDerivedFrom(Args[0]->getType(), ClassType))) 5285 return; 5286 } 5287 5288 // Add this candidate 5289 OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size()); 5290 Candidate.FoundDecl = FoundDecl; 5291 Candidate.Function = Function; 5292 Candidate.Viable = true; 5293 Candidate.IsSurrogate = false; 5294 Candidate.IgnoreObjectArgument = false; 5295 Candidate.ExplicitCallArguments = Args.size(); 5296 5297 unsigned NumArgsInProto = Proto->getNumArgs(); 5298 5299 // (C++ 13.3.2p2): A candidate function having fewer than m 5300 // parameters is viable only if it has an ellipsis in its parameter 5301 // list (8.3.5). 5302 if ((Args.size() + (PartialOverloading && Args.size())) > NumArgsInProto && 5303 !Proto->isVariadic()) { 5304 Candidate.Viable = false; 5305 Candidate.FailureKind = ovl_fail_too_many_arguments; 5306 return; 5307 } 5308 5309 // (C++ 13.3.2p2): A candidate function having more than m parameters 5310 // is viable only if the (m+1)st parameter has a default argument 5311 // (8.3.6). For the purposes of overload resolution, the 5312 // parameter list is truncated on the right, so that there are 5313 // exactly m parameters. 5314 unsigned MinRequiredArgs = Function->getMinRequiredArguments(); 5315 if (Args.size() < MinRequiredArgs && !PartialOverloading) { 5316 // Not enough arguments. 5317 Candidate.Viable = false; 5318 Candidate.FailureKind = ovl_fail_too_few_arguments; 5319 return; 5320 } 5321 5322 // (CUDA B.1): Check for invalid calls between targets. 5323 if (getLangOpts().CUDA) 5324 if (const FunctionDecl *Caller = dyn_cast<FunctionDecl>(CurContext)) 5325 if (CheckCUDATarget(Caller, Function)) { 5326 Candidate.Viable = false; 5327 Candidate.FailureKind = ovl_fail_bad_target; 5328 return; 5329 } 5330 5331 // Determine the implicit conversion sequences for each of the 5332 // arguments. 5333 for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) { 5334 if (ArgIdx < NumArgsInProto) { 5335 // (C++ 13.3.2p3): for F to be a viable function, there shall 5336 // exist for each argument an implicit conversion sequence 5337 // (13.3.3.1) that converts that argument to the corresponding 5338 // parameter of F. 5339 QualType ParamType = Proto->getArgType(ArgIdx); 5340 Candidate.Conversions[ArgIdx] 5341 = TryCopyInitialization(*this, Args[ArgIdx], ParamType, 5342 SuppressUserConversions, 5343 /*InOverloadResolution=*/true, 5344 /*AllowObjCWritebackConversion=*/ 5345 getLangOpts().ObjCAutoRefCount, 5346 AllowExplicit); 5347 if (Candidate.Conversions[ArgIdx].isBad()) { 5348 Candidate.Viable = false; 5349 Candidate.FailureKind = ovl_fail_bad_conversion; 5350 break; 5351 } 5352 } else { 5353 // (C++ 13.3.2p2): For the purposes of overload resolution, any 5354 // argument for which there is no corresponding parameter is 5355 // considered to ""match the ellipsis" (C+ 13.3.3.1.3). 5356 Candidate.Conversions[ArgIdx].setEllipsis(); 5357 } 5358 } 5359} 5360 5361/// \brief Add all of the function declarations in the given function set to 5362/// the overload canddiate set. 5363void Sema::AddFunctionCandidates(const UnresolvedSetImpl &Fns, 5364 llvm::ArrayRef<Expr *> Args, 5365 OverloadCandidateSet& CandidateSet, 5366 bool SuppressUserConversions, 5367 TemplateArgumentListInfo *ExplicitTemplateArgs) { 5368 for (UnresolvedSetIterator F = Fns.begin(), E = Fns.end(); F != E; ++F) { 5369 NamedDecl *D = F.getDecl()->getUnderlyingDecl(); 5370 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { 5371 if (isa<CXXMethodDecl>(FD) && !cast<CXXMethodDecl>(FD)->isStatic()) 5372 AddMethodCandidate(cast<CXXMethodDecl>(FD), F.getPair(), 5373 cast<CXXMethodDecl>(FD)->getParent(), 5374 Args[0]->getType(), Args[0]->Classify(Context), 5375 Args.slice(1), CandidateSet, 5376 SuppressUserConversions); 5377 else 5378 AddOverloadCandidate(FD, F.getPair(), Args, CandidateSet, 5379 SuppressUserConversions); 5380 } else { 5381 FunctionTemplateDecl *FunTmpl = cast<FunctionTemplateDecl>(D); 5382 if (isa<CXXMethodDecl>(FunTmpl->getTemplatedDecl()) && 5383 !cast<CXXMethodDecl>(FunTmpl->getTemplatedDecl())->isStatic()) 5384 AddMethodTemplateCandidate(FunTmpl, F.getPair(), 5385 cast<CXXRecordDecl>(FunTmpl->getDeclContext()), 5386 ExplicitTemplateArgs, 5387 Args[0]->getType(), 5388 Args[0]->Classify(Context), Args.slice(1), 5389 CandidateSet, SuppressUserConversions); 5390 else 5391 AddTemplateOverloadCandidate(FunTmpl, F.getPair(), 5392 ExplicitTemplateArgs, Args, 5393 CandidateSet, SuppressUserConversions); 5394 } 5395 } 5396} 5397 5398/// AddMethodCandidate - Adds a named decl (which is some kind of 5399/// method) as a method candidate to the given overload set. 5400void Sema::AddMethodCandidate(DeclAccessPair FoundDecl, 5401 QualType ObjectType, 5402 Expr::Classification ObjectClassification, 5403 Expr **Args, unsigned NumArgs, 5404 OverloadCandidateSet& CandidateSet, 5405 bool SuppressUserConversions) { 5406 NamedDecl *Decl = FoundDecl.getDecl(); 5407 CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(Decl->getDeclContext()); 5408 5409 if (isa<UsingShadowDecl>(Decl)) 5410 Decl = cast<UsingShadowDecl>(Decl)->getTargetDecl(); 5411 5412 if (FunctionTemplateDecl *TD = dyn_cast<FunctionTemplateDecl>(Decl)) { 5413 assert(isa<CXXMethodDecl>(TD->getTemplatedDecl()) && 5414 "Expected a member function template"); 5415 AddMethodTemplateCandidate(TD, FoundDecl, ActingContext, 5416 /*ExplicitArgs*/ 0, 5417 ObjectType, ObjectClassification, 5418 llvm::makeArrayRef(Args, NumArgs), CandidateSet, 5419 SuppressUserConversions); 5420 } else { 5421 AddMethodCandidate(cast<CXXMethodDecl>(Decl), FoundDecl, ActingContext, 5422 ObjectType, ObjectClassification, 5423 llvm::makeArrayRef(Args, NumArgs), 5424 CandidateSet, SuppressUserConversions); 5425 } 5426} 5427 5428/// AddMethodCandidate - Adds the given C++ member function to the set 5429/// of candidate functions, using the given function call arguments 5430/// and the object argument (@c Object). For example, in a call 5431/// @c o.f(a1,a2), @c Object will contain @c o and @c Args will contain 5432/// both @c a1 and @c a2. If @p SuppressUserConversions, then don't 5433/// allow user-defined conversions via constructors or conversion 5434/// operators. 5435void 5436Sema::AddMethodCandidate(CXXMethodDecl *Method, DeclAccessPair FoundDecl, 5437 CXXRecordDecl *ActingContext, QualType ObjectType, 5438 Expr::Classification ObjectClassification, 5439 llvm::ArrayRef<Expr *> Args, 5440 OverloadCandidateSet& CandidateSet, 5441 bool SuppressUserConversions) { 5442 const FunctionProtoType* Proto 5443 = dyn_cast<FunctionProtoType>(Method->getType()->getAs<FunctionType>()); 5444 assert(Proto && "Methods without a prototype cannot be overloaded"); 5445 assert(!isa<CXXConstructorDecl>(Method) && 5446 "Use AddOverloadCandidate for constructors"); 5447 5448 if (!CandidateSet.isNewCandidate(Method)) 5449 return; 5450 5451 // Overload resolution is always an unevaluated context. 5452 EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated); 5453 5454 // Add this candidate 5455 OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size() + 1); 5456 Candidate.FoundDecl = FoundDecl; 5457 Candidate.Function = Method; 5458 Candidate.IsSurrogate = false; 5459 Candidate.IgnoreObjectArgument = false; 5460 Candidate.ExplicitCallArguments = Args.size(); 5461 5462 unsigned NumArgsInProto = Proto->getNumArgs(); 5463 5464 // (C++ 13.3.2p2): A candidate function having fewer than m 5465 // parameters is viable only if it has an ellipsis in its parameter 5466 // list (8.3.5). 5467 if (Args.size() > NumArgsInProto && !Proto->isVariadic()) { 5468 Candidate.Viable = false; 5469 Candidate.FailureKind = ovl_fail_too_many_arguments; 5470 return; 5471 } 5472 5473 // (C++ 13.3.2p2): A candidate function having more than m parameters 5474 // is viable only if the (m+1)st parameter has a default argument 5475 // (8.3.6). For the purposes of overload resolution, the 5476 // parameter list is truncated on the right, so that there are 5477 // exactly m parameters. 5478 unsigned MinRequiredArgs = Method->getMinRequiredArguments(); 5479 if (Args.size() < MinRequiredArgs) { 5480 // Not enough arguments. 5481 Candidate.Viable = false; 5482 Candidate.FailureKind = ovl_fail_too_few_arguments; 5483 return; 5484 } 5485 5486 Candidate.Viable = true; 5487 5488 if (Method->isStatic() || ObjectType.isNull()) 5489 // The implicit object argument is ignored. 5490 Candidate.IgnoreObjectArgument = true; 5491 else { 5492 // Determine the implicit conversion sequence for the object 5493 // parameter. 5494 Candidate.Conversions[0] 5495 = TryObjectArgumentInitialization(*this, ObjectType, ObjectClassification, 5496 Method, ActingContext); 5497 if (Candidate.Conversions[0].isBad()) { 5498 Candidate.Viable = false; 5499 Candidate.FailureKind = ovl_fail_bad_conversion; 5500 return; 5501 } 5502 } 5503 5504 // Determine the implicit conversion sequences for each of the 5505 // arguments. 5506 for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) { 5507 if (ArgIdx < NumArgsInProto) { 5508 // (C++ 13.3.2p3): for F to be a viable function, there shall 5509 // exist for each argument an implicit conversion sequence 5510 // (13.3.3.1) that converts that argument to the corresponding 5511 // parameter of F. 5512 QualType ParamType = Proto->getArgType(ArgIdx); 5513 Candidate.Conversions[ArgIdx + 1] 5514 = TryCopyInitialization(*this, Args[ArgIdx], ParamType, 5515 SuppressUserConversions, 5516 /*InOverloadResolution=*/true, 5517 /*AllowObjCWritebackConversion=*/ 5518 getLangOpts().ObjCAutoRefCount); 5519 if (Candidate.Conversions[ArgIdx + 1].isBad()) { 5520 Candidate.Viable = false; 5521 Candidate.FailureKind = ovl_fail_bad_conversion; 5522 break; 5523 } 5524 } else { 5525 // (C++ 13.3.2p2): For the purposes of overload resolution, any 5526 // argument for which there is no corresponding parameter is 5527 // considered to ""match the ellipsis" (C+ 13.3.3.1.3). 5528 Candidate.Conversions[ArgIdx + 1].setEllipsis(); 5529 } 5530 } 5531} 5532 5533/// \brief Add a C++ member function template as a candidate to the candidate 5534/// set, using template argument deduction to produce an appropriate member 5535/// function template specialization. 5536void 5537Sema::AddMethodTemplateCandidate(FunctionTemplateDecl *MethodTmpl, 5538 DeclAccessPair FoundDecl, 5539 CXXRecordDecl *ActingContext, 5540 TemplateArgumentListInfo *ExplicitTemplateArgs, 5541 QualType ObjectType, 5542 Expr::Classification ObjectClassification, 5543 llvm::ArrayRef<Expr *> Args, 5544 OverloadCandidateSet& CandidateSet, 5545 bool SuppressUserConversions) { 5546 if (!CandidateSet.isNewCandidate(MethodTmpl)) 5547 return; 5548 5549 // C++ [over.match.funcs]p7: 5550 // In each case where a candidate is a function template, candidate 5551 // function template specializations are generated using template argument 5552 // deduction (14.8.3, 14.8.2). Those candidates are then handled as 5553 // candidate functions in the usual way.113) A given name can refer to one 5554 // or more function templates and also to a set of overloaded non-template 5555 // functions. In such a case, the candidate functions generated from each 5556 // function template are combined with the set of non-template candidate 5557 // functions. 5558 TemplateDeductionInfo Info(CandidateSet.getLocation()); 5559 FunctionDecl *Specialization = 0; 5560 if (TemplateDeductionResult Result 5561 = DeduceTemplateArguments(MethodTmpl, ExplicitTemplateArgs, Args, 5562 Specialization, Info)) { 5563 OverloadCandidate &Candidate = CandidateSet.addCandidate(); 5564 Candidate.FoundDecl = FoundDecl; 5565 Candidate.Function = MethodTmpl->getTemplatedDecl(); 5566 Candidate.Viable = false; 5567 Candidate.FailureKind = ovl_fail_bad_deduction; 5568 Candidate.IsSurrogate = false; 5569 Candidate.IgnoreObjectArgument = false; 5570 Candidate.ExplicitCallArguments = Args.size(); 5571 Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result, 5572 Info); 5573 return; 5574 } 5575 5576 // Add the function template specialization produced by template argument 5577 // deduction as a candidate. 5578 assert(Specialization && "Missing member function template specialization?"); 5579 assert(isa<CXXMethodDecl>(Specialization) && 5580 "Specialization is not a member function?"); 5581 AddMethodCandidate(cast<CXXMethodDecl>(Specialization), FoundDecl, 5582 ActingContext, ObjectType, ObjectClassification, Args, 5583 CandidateSet, SuppressUserConversions); 5584} 5585 5586/// \brief Add a C++ function template specialization as a candidate 5587/// in the candidate set, using template argument deduction to produce 5588/// an appropriate function template specialization. 5589void 5590Sema::AddTemplateOverloadCandidate(FunctionTemplateDecl *FunctionTemplate, 5591 DeclAccessPair FoundDecl, 5592 TemplateArgumentListInfo *ExplicitTemplateArgs, 5593 llvm::ArrayRef<Expr *> Args, 5594 OverloadCandidateSet& CandidateSet, 5595 bool SuppressUserConversions) { 5596 if (!CandidateSet.isNewCandidate(FunctionTemplate)) 5597 return; 5598 5599 // C++ [over.match.funcs]p7: 5600 // In each case where a candidate is a function template, candidate 5601 // function template specializations are generated using template argument 5602 // deduction (14.8.3, 14.8.2). Those candidates are then handled as 5603 // candidate functions in the usual way.113) A given name can refer to one 5604 // or more function templates and also to a set of overloaded non-template 5605 // functions. In such a case, the candidate functions generated from each 5606 // function template are combined with the set of non-template candidate 5607 // functions. 5608 TemplateDeductionInfo Info(CandidateSet.getLocation()); 5609 FunctionDecl *Specialization = 0; 5610 if (TemplateDeductionResult Result 5611 = DeduceTemplateArguments(FunctionTemplate, ExplicitTemplateArgs, Args, 5612 Specialization, Info)) { 5613 OverloadCandidate &Candidate = CandidateSet.addCandidate(); 5614 Candidate.FoundDecl = FoundDecl; 5615 Candidate.Function = FunctionTemplate->getTemplatedDecl(); 5616 Candidate.Viable = false; 5617 Candidate.FailureKind = ovl_fail_bad_deduction; 5618 Candidate.IsSurrogate = false; 5619 Candidate.IgnoreObjectArgument = false; 5620 Candidate.ExplicitCallArguments = Args.size(); 5621 Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result, 5622 Info); 5623 return; 5624 } 5625 5626 // Add the function template specialization produced by template argument 5627 // deduction as a candidate. 5628 assert(Specialization && "Missing function template specialization?"); 5629 AddOverloadCandidate(Specialization, FoundDecl, Args, CandidateSet, 5630 SuppressUserConversions); 5631} 5632 5633/// AddConversionCandidate - Add a C++ conversion function as a 5634/// candidate in the candidate set (C++ [over.match.conv], 5635/// C++ [over.match.copy]). From is the expression we're converting from, 5636/// and ToType is the type that we're eventually trying to convert to 5637/// (which may or may not be the same type as the type that the 5638/// conversion function produces). 5639void 5640Sema::AddConversionCandidate(CXXConversionDecl *Conversion, 5641 DeclAccessPair FoundDecl, 5642 CXXRecordDecl *ActingContext, 5643 Expr *From, QualType ToType, 5644 OverloadCandidateSet& CandidateSet) { 5645 assert(!Conversion->getDescribedFunctionTemplate() && 5646 "Conversion function templates use AddTemplateConversionCandidate"); 5647 QualType ConvType = Conversion->getConversionType().getNonReferenceType(); 5648 if (!CandidateSet.isNewCandidate(Conversion)) 5649 return; 5650 5651 // Overload resolution is always an unevaluated context. 5652 EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated); 5653 5654 // Add this candidate 5655 OverloadCandidate &Candidate = CandidateSet.addCandidate(1); 5656 Candidate.FoundDecl = FoundDecl; 5657 Candidate.Function = Conversion; 5658 Candidate.IsSurrogate = false; 5659 Candidate.IgnoreObjectArgument = false; 5660 Candidate.FinalConversion.setAsIdentityConversion(); 5661 Candidate.FinalConversion.setFromType(ConvType); 5662 Candidate.FinalConversion.setAllToTypes(ToType); 5663 Candidate.Viable = true; 5664 Candidate.ExplicitCallArguments = 1; 5665 5666 // C++ [over.match.funcs]p4: 5667 // For conversion functions, the function is considered to be a member of 5668 // the class of the implicit implied object argument for the purpose of 5669 // defining the type of the implicit object parameter. 5670 // 5671 // Determine the implicit conversion sequence for the implicit 5672 // object parameter. 5673 QualType ImplicitParamType = From->getType(); 5674 if (const PointerType *FromPtrType = ImplicitParamType->getAs<PointerType>()) 5675 ImplicitParamType = FromPtrType->getPointeeType(); 5676 CXXRecordDecl *ConversionContext 5677 = cast<CXXRecordDecl>(ImplicitParamType->getAs<RecordType>()->getDecl()); 5678 5679 Candidate.Conversions[0] 5680 = TryObjectArgumentInitialization(*this, From->getType(), 5681 From->Classify(Context), 5682 Conversion, ConversionContext); 5683 5684 if (Candidate.Conversions[0].isBad()) { 5685 Candidate.Viable = false; 5686 Candidate.FailureKind = ovl_fail_bad_conversion; 5687 return; 5688 } 5689 5690 // We won't go through a user-define type conversion function to convert a 5691 // derived to base as such conversions are given Conversion Rank. They only 5692 // go through a copy constructor. 13.3.3.1.2-p4 [over.ics.user] 5693 QualType FromCanon 5694 = Context.getCanonicalType(From->getType().getUnqualifiedType()); 5695 QualType ToCanon = Context.getCanonicalType(ToType).getUnqualifiedType(); 5696 if (FromCanon == ToCanon || IsDerivedFrom(FromCanon, ToCanon)) { 5697 Candidate.Viable = false; 5698 Candidate.FailureKind = ovl_fail_trivial_conversion; 5699 return; 5700 } 5701 5702 // To determine what the conversion from the result of calling the 5703 // conversion function to the type we're eventually trying to 5704 // convert to (ToType), we need to synthesize a call to the 5705 // conversion function and attempt copy initialization from it. This 5706 // makes sure that we get the right semantics with respect to 5707 // lvalues/rvalues and the type. Fortunately, we can allocate this 5708 // call on the stack and we don't need its arguments to be 5709 // well-formed. 5710 DeclRefExpr ConversionRef(Conversion, false, Conversion->getType(), 5711 VK_LValue, From->getLocStart()); 5712 ImplicitCastExpr ConversionFn(ImplicitCastExpr::OnStack, 5713 Context.getPointerType(Conversion->getType()), 5714 CK_FunctionToPointerDecay, 5715 &ConversionRef, VK_RValue); 5716 5717 QualType ConversionType = Conversion->getConversionType(); 5718 if (RequireCompleteType(From->getLocStart(), ConversionType, 0)) { 5719 Candidate.Viable = false; 5720 Candidate.FailureKind = ovl_fail_bad_final_conversion; 5721 return; 5722 } 5723 5724 ExprValueKind VK = Expr::getValueKindForType(ConversionType); 5725 5726 // Note that it is safe to allocate CallExpr on the stack here because 5727 // there are 0 arguments (i.e., nothing is allocated using ASTContext's 5728 // allocator). 5729 QualType CallResultType = ConversionType.getNonLValueExprType(Context); 5730 CallExpr Call(Context, &ConversionFn, MultiExprArg(), CallResultType, VK, 5731 From->getLocStart()); 5732 ImplicitConversionSequence ICS = 5733 TryCopyInitialization(*this, &Call, ToType, 5734 /*SuppressUserConversions=*/true, 5735 /*InOverloadResolution=*/false, 5736 /*AllowObjCWritebackConversion=*/false); 5737 5738 switch (ICS.getKind()) { 5739 case ImplicitConversionSequence::StandardConversion: 5740 Candidate.FinalConversion = ICS.Standard; 5741 5742 // C++ [over.ics.user]p3: 5743 // If the user-defined conversion is specified by a specialization of a 5744 // conversion function template, the second standard conversion sequence 5745 // shall have exact match rank. 5746 if (Conversion->getPrimaryTemplate() && 5747 GetConversionRank(ICS.Standard.Second) != ICR_Exact_Match) { 5748 Candidate.Viable = false; 5749 Candidate.FailureKind = ovl_fail_final_conversion_not_exact; 5750 } 5751 5752 // C++0x [dcl.init.ref]p5: 5753 // In the second case, if the reference is an rvalue reference and 5754 // the second standard conversion sequence of the user-defined 5755 // conversion sequence includes an lvalue-to-rvalue conversion, the 5756 // program is ill-formed. 5757 if (ToType->isRValueReferenceType() && 5758 ICS.Standard.First == ICK_Lvalue_To_Rvalue) { 5759 Candidate.Viable = false; 5760 Candidate.FailureKind = ovl_fail_bad_final_conversion; 5761 } 5762 break; 5763 5764 case ImplicitConversionSequence::BadConversion: 5765 Candidate.Viable = false; 5766 Candidate.FailureKind = ovl_fail_bad_final_conversion; 5767 break; 5768 5769 default: 5770 llvm_unreachable( 5771 "Can only end up with a standard conversion sequence or failure"); 5772 } 5773} 5774 5775/// \brief Adds a conversion function template specialization 5776/// candidate to the overload set, using template argument deduction 5777/// to deduce the template arguments of the conversion function 5778/// template from the type that we are converting to (C++ 5779/// [temp.deduct.conv]). 5780void 5781Sema::AddTemplateConversionCandidate(FunctionTemplateDecl *FunctionTemplate, 5782 DeclAccessPair FoundDecl, 5783 CXXRecordDecl *ActingDC, 5784 Expr *From, QualType ToType, 5785 OverloadCandidateSet &CandidateSet) { 5786 assert(isa<CXXConversionDecl>(FunctionTemplate->getTemplatedDecl()) && 5787 "Only conversion function templates permitted here"); 5788 5789 if (!CandidateSet.isNewCandidate(FunctionTemplate)) 5790 return; 5791 5792 TemplateDeductionInfo Info(CandidateSet.getLocation()); 5793 CXXConversionDecl *Specialization = 0; 5794 if (TemplateDeductionResult Result 5795 = DeduceTemplateArguments(FunctionTemplate, ToType, 5796 Specialization, Info)) { 5797 OverloadCandidate &Candidate = CandidateSet.addCandidate(); 5798 Candidate.FoundDecl = FoundDecl; 5799 Candidate.Function = FunctionTemplate->getTemplatedDecl(); 5800 Candidate.Viable = false; 5801 Candidate.FailureKind = ovl_fail_bad_deduction; 5802 Candidate.IsSurrogate = false; 5803 Candidate.IgnoreObjectArgument = false; 5804 Candidate.ExplicitCallArguments = 1; 5805 Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result, 5806 Info); 5807 return; 5808 } 5809 5810 // Add the conversion function template specialization produced by 5811 // template argument deduction as a candidate. 5812 assert(Specialization && "Missing function template specialization?"); 5813 AddConversionCandidate(Specialization, FoundDecl, ActingDC, From, ToType, 5814 CandidateSet); 5815} 5816 5817/// AddSurrogateCandidate - Adds a "surrogate" candidate function that 5818/// converts the given @c Object to a function pointer via the 5819/// conversion function @c Conversion, and then attempts to call it 5820/// with the given arguments (C++ [over.call.object]p2-4). Proto is 5821/// the type of function that we'll eventually be calling. 5822void Sema::AddSurrogateCandidate(CXXConversionDecl *Conversion, 5823 DeclAccessPair FoundDecl, 5824 CXXRecordDecl *ActingContext, 5825 const FunctionProtoType *Proto, 5826 Expr *Object, 5827 llvm::ArrayRef<Expr *> Args, 5828 OverloadCandidateSet& CandidateSet) { 5829 if (!CandidateSet.isNewCandidate(Conversion)) 5830 return; 5831 5832 // Overload resolution is always an unevaluated context. 5833 EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated); 5834 5835 OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size() + 1); 5836 Candidate.FoundDecl = FoundDecl; 5837 Candidate.Function = 0; 5838 Candidate.Surrogate = Conversion; 5839 Candidate.Viable = true; 5840 Candidate.IsSurrogate = true; 5841 Candidate.IgnoreObjectArgument = false; 5842 Candidate.ExplicitCallArguments = Args.size(); 5843 5844 // Determine the implicit conversion sequence for the implicit 5845 // object parameter. 5846 ImplicitConversionSequence ObjectInit 5847 = TryObjectArgumentInitialization(*this, Object->getType(), 5848 Object->Classify(Context), 5849 Conversion, ActingContext); 5850 if (ObjectInit.isBad()) { 5851 Candidate.Viable = false; 5852 Candidate.FailureKind = ovl_fail_bad_conversion; 5853 Candidate.Conversions[0] = ObjectInit; 5854 return; 5855 } 5856 5857 // The first conversion is actually a user-defined conversion whose 5858 // first conversion is ObjectInit's standard conversion (which is 5859 // effectively a reference binding). Record it as such. 5860 Candidate.Conversions[0].setUserDefined(); 5861 Candidate.Conversions[0].UserDefined.Before = ObjectInit.Standard; 5862 Candidate.Conversions[0].UserDefined.EllipsisConversion = false; 5863 Candidate.Conversions[0].UserDefined.HadMultipleCandidates = false; 5864 Candidate.Conversions[0].UserDefined.ConversionFunction = Conversion; 5865 Candidate.Conversions[0].UserDefined.FoundConversionFunction = FoundDecl; 5866 Candidate.Conversions[0].UserDefined.After 5867 = Candidate.Conversions[0].UserDefined.Before; 5868 Candidate.Conversions[0].UserDefined.After.setAsIdentityConversion(); 5869 5870 // Find the 5871 unsigned NumArgsInProto = Proto->getNumArgs(); 5872 5873 // (C++ 13.3.2p2): A candidate function having fewer than m 5874 // parameters is viable only if it has an ellipsis in its parameter 5875 // list (8.3.5). 5876 if (Args.size() > NumArgsInProto && !Proto->isVariadic()) { 5877 Candidate.Viable = false; 5878 Candidate.FailureKind = ovl_fail_too_many_arguments; 5879 return; 5880 } 5881 5882 // Function types don't have any default arguments, so just check if 5883 // we have enough arguments. 5884 if (Args.size() < NumArgsInProto) { 5885 // Not enough arguments. 5886 Candidate.Viable = false; 5887 Candidate.FailureKind = ovl_fail_too_few_arguments; 5888 return; 5889 } 5890 5891 // Determine the implicit conversion sequences for each of the 5892 // arguments. 5893 for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) { 5894 if (ArgIdx < NumArgsInProto) { 5895 // (C++ 13.3.2p3): for F to be a viable function, there shall 5896 // exist for each argument an implicit conversion sequence 5897 // (13.3.3.1) that converts that argument to the corresponding 5898 // parameter of F. 5899 QualType ParamType = Proto->getArgType(ArgIdx); 5900 Candidate.Conversions[ArgIdx + 1] 5901 = TryCopyInitialization(*this, Args[ArgIdx], ParamType, 5902 /*SuppressUserConversions=*/false, 5903 /*InOverloadResolution=*/false, 5904 /*AllowObjCWritebackConversion=*/ 5905 getLangOpts().ObjCAutoRefCount); 5906 if (Candidate.Conversions[ArgIdx + 1].isBad()) { 5907 Candidate.Viable = false; 5908 Candidate.FailureKind = ovl_fail_bad_conversion; 5909 break; 5910 } 5911 } else { 5912 // (C++ 13.3.2p2): For the purposes of overload resolution, any 5913 // argument for which there is no corresponding parameter is 5914 // considered to ""match the ellipsis" (C+ 13.3.3.1.3). 5915 Candidate.Conversions[ArgIdx + 1].setEllipsis(); 5916 } 5917 } 5918} 5919 5920/// \brief Add overload candidates for overloaded operators that are 5921/// member functions. 5922/// 5923/// Add the overloaded operator candidates that are member functions 5924/// for the operator Op that was used in an operator expression such 5925/// as "x Op y". , Args/NumArgs provides the operator arguments, and 5926/// CandidateSet will store the added overload candidates. (C++ 5927/// [over.match.oper]). 5928void Sema::AddMemberOperatorCandidates(OverloadedOperatorKind Op, 5929 SourceLocation OpLoc, 5930 Expr **Args, unsigned NumArgs, 5931 OverloadCandidateSet& CandidateSet, 5932 SourceRange OpRange) { 5933 DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op); 5934 5935 // C++ [over.match.oper]p3: 5936 // For a unary operator @ with an operand of a type whose 5937 // cv-unqualified version is T1, and for a binary operator @ with 5938 // a left operand of a type whose cv-unqualified version is T1 and 5939 // a right operand of a type whose cv-unqualified version is T2, 5940 // three sets of candidate functions, designated member 5941 // candidates, non-member candidates and built-in candidates, are 5942 // constructed as follows: 5943 QualType T1 = Args[0]->getType(); 5944 5945 // -- If T1 is a class type, the set of member candidates is the 5946 // result of the qualified lookup of T1::operator@ 5947 // (13.3.1.1.1); otherwise, the set of member candidates is 5948 // empty. 5949 if (const RecordType *T1Rec = T1->getAs<RecordType>()) { 5950 // Complete the type if it can be completed. Otherwise, we're done. 5951 if (RequireCompleteType(OpLoc, T1, 0)) 5952 return; 5953 5954 LookupResult Operators(*this, OpName, OpLoc, LookupOrdinaryName); 5955 LookupQualifiedName(Operators, T1Rec->getDecl()); 5956 Operators.suppressDiagnostics(); 5957 5958 for (LookupResult::iterator Oper = Operators.begin(), 5959 OperEnd = Operators.end(); 5960 Oper != OperEnd; 5961 ++Oper) 5962 AddMethodCandidate(Oper.getPair(), Args[0]->getType(), 5963 Args[0]->Classify(Context), Args + 1, NumArgs - 1, 5964 CandidateSet, 5965 /* SuppressUserConversions = */ false); 5966 } 5967} 5968 5969/// AddBuiltinCandidate - Add a candidate for a built-in 5970/// operator. ResultTy and ParamTys are the result and parameter types 5971/// of the built-in candidate, respectively. Args and NumArgs are the 5972/// arguments being passed to the candidate. IsAssignmentOperator 5973/// should be true when this built-in candidate is an assignment 5974/// operator. NumContextualBoolArguments is the number of arguments 5975/// (at the beginning of the argument list) that will be contextually 5976/// converted to bool. 5977void Sema::AddBuiltinCandidate(QualType ResultTy, QualType *ParamTys, 5978 Expr **Args, unsigned NumArgs, 5979 OverloadCandidateSet& CandidateSet, 5980 bool IsAssignmentOperator, 5981 unsigned NumContextualBoolArguments) { 5982 // Overload resolution is always an unevaluated context. 5983 EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated); 5984 5985 // Add this candidate 5986 OverloadCandidate &Candidate = CandidateSet.addCandidate(NumArgs); 5987 Candidate.FoundDecl = DeclAccessPair::make(0, AS_none); 5988 Candidate.Function = 0; 5989 Candidate.IsSurrogate = false; 5990 Candidate.IgnoreObjectArgument = false; 5991 Candidate.BuiltinTypes.ResultTy = ResultTy; 5992 for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) 5993 Candidate.BuiltinTypes.ParamTypes[ArgIdx] = ParamTys[ArgIdx]; 5994 5995 // Determine the implicit conversion sequences for each of the 5996 // arguments. 5997 Candidate.Viable = true; 5998 Candidate.ExplicitCallArguments = NumArgs; 5999 for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) { 6000 // C++ [over.match.oper]p4: 6001 // For the built-in assignment operators, conversions of the 6002 // left operand are restricted as follows: 6003 // -- no temporaries are introduced to hold the left operand, and 6004 // -- no user-defined conversions are applied to the left 6005 // operand to achieve a type match with the left-most 6006 // parameter of a built-in candidate. 6007 // 6008 // We block these conversions by turning off user-defined 6009 // conversions, since that is the only way that initialization of 6010 // a reference to a non-class type can occur from something that 6011 // is not of the same type. 6012 if (ArgIdx < NumContextualBoolArguments) { 6013 assert(ParamTys[ArgIdx] == Context.BoolTy && 6014 "Contextual conversion to bool requires bool type"); 6015 Candidate.Conversions[ArgIdx] 6016 = TryContextuallyConvertToBool(*this, Args[ArgIdx]); 6017 } else { 6018 Candidate.Conversions[ArgIdx] 6019 = TryCopyInitialization(*this, Args[ArgIdx], ParamTys[ArgIdx], 6020 ArgIdx == 0 && IsAssignmentOperator, 6021 /*InOverloadResolution=*/false, 6022 /*AllowObjCWritebackConversion=*/ 6023 getLangOpts().ObjCAutoRefCount); 6024 } 6025 if (Candidate.Conversions[ArgIdx].isBad()) { 6026 Candidate.Viable = false; 6027 Candidate.FailureKind = ovl_fail_bad_conversion; 6028 break; 6029 } 6030 } 6031} 6032 6033/// BuiltinCandidateTypeSet - A set of types that will be used for the 6034/// candidate operator functions for built-in operators (C++ 6035/// [over.built]). The types are separated into pointer types and 6036/// enumeration types. 6037class BuiltinCandidateTypeSet { 6038 /// TypeSet - A set of types. 6039 typedef llvm::SmallPtrSet<QualType, 8> TypeSet; 6040 6041 /// PointerTypes - The set of pointer types that will be used in the 6042 /// built-in candidates. 6043 TypeSet PointerTypes; 6044 6045 /// MemberPointerTypes - The set of member pointer types that will be 6046 /// used in the built-in candidates. 6047 TypeSet MemberPointerTypes; 6048 6049 /// EnumerationTypes - The set of enumeration types that will be 6050 /// used in the built-in candidates. 6051 TypeSet EnumerationTypes; 6052 6053 /// \brief The set of vector types that will be used in the built-in 6054 /// candidates. 6055 TypeSet VectorTypes; 6056 6057 /// \brief A flag indicating non-record types are viable candidates 6058 bool HasNonRecordTypes; 6059 6060 /// \brief A flag indicating whether either arithmetic or enumeration types 6061 /// were present in the candidate set. 6062 bool HasArithmeticOrEnumeralTypes; 6063 6064 /// \brief A flag indicating whether the nullptr type was present in the 6065 /// candidate set. 6066 bool HasNullPtrType; 6067 6068 /// Sema - The semantic analysis instance where we are building the 6069 /// candidate type set. 6070 Sema &SemaRef; 6071 6072 /// Context - The AST context in which we will build the type sets. 6073 ASTContext &Context; 6074 6075 bool AddPointerWithMoreQualifiedTypeVariants(QualType Ty, 6076 const Qualifiers &VisibleQuals); 6077 bool AddMemberPointerWithMoreQualifiedTypeVariants(QualType Ty); 6078 6079public: 6080 /// iterator - Iterates through the types that are part of the set. 6081 typedef TypeSet::iterator iterator; 6082 6083 BuiltinCandidateTypeSet(Sema &SemaRef) 6084 : HasNonRecordTypes(false), 6085 HasArithmeticOrEnumeralTypes(false), 6086 HasNullPtrType(false), 6087 SemaRef(SemaRef), 6088 Context(SemaRef.Context) { } 6089 6090 void AddTypesConvertedFrom(QualType Ty, 6091 SourceLocation Loc, 6092 bool AllowUserConversions, 6093 bool AllowExplicitConversions, 6094 const Qualifiers &VisibleTypeConversionsQuals); 6095 6096 /// pointer_begin - First pointer type found; 6097 iterator pointer_begin() { return PointerTypes.begin(); } 6098 6099 /// pointer_end - Past the last pointer type found; 6100 iterator pointer_end() { return PointerTypes.end(); } 6101 6102 /// member_pointer_begin - First member pointer type found; 6103 iterator member_pointer_begin() { return MemberPointerTypes.begin(); } 6104 6105 /// member_pointer_end - Past the last member pointer type found; 6106 iterator member_pointer_end() { return MemberPointerTypes.end(); } 6107 6108 /// enumeration_begin - First enumeration type found; 6109 iterator enumeration_begin() { return EnumerationTypes.begin(); } 6110 6111 /// enumeration_end - Past the last enumeration type found; 6112 iterator enumeration_end() { return EnumerationTypes.end(); } 6113 6114 iterator vector_begin() { return VectorTypes.begin(); } 6115 iterator vector_end() { return VectorTypes.end(); } 6116 6117 bool hasNonRecordTypes() { return HasNonRecordTypes; } 6118 bool hasArithmeticOrEnumeralTypes() { return HasArithmeticOrEnumeralTypes; } 6119 bool hasNullPtrType() const { return HasNullPtrType; } 6120}; 6121 6122/// AddPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty to 6123/// the set of pointer types along with any more-qualified variants of 6124/// that type. For example, if @p Ty is "int const *", this routine 6125/// will add "int const *", "int const volatile *", "int const 6126/// restrict *", and "int const volatile restrict *" to the set of 6127/// pointer types. Returns true if the add of @p Ty itself succeeded, 6128/// false otherwise. 6129/// 6130/// FIXME: what to do about extended qualifiers? 6131bool 6132BuiltinCandidateTypeSet::AddPointerWithMoreQualifiedTypeVariants(QualType Ty, 6133 const Qualifiers &VisibleQuals) { 6134 6135 // Insert this type. 6136 if (!PointerTypes.insert(Ty)) 6137 return false; 6138 6139 QualType PointeeTy; 6140 const PointerType *PointerTy = Ty->getAs<PointerType>(); 6141 bool buildObjCPtr = false; 6142 if (!PointerTy) { 6143 const ObjCObjectPointerType *PTy = Ty->castAs<ObjCObjectPointerType>(); 6144 PointeeTy = PTy->getPointeeType(); 6145 buildObjCPtr = true; 6146 } else { 6147 PointeeTy = PointerTy->getPointeeType(); 6148 } 6149 6150 // Don't add qualified variants of arrays. For one, they're not allowed 6151 // (the qualifier would sink to the element type), and for another, the 6152 // only overload situation where it matters is subscript or pointer +- int, 6153 // and those shouldn't have qualifier variants anyway. 6154 if (PointeeTy->isArrayType()) 6155 return true; 6156 6157 unsigned BaseCVR = PointeeTy.getCVRQualifiers(); 6158 bool hasVolatile = VisibleQuals.hasVolatile(); 6159 bool hasRestrict = VisibleQuals.hasRestrict(); 6160 6161 // Iterate through all strict supersets of BaseCVR. 6162 for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) { 6163 if ((CVR | BaseCVR) != CVR) continue; 6164 // Skip over volatile if no volatile found anywhere in the types. 6165 if ((CVR & Qualifiers::Volatile) && !hasVolatile) continue; 6166 6167 // Skip over restrict if no restrict found anywhere in the types, or if 6168 // the type cannot be restrict-qualified. 6169 if ((CVR & Qualifiers::Restrict) && 6170 (!hasRestrict || 6171 (!(PointeeTy->isAnyPointerType() || PointeeTy->isReferenceType())))) 6172 continue; 6173 6174 // Build qualified pointee type. 6175 QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR); 6176 6177 // Build qualified pointer type. 6178 QualType QPointerTy; 6179 if (!buildObjCPtr) 6180 QPointerTy = Context.getPointerType(QPointeeTy); 6181 else 6182 QPointerTy = Context.getObjCObjectPointerType(QPointeeTy); 6183 6184 // Insert qualified pointer type. 6185 PointerTypes.insert(QPointerTy); 6186 } 6187 6188 return true; 6189} 6190 6191/// AddMemberPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty 6192/// to the set of pointer types along with any more-qualified variants of 6193/// that type. For example, if @p Ty is "int const *", this routine 6194/// will add "int const *", "int const volatile *", "int const 6195/// restrict *", and "int const volatile restrict *" to the set of 6196/// pointer types. Returns true if the add of @p Ty itself succeeded, 6197/// false otherwise. 6198/// 6199/// FIXME: what to do about extended qualifiers? 6200bool 6201BuiltinCandidateTypeSet::AddMemberPointerWithMoreQualifiedTypeVariants( 6202 QualType Ty) { 6203 // Insert this type. 6204 if (!MemberPointerTypes.insert(Ty)) 6205 return false; 6206 6207 const MemberPointerType *PointerTy = Ty->getAs<MemberPointerType>(); 6208 assert(PointerTy && "type was not a member pointer type!"); 6209 6210 QualType PointeeTy = PointerTy->getPointeeType(); 6211 // Don't add qualified variants of arrays. For one, they're not allowed 6212 // (the qualifier would sink to the element type), and for another, the 6213 // only overload situation where it matters is subscript or pointer +- int, 6214 // and those shouldn't have qualifier variants anyway. 6215 if (PointeeTy->isArrayType()) 6216 return true; 6217 const Type *ClassTy = PointerTy->getClass(); 6218 6219 // Iterate through all strict supersets of the pointee type's CVR 6220 // qualifiers. 6221 unsigned BaseCVR = PointeeTy.getCVRQualifiers(); 6222 for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) { 6223 if ((CVR | BaseCVR) != CVR) continue; 6224 6225 QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR); 6226 MemberPointerTypes.insert( 6227 Context.getMemberPointerType(QPointeeTy, ClassTy)); 6228 } 6229 6230 return true; 6231} 6232 6233/// AddTypesConvertedFrom - Add each of the types to which the type @p 6234/// Ty can be implicit converted to the given set of @p Types. We're 6235/// primarily interested in pointer types and enumeration types. We also 6236/// take member pointer types, for the conditional operator. 6237/// AllowUserConversions is true if we should look at the conversion 6238/// functions of a class type, and AllowExplicitConversions if we 6239/// should also include the explicit conversion functions of a class 6240/// type. 6241void 6242BuiltinCandidateTypeSet::AddTypesConvertedFrom(QualType Ty, 6243 SourceLocation Loc, 6244 bool AllowUserConversions, 6245 bool AllowExplicitConversions, 6246 const Qualifiers &VisibleQuals) { 6247 // Only deal with canonical types. 6248 Ty = Context.getCanonicalType(Ty); 6249 6250 // Look through reference types; they aren't part of the type of an 6251 // expression for the purposes of conversions. 6252 if (const ReferenceType *RefTy = Ty->getAs<ReferenceType>()) 6253 Ty = RefTy->getPointeeType(); 6254 6255 // If we're dealing with an array type, decay to the pointer. 6256 if (Ty->isArrayType()) 6257 Ty = SemaRef.Context.getArrayDecayedType(Ty); 6258 6259 // Otherwise, we don't care about qualifiers on the type. 6260 Ty = Ty.getLocalUnqualifiedType(); 6261 6262 // Flag if we ever add a non-record type. 6263 const RecordType *TyRec = Ty->getAs<RecordType>(); 6264 HasNonRecordTypes = HasNonRecordTypes || !TyRec; 6265 6266 // Flag if we encounter an arithmetic type. 6267 HasArithmeticOrEnumeralTypes = 6268 HasArithmeticOrEnumeralTypes || Ty->isArithmeticType(); 6269 6270 if (Ty->isObjCIdType() || Ty->isObjCClassType()) 6271 PointerTypes.insert(Ty); 6272 else if (Ty->getAs<PointerType>() || Ty->getAs<ObjCObjectPointerType>()) { 6273 // Insert our type, and its more-qualified variants, into the set 6274 // of types. 6275 if (!AddPointerWithMoreQualifiedTypeVariants(Ty, VisibleQuals)) 6276 return; 6277 } else if (Ty->isMemberPointerType()) { 6278 // Member pointers are far easier, since the pointee can't be converted. 6279 if (!AddMemberPointerWithMoreQualifiedTypeVariants(Ty)) 6280 return; 6281 } else if (Ty->isEnumeralType()) { 6282 HasArithmeticOrEnumeralTypes = true; 6283 EnumerationTypes.insert(Ty); 6284 } else if (Ty->isVectorType()) { 6285 // We treat vector types as arithmetic types in many contexts as an 6286 // extension. 6287 HasArithmeticOrEnumeralTypes = true; 6288 VectorTypes.insert(Ty); 6289 } else if (Ty->isNullPtrType()) { 6290 HasNullPtrType = true; 6291 } else if (AllowUserConversions && TyRec) { 6292 // No conversion functions in incomplete types. 6293 if (SemaRef.RequireCompleteType(Loc, Ty, 0)) 6294 return; 6295 6296 CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl()); 6297 const UnresolvedSetImpl *Conversions 6298 = ClassDecl->getVisibleConversionFunctions(); 6299 for (UnresolvedSetImpl::iterator I = Conversions->begin(), 6300 E = Conversions->end(); I != E; ++I) { 6301 NamedDecl *D = I.getDecl(); 6302 if (isa<UsingShadowDecl>(D)) 6303 D = cast<UsingShadowDecl>(D)->getTargetDecl(); 6304 6305 // Skip conversion function templates; they don't tell us anything 6306 // about which builtin types we can convert to. 6307 if (isa<FunctionTemplateDecl>(D)) 6308 continue; 6309 6310 CXXConversionDecl *Conv = cast<CXXConversionDecl>(D); 6311 if (AllowExplicitConversions || !Conv->isExplicit()) { 6312 AddTypesConvertedFrom(Conv->getConversionType(), Loc, false, false, 6313 VisibleQuals); 6314 } 6315 } 6316 } 6317} 6318 6319/// \brief Helper function for AddBuiltinOperatorCandidates() that adds 6320/// the volatile- and non-volatile-qualified assignment operators for the 6321/// given type to the candidate set. 6322static void AddBuiltinAssignmentOperatorCandidates(Sema &S, 6323 QualType T, 6324 Expr **Args, 6325 unsigned NumArgs, 6326 OverloadCandidateSet &CandidateSet) { 6327 QualType ParamTypes[2]; 6328 6329 // T& operator=(T&, T) 6330 ParamTypes[0] = S.Context.getLValueReferenceType(T); 6331 ParamTypes[1] = T; 6332 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet, 6333 /*IsAssignmentOperator=*/true); 6334 6335 if (!S.Context.getCanonicalType(T).isVolatileQualified()) { 6336 // volatile T& operator=(volatile T&, T) 6337 ParamTypes[0] 6338 = S.Context.getLValueReferenceType(S.Context.getVolatileType(T)); 6339 ParamTypes[1] = T; 6340 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet, 6341 /*IsAssignmentOperator=*/true); 6342 } 6343} 6344 6345/// CollectVRQualifiers - This routine returns Volatile/Restrict qualifiers, 6346/// if any, found in visible type conversion functions found in ArgExpr's type. 6347static Qualifiers CollectVRQualifiers(ASTContext &Context, Expr* ArgExpr) { 6348 Qualifiers VRQuals; 6349 const RecordType *TyRec; 6350 if (const MemberPointerType *RHSMPType = 6351 ArgExpr->getType()->getAs<MemberPointerType>()) 6352 TyRec = RHSMPType->getClass()->getAs<RecordType>(); 6353 else 6354 TyRec = ArgExpr->getType()->getAs<RecordType>(); 6355 if (!TyRec) { 6356 // Just to be safe, assume the worst case. 6357 VRQuals.addVolatile(); 6358 VRQuals.addRestrict(); 6359 return VRQuals; 6360 } 6361 6362 CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl()); 6363 if (!ClassDecl->hasDefinition()) 6364 return VRQuals; 6365 6366 const UnresolvedSetImpl *Conversions = 6367 ClassDecl->getVisibleConversionFunctions(); 6368 6369 for (UnresolvedSetImpl::iterator I = Conversions->begin(), 6370 E = Conversions->end(); I != E; ++I) { 6371 NamedDecl *D = I.getDecl(); 6372 if (isa<UsingShadowDecl>(D)) 6373 D = cast<UsingShadowDecl>(D)->getTargetDecl(); 6374 if (CXXConversionDecl *Conv = dyn_cast<CXXConversionDecl>(D)) { 6375 QualType CanTy = Context.getCanonicalType(Conv->getConversionType()); 6376 if (const ReferenceType *ResTypeRef = CanTy->getAs<ReferenceType>()) 6377 CanTy = ResTypeRef->getPointeeType(); 6378 // Need to go down the pointer/mempointer chain and add qualifiers 6379 // as see them. 6380 bool done = false; 6381 while (!done) { 6382 if (CanTy.isRestrictQualified()) 6383 VRQuals.addRestrict(); 6384 if (const PointerType *ResTypePtr = CanTy->getAs<PointerType>()) 6385 CanTy = ResTypePtr->getPointeeType(); 6386 else if (const MemberPointerType *ResTypeMPtr = 6387 CanTy->getAs<MemberPointerType>()) 6388 CanTy = ResTypeMPtr->getPointeeType(); 6389 else 6390 done = true; 6391 if (CanTy.isVolatileQualified()) 6392 VRQuals.addVolatile(); 6393 if (VRQuals.hasRestrict() && VRQuals.hasVolatile()) 6394 return VRQuals; 6395 } 6396 } 6397 } 6398 return VRQuals; 6399} 6400 6401namespace { 6402 6403/// \brief Helper class to manage the addition of builtin operator overload 6404/// candidates. It provides shared state and utility methods used throughout 6405/// the process, as well as a helper method to add each group of builtin 6406/// operator overloads from the standard to a candidate set. 6407class BuiltinOperatorOverloadBuilder { 6408 // Common instance state available to all overload candidate addition methods. 6409 Sema &S; 6410 Expr **Args; 6411 unsigned NumArgs; 6412 Qualifiers VisibleTypeConversionsQuals; 6413 bool HasArithmeticOrEnumeralCandidateType; 6414 SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes; 6415 OverloadCandidateSet &CandidateSet; 6416 6417 // Define some constants used to index and iterate over the arithemetic types 6418 // provided via the getArithmeticType() method below. 6419 // The "promoted arithmetic types" are the arithmetic 6420 // types are that preserved by promotion (C++ [over.built]p2). 6421 static const unsigned FirstIntegralType = 3; 6422 static const unsigned LastIntegralType = 20; 6423 static const unsigned FirstPromotedIntegralType = 3, 6424 LastPromotedIntegralType = 11; 6425 static const unsigned FirstPromotedArithmeticType = 0, 6426 LastPromotedArithmeticType = 11; 6427 static const unsigned NumArithmeticTypes = 20; 6428 6429 /// \brief Get the canonical type for a given arithmetic type index. 6430 CanQualType getArithmeticType(unsigned index) { 6431 assert(index < NumArithmeticTypes); 6432 static CanQualType ASTContext::* const 6433 ArithmeticTypes[NumArithmeticTypes] = { 6434 // Start of promoted types. 6435 &ASTContext::FloatTy, 6436 &ASTContext::DoubleTy, 6437 &ASTContext::LongDoubleTy, 6438 6439 // Start of integral types. 6440 &ASTContext::IntTy, 6441 &ASTContext::LongTy, 6442 &ASTContext::LongLongTy, 6443 &ASTContext::Int128Ty, 6444 &ASTContext::UnsignedIntTy, 6445 &ASTContext::UnsignedLongTy, 6446 &ASTContext::UnsignedLongLongTy, 6447 &ASTContext::UnsignedInt128Ty, 6448 // End of promoted types. 6449 6450 &ASTContext::BoolTy, 6451 &ASTContext::CharTy, 6452 &ASTContext::WCharTy, 6453 &ASTContext::Char16Ty, 6454 &ASTContext::Char32Ty, 6455 &ASTContext::SignedCharTy, 6456 &ASTContext::ShortTy, 6457 &ASTContext::UnsignedCharTy, 6458 &ASTContext::UnsignedShortTy, 6459 // End of integral types. 6460 // FIXME: What about complex? What about half? 6461 }; 6462 return S.Context.*ArithmeticTypes[index]; 6463 } 6464 6465 /// \brief Gets the canonical type resulting from the usual arithemetic 6466 /// converions for the given arithmetic types. 6467 CanQualType getUsualArithmeticConversions(unsigned L, unsigned R) { 6468 // Accelerator table for performing the usual arithmetic conversions. 6469 // The rules are basically: 6470 // - if either is floating-point, use the wider floating-point 6471 // - if same signedness, use the higher rank 6472 // - if same size, use unsigned of the higher rank 6473 // - use the larger type 6474 // These rules, together with the axiom that higher ranks are 6475 // never smaller, are sufficient to precompute all of these results 6476 // *except* when dealing with signed types of higher rank. 6477 // (we could precompute SLL x UI for all known platforms, but it's 6478 // better not to make any assumptions). 6479 // We assume that int128 has a higher rank than long long on all platforms. 6480 enum PromotedType { 6481 Dep=-1, 6482 Flt, Dbl, LDbl, SI, SL, SLL, S128, UI, UL, ULL, U128 6483 }; 6484 static const PromotedType ConversionsTable[LastPromotedArithmeticType] 6485 [LastPromotedArithmeticType] = { 6486/* Flt*/ { Flt, Dbl, LDbl, Flt, Flt, Flt, Flt, Flt, Flt, Flt, Flt }, 6487/* Dbl*/ { Dbl, Dbl, LDbl, Dbl, Dbl, Dbl, Dbl, Dbl, Dbl, Dbl, Dbl }, 6488/*LDbl*/ { LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl }, 6489/* SI*/ { Flt, Dbl, LDbl, SI, SL, SLL, S128, UI, UL, ULL, U128 }, 6490/* SL*/ { Flt, Dbl, LDbl, SL, SL, SLL, S128, Dep, UL, ULL, U128 }, 6491/* SLL*/ { Flt, Dbl, LDbl, SLL, SLL, SLL, S128, Dep, Dep, ULL, U128 }, 6492/*S128*/ { Flt, Dbl, LDbl, S128, S128, S128, S128, S128, S128, S128, U128 }, 6493/* UI*/ { Flt, Dbl, LDbl, UI, Dep, Dep, S128, UI, UL, ULL, U128 }, 6494/* UL*/ { Flt, Dbl, LDbl, UL, UL, Dep, S128, UL, UL, ULL, U128 }, 6495/* ULL*/ { Flt, Dbl, LDbl, ULL, ULL, ULL, S128, ULL, ULL, ULL, U128 }, 6496/*U128*/ { Flt, Dbl, LDbl, U128, U128, U128, U128, U128, U128, U128, U128 }, 6497 }; 6498 6499 assert(L < LastPromotedArithmeticType); 6500 assert(R < LastPromotedArithmeticType); 6501 int Idx = ConversionsTable[L][R]; 6502 6503 // Fast path: the table gives us a concrete answer. 6504 if (Idx != Dep) return getArithmeticType(Idx); 6505 6506 // Slow path: we need to compare widths. 6507 // An invariant is that the signed type has higher rank. 6508 CanQualType LT = getArithmeticType(L), 6509 RT = getArithmeticType(R); 6510 unsigned LW = S.Context.getIntWidth(LT), 6511 RW = S.Context.getIntWidth(RT); 6512 6513 // If they're different widths, use the signed type. 6514 if (LW > RW) return LT; 6515 else if (LW < RW) return RT; 6516 6517 // Otherwise, use the unsigned type of the signed type's rank. 6518 if (L == SL || R == SL) return S.Context.UnsignedLongTy; 6519 assert(L == SLL || R == SLL); 6520 return S.Context.UnsignedLongLongTy; 6521 } 6522 6523 /// \brief Helper method to factor out the common pattern of adding overloads 6524 /// for '++' and '--' builtin operators. 6525 void addPlusPlusMinusMinusStyleOverloads(QualType CandidateTy, 6526 bool HasVolatile, 6527 bool HasRestrict) { 6528 QualType ParamTypes[2] = { 6529 S.Context.getLValueReferenceType(CandidateTy), 6530 S.Context.IntTy 6531 }; 6532 6533 // Non-volatile version. 6534 if (NumArgs == 1) 6535 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet); 6536 else 6537 S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet); 6538 6539 // Use a heuristic to reduce number of builtin candidates in the set: 6540 // add volatile version only if there are conversions to a volatile type. 6541 if (HasVolatile) { 6542 ParamTypes[0] = 6543 S.Context.getLValueReferenceType( 6544 S.Context.getVolatileType(CandidateTy)); 6545 if (NumArgs == 1) 6546 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet); 6547 else 6548 S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet); 6549 } 6550 6551 // Add restrict version only if there are conversions to a restrict type 6552 // and our candidate type is a non-restrict-qualified pointer. 6553 if (HasRestrict && CandidateTy->isAnyPointerType() && 6554 !CandidateTy.isRestrictQualified()) { 6555 ParamTypes[0] 6556 = S.Context.getLValueReferenceType( 6557 S.Context.getCVRQualifiedType(CandidateTy, Qualifiers::Restrict)); 6558 if (NumArgs == 1) 6559 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet); 6560 else 6561 S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet); 6562 6563 if (HasVolatile) { 6564 ParamTypes[0] 6565 = S.Context.getLValueReferenceType( 6566 S.Context.getCVRQualifiedType(CandidateTy, 6567 (Qualifiers::Volatile | 6568 Qualifiers::Restrict))); 6569 if (NumArgs == 1) 6570 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, 6571 CandidateSet); 6572 else 6573 S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet); 6574 } 6575 } 6576 6577 } 6578 6579public: 6580 BuiltinOperatorOverloadBuilder( 6581 Sema &S, Expr **Args, unsigned NumArgs, 6582 Qualifiers VisibleTypeConversionsQuals, 6583 bool HasArithmeticOrEnumeralCandidateType, 6584 SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes, 6585 OverloadCandidateSet &CandidateSet) 6586 : S(S), Args(Args), NumArgs(NumArgs), 6587 VisibleTypeConversionsQuals(VisibleTypeConversionsQuals), 6588 HasArithmeticOrEnumeralCandidateType( 6589 HasArithmeticOrEnumeralCandidateType), 6590 CandidateTypes(CandidateTypes), 6591 CandidateSet(CandidateSet) { 6592 // Validate some of our static helper constants in debug builds. 6593 assert(getArithmeticType(FirstPromotedIntegralType) == S.Context.IntTy && 6594 "Invalid first promoted integral type"); 6595 assert(getArithmeticType(LastPromotedIntegralType - 1) 6596 == S.Context.UnsignedInt128Ty && 6597 "Invalid last promoted integral type"); 6598 assert(getArithmeticType(FirstPromotedArithmeticType) 6599 == S.Context.FloatTy && 6600 "Invalid first promoted arithmetic type"); 6601 assert(getArithmeticType(LastPromotedArithmeticType - 1) 6602 == S.Context.UnsignedInt128Ty && 6603 "Invalid last promoted arithmetic type"); 6604 } 6605 6606 // C++ [over.built]p3: 6607 // 6608 // For every pair (T, VQ), where T is an arithmetic type, and VQ 6609 // is either volatile or empty, there exist candidate operator 6610 // functions of the form 6611 // 6612 // VQ T& operator++(VQ T&); 6613 // T operator++(VQ T&, int); 6614 // 6615 // C++ [over.built]p4: 6616 // 6617 // For every pair (T, VQ), where T is an arithmetic type other 6618 // than bool, and VQ is either volatile or empty, there exist 6619 // candidate operator functions of the form 6620 // 6621 // VQ T& operator--(VQ T&); 6622 // T operator--(VQ T&, int); 6623 void addPlusPlusMinusMinusArithmeticOverloads(OverloadedOperatorKind Op) { 6624 if (!HasArithmeticOrEnumeralCandidateType) 6625 return; 6626 6627 for (unsigned Arith = (Op == OO_PlusPlus? 0 : 1); 6628 Arith < NumArithmeticTypes; ++Arith) { 6629 addPlusPlusMinusMinusStyleOverloads( 6630 getArithmeticType(Arith), 6631 VisibleTypeConversionsQuals.hasVolatile(), 6632 VisibleTypeConversionsQuals.hasRestrict()); 6633 } 6634 } 6635 6636 // C++ [over.built]p5: 6637 // 6638 // For every pair (T, VQ), where T is a cv-qualified or 6639 // cv-unqualified object type, and VQ is either volatile or 6640 // empty, there exist candidate operator functions of the form 6641 // 6642 // T*VQ& operator++(T*VQ&); 6643 // T*VQ& operator--(T*VQ&); 6644 // T* operator++(T*VQ&, int); 6645 // T* operator--(T*VQ&, int); 6646 void addPlusPlusMinusMinusPointerOverloads() { 6647 for (BuiltinCandidateTypeSet::iterator 6648 Ptr = CandidateTypes[0].pointer_begin(), 6649 PtrEnd = CandidateTypes[0].pointer_end(); 6650 Ptr != PtrEnd; ++Ptr) { 6651 // Skip pointer types that aren't pointers to object types. 6652 if (!(*Ptr)->getPointeeType()->isObjectType()) 6653 continue; 6654 6655 addPlusPlusMinusMinusStyleOverloads(*Ptr, 6656 (!(*Ptr).isVolatileQualified() && 6657 VisibleTypeConversionsQuals.hasVolatile()), 6658 (!(*Ptr).isRestrictQualified() && 6659 VisibleTypeConversionsQuals.hasRestrict())); 6660 } 6661 } 6662 6663 // C++ [over.built]p6: 6664 // For every cv-qualified or cv-unqualified object type T, there 6665 // exist candidate operator functions of the form 6666 // 6667 // T& operator*(T*); 6668 // 6669 // C++ [over.built]p7: 6670 // For every function type T that does not have cv-qualifiers or a 6671 // ref-qualifier, there exist candidate operator functions of the form 6672 // T& operator*(T*); 6673 void addUnaryStarPointerOverloads() { 6674 for (BuiltinCandidateTypeSet::iterator 6675 Ptr = CandidateTypes[0].pointer_begin(), 6676 PtrEnd = CandidateTypes[0].pointer_end(); 6677 Ptr != PtrEnd; ++Ptr) { 6678 QualType ParamTy = *Ptr; 6679 QualType PointeeTy = ParamTy->getPointeeType(); 6680 if (!PointeeTy->isObjectType() && !PointeeTy->isFunctionType()) 6681 continue; 6682 6683 if (const FunctionProtoType *Proto =PointeeTy->getAs<FunctionProtoType>()) 6684 if (Proto->getTypeQuals() || Proto->getRefQualifier()) 6685 continue; 6686 6687 S.AddBuiltinCandidate(S.Context.getLValueReferenceType(PointeeTy), 6688 &ParamTy, Args, 1, CandidateSet); 6689 } 6690 } 6691 6692 // C++ [over.built]p9: 6693 // For every promoted arithmetic type T, there exist candidate 6694 // operator functions of the form 6695 // 6696 // T operator+(T); 6697 // T operator-(T); 6698 void addUnaryPlusOrMinusArithmeticOverloads() { 6699 if (!HasArithmeticOrEnumeralCandidateType) 6700 return; 6701 6702 for (unsigned Arith = FirstPromotedArithmeticType; 6703 Arith < LastPromotedArithmeticType; ++Arith) { 6704 QualType ArithTy = getArithmeticType(Arith); 6705 S.AddBuiltinCandidate(ArithTy, &ArithTy, Args, 1, CandidateSet); 6706 } 6707 6708 // Extension: We also add these operators for vector types. 6709 for (BuiltinCandidateTypeSet::iterator 6710 Vec = CandidateTypes[0].vector_begin(), 6711 VecEnd = CandidateTypes[0].vector_end(); 6712 Vec != VecEnd; ++Vec) { 6713 QualType VecTy = *Vec; 6714 S.AddBuiltinCandidate(VecTy, &VecTy, Args, 1, CandidateSet); 6715 } 6716 } 6717 6718 // C++ [over.built]p8: 6719 // For every type T, there exist candidate operator functions of 6720 // the form 6721 // 6722 // T* operator+(T*); 6723 void addUnaryPlusPointerOverloads() { 6724 for (BuiltinCandidateTypeSet::iterator 6725 Ptr = CandidateTypes[0].pointer_begin(), 6726 PtrEnd = CandidateTypes[0].pointer_end(); 6727 Ptr != PtrEnd; ++Ptr) { 6728 QualType ParamTy = *Ptr; 6729 S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, 1, CandidateSet); 6730 } 6731 } 6732 6733 // C++ [over.built]p10: 6734 // For every promoted integral type T, there exist candidate 6735 // operator functions of the form 6736 // 6737 // T operator~(T); 6738 void addUnaryTildePromotedIntegralOverloads() { 6739 if (!HasArithmeticOrEnumeralCandidateType) 6740 return; 6741 6742 for (unsigned Int = FirstPromotedIntegralType; 6743 Int < LastPromotedIntegralType; ++Int) { 6744 QualType IntTy = getArithmeticType(Int); 6745 S.AddBuiltinCandidate(IntTy, &IntTy, Args, 1, CandidateSet); 6746 } 6747 6748 // Extension: We also add this operator for vector types. 6749 for (BuiltinCandidateTypeSet::iterator 6750 Vec = CandidateTypes[0].vector_begin(), 6751 VecEnd = CandidateTypes[0].vector_end(); 6752 Vec != VecEnd; ++Vec) { 6753 QualType VecTy = *Vec; 6754 S.AddBuiltinCandidate(VecTy, &VecTy, Args, 1, CandidateSet); 6755 } 6756 } 6757 6758 // C++ [over.match.oper]p16: 6759 // For every pointer to member type T, there exist candidate operator 6760 // functions of the form 6761 // 6762 // bool operator==(T,T); 6763 // bool operator!=(T,T); 6764 void addEqualEqualOrNotEqualMemberPointerOverloads() { 6765 /// Set of (canonical) types that we've already handled. 6766 llvm::SmallPtrSet<QualType, 8> AddedTypes; 6767 6768 for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) { 6769 for (BuiltinCandidateTypeSet::iterator 6770 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(), 6771 MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end(); 6772 MemPtr != MemPtrEnd; 6773 ++MemPtr) { 6774 // Don't add the same builtin candidate twice. 6775 if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr))) 6776 continue; 6777 6778 QualType ParamTypes[2] = { *MemPtr, *MemPtr }; 6779 S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2, 6780 CandidateSet); 6781 } 6782 } 6783 } 6784 6785 // C++ [over.built]p15: 6786 // 6787 // For every T, where T is an enumeration type, a pointer type, or 6788 // std::nullptr_t, there exist candidate operator functions of the form 6789 // 6790 // bool operator<(T, T); 6791 // bool operator>(T, T); 6792 // bool operator<=(T, T); 6793 // bool operator>=(T, T); 6794 // bool operator==(T, T); 6795 // bool operator!=(T, T); 6796 void addRelationalPointerOrEnumeralOverloads() { 6797 // C++ [over.match.oper]p3: 6798 // [...]the built-in candidates include all of the candidate operator 6799 // functions defined in 13.6 that, compared to the given operator, [...] 6800 // do not have the same parameter-type-list as any non-template non-member 6801 // candidate. 6802 // 6803 // Note that in practice, this only affects enumeration types because there 6804 // aren't any built-in candidates of record type, and a user-defined operator 6805 // must have an operand of record or enumeration type. Also, the only other 6806 // overloaded operator with enumeration arguments, operator=, 6807 // cannot be overloaded for enumeration types, so this is the only place 6808 // where we must suppress candidates like this. 6809 llvm::DenseSet<std::pair<CanQualType, CanQualType> > 6810 UserDefinedBinaryOperators; 6811 6812 for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) { 6813 if (CandidateTypes[ArgIdx].enumeration_begin() != 6814 CandidateTypes[ArgIdx].enumeration_end()) { 6815 for (OverloadCandidateSet::iterator C = CandidateSet.begin(), 6816 CEnd = CandidateSet.end(); 6817 C != CEnd; ++C) { 6818 if (!C->Viable || !C->Function || C->Function->getNumParams() != 2) 6819 continue; 6820 6821 if (C->Function->isFunctionTemplateSpecialization()) 6822 continue; 6823 6824 QualType FirstParamType = 6825 C->Function->getParamDecl(0)->getType().getUnqualifiedType(); 6826 QualType SecondParamType = 6827 C->Function->getParamDecl(1)->getType().getUnqualifiedType(); 6828 6829 // Skip if either parameter isn't of enumeral type. 6830 if (!FirstParamType->isEnumeralType() || 6831 !SecondParamType->isEnumeralType()) 6832 continue; 6833 6834 // Add this operator to the set of known user-defined operators. 6835 UserDefinedBinaryOperators.insert( 6836 std::make_pair(S.Context.getCanonicalType(FirstParamType), 6837 S.Context.getCanonicalType(SecondParamType))); 6838 } 6839 } 6840 } 6841 6842 /// Set of (canonical) types that we've already handled. 6843 llvm::SmallPtrSet<QualType, 8> AddedTypes; 6844 6845 for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) { 6846 for (BuiltinCandidateTypeSet::iterator 6847 Ptr = CandidateTypes[ArgIdx].pointer_begin(), 6848 PtrEnd = CandidateTypes[ArgIdx].pointer_end(); 6849 Ptr != PtrEnd; ++Ptr) { 6850 // Don't add the same builtin candidate twice. 6851 if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr))) 6852 continue; 6853 6854 QualType ParamTypes[2] = { *Ptr, *Ptr }; 6855 S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2, 6856 CandidateSet); 6857 } 6858 for (BuiltinCandidateTypeSet::iterator 6859 Enum = CandidateTypes[ArgIdx].enumeration_begin(), 6860 EnumEnd = CandidateTypes[ArgIdx].enumeration_end(); 6861 Enum != EnumEnd; ++Enum) { 6862 CanQualType CanonType = S.Context.getCanonicalType(*Enum); 6863 6864 // Don't add the same builtin candidate twice, or if a user defined 6865 // candidate exists. 6866 if (!AddedTypes.insert(CanonType) || 6867 UserDefinedBinaryOperators.count(std::make_pair(CanonType, 6868 CanonType))) 6869 continue; 6870 6871 QualType ParamTypes[2] = { *Enum, *Enum }; 6872 S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2, 6873 CandidateSet); 6874 } 6875 6876 if (CandidateTypes[ArgIdx].hasNullPtrType()) { 6877 CanQualType NullPtrTy = S.Context.getCanonicalType(S.Context.NullPtrTy); 6878 if (AddedTypes.insert(NullPtrTy) && 6879 !UserDefinedBinaryOperators.count(std::make_pair(NullPtrTy, 6880 NullPtrTy))) { 6881 QualType ParamTypes[2] = { NullPtrTy, NullPtrTy }; 6882 S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2, 6883 CandidateSet); 6884 } 6885 } 6886 } 6887 } 6888 6889 // C++ [over.built]p13: 6890 // 6891 // For every cv-qualified or cv-unqualified object type T 6892 // there exist candidate operator functions of the form 6893 // 6894 // T* operator+(T*, ptrdiff_t); 6895 // T& operator[](T*, ptrdiff_t); [BELOW] 6896 // T* operator-(T*, ptrdiff_t); 6897 // T* operator+(ptrdiff_t, T*); 6898 // T& operator[](ptrdiff_t, T*); [BELOW] 6899 // 6900 // C++ [over.built]p14: 6901 // 6902 // For every T, where T is a pointer to object type, there 6903 // exist candidate operator functions of the form 6904 // 6905 // ptrdiff_t operator-(T, T); 6906 void addBinaryPlusOrMinusPointerOverloads(OverloadedOperatorKind Op) { 6907 /// Set of (canonical) types that we've already handled. 6908 llvm::SmallPtrSet<QualType, 8> AddedTypes; 6909 6910 for (int Arg = 0; Arg < 2; ++Arg) { 6911 QualType AsymetricParamTypes[2] = { 6912 S.Context.getPointerDiffType(), 6913 S.Context.getPointerDiffType(), 6914 }; 6915 for (BuiltinCandidateTypeSet::iterator 6916 Ptr = CandidateTypes[Arg].pointer_begin(), 6917 PtrEnd = CandidateTypes[Arg].pointer_end(); 6918 Ptr != PtrEnd; ++Ptr) { 6919 QualType PointeeTy = (*Ptr)->getPointeeType(); 6920 if (!PointeeTy->isObjectType()) 6921 continue; 6922 6923 AsymetricParamTypes[Arg] = *Ptr; 6924 if (Arg == 0 || Op == OO_Plus) { 6925 // operator+(T*, ptrdiff_t) or operator-(T*, ptrdiff_t) 6926 // T* operator+(ptrdiff_t, T*); 6927 S.AddBuiltinCandidate(*Ptr, AsymetricParamTypes, Args, 2, 6928 CandidateSet); 6929 } 6930 if (Op == OO_Minus) { 6931 // ptrdiff_t operator-(T, T); 6932 if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr))) 6933 continue; 6934 6935 QualType ParamTypes[2] = { *Ptr, *Ptr }; 6936 S.AddBuiltinCandidate(S.Context.getPointerDiffType(), ParamTypes, 6937 Args, 2, CandidateSet); 6938 } 6939 } 6940 } 6941 } 6942 6943 // C++ [over.built]p12: 6944 // 6945 // For every pair of promoted arithmetic types L and R, there 6946 // exist candidate operator functions of the form 6947 // 6948 // LR operator*(L, R); 6949 // LR operator/(L, R); 6950 // LR operator+(L, R); 6951 // LR operator-(L, R); 6952 // bool operator<(L, R); 6953 // bool operator>(L, R); 6954 // bool operator<=(L, R); 6955 // bool operator>=(L, R); 6956 // bool operator==(L, R); 6957 // bool operator!=(L, R); 6958 // 6959 // where LR is the result of the usual arithmetic conversions 6960 // between types L and R. 6961 // 6962 // C++ [over.built]p24: 6963 // 6964 // For every pair of promoted arithmetic types L and R, there exist 6965 // candidate operator functions of the form 6966 // 6967 // LR operator?(bool, L, R); 6968 // 6969 // where LR is the result of the usual arithmetic conversions 6970 // between types L and R. 6971 // Our candidates ignore the first parameter. 6972 void addGenericBinaryArithmeticOverloads(bool isComparison) { 6973 if (!HasArithmeticOrEnumeralCandidateType) 6974 return; 6975 6976 for (unsigned Left = FirstPromotedArithmeticType; 6977 Left < LastPromotedArithmeticType; ++Left) { 6978 for (unsigned Right = FirstPromotedArithmeticType; 6979 Right < LastPromotedArithmeticType; ++Right) { 6980 QualType LandR[2] = { getArithmeticType(Left), 6981 getArithmeticType(Right) }; 6982 QualType Result = 6983 isComparison ? S.Context.BoolTy 6984 : getUsualArithmeticConversions(Left, Right); 6985 S.AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet); 6986 } 6987 } 6988 6989 // Extension: Add the binary operators ==, !=, <, <=, >=, >, *, /, and the 6990 // conditional operator for vector types. 6991 for (BuiltinCandidateTypeSet::iterator 6992 Vec1 = CandidateTypes[0].vector_begin(), 6993 Vec1End = CandidateTypes[0].vector_end(); 6994 Vec1 != Vec1End; ++Vec1) { 6995 for (BuiltinCandidateTypeSet::iterator 6996 Vec2 = CandidateTypes[1].vector_begin(), 6997 Vec2End = CandidateTypes[1].vector_end(); 6998 Vec2 != Vec2End; ++Vec2) { 6999 QualType LandR[2] = { *Vec1, *Vec2 }; 7000 QualType Result = S.Context.BoolTy; 7001 if (!isComparison) { 7002 if ((*Vec1)->isExtVectorType() || !(*Vec2)->isExtVectorType()) 7003 Result = *Vec1; 7004 else 7005 Result = *Vec2; 7006 } 7007 7008 S.AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet); 7009 } 7010 } 7011 } 7012 7013 // C++ [over.built]p17: 7014 // 7015 // For every pair of promoted integral types L and R, there 7016 // exist candidate operator functions of the form 7017 // 7018 // LR operator%(L, R); 7019 // LR operator&(L, R); 7020 // LR operator^(L, R); 7021 // LR operator|(L, R); 7022 // L operator<<(L, R); 7023 // L operator>>(L, R); 7024 // 7025 // where LR is the result of the usual arithmetic conversions 7026 // between types L and R. 7027 void addBinaryBitwiseArithmeticOverloads(OverloadedOperatorKind Op) { 7028 if (!HasArithmeticOrEnumeralCandidateType) 7029 return; 7030 7031 for (unsigned Left = FirstPromotedIntegralType; 7032 Left < LastPromotedIntegralType; ++Left) { 7033 for (unsigned Right = FirstPromotedIntegralType; 7034 Right < LastPromotedIntegralType; ++Right) { 7035 QualType LandR[2] = { getArithmeticType(Left), 7036 getArithmeticType(Right) }; 7037 QualType Result = (Op == OO_LessLess || Op == OO_GreaterGreater) 7038 ? LandR[0] 7039 : getUsualArithmeticConversions(Left, Right); 7040 S.AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet); 7041 } 7042 } 7043 } 7044 7045 // C++ [over.built]p20: 7046 // 7047 // For every pair (T, VQ), where T is an enumeration or 7048 // pointer to member type and VQ is either volatile or 7049 // empty, there exist candidate operator functions of the form 7050 // 7051 // VQ T& operator=(VQ T&, T); 7052 void addAssignmentMemberPointerOrEnumeralOverloads() { 7053 /// Set of (canonical) types that we've already handled. 7054 llvm::SmallPtrSet<QualType, 8> AddedTypes; 7055 7056 for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) { 7057 for (BuiltinCandidateTypeSet::iterator 7058 Enum = CandidateTypes[ArgIdx].enumeration_begin(), 7059 EnumEnd = CandidateTypes[ArgIdx].enumeration_end(); 7060 Enum != EnumEnd; ++Enum) { 7061 if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum))) 7062 continue; 7063 7064 AddBuiltinAssignmentOperatorCandidates(S, *Enum, Args, 2, 7065 CandidateSet); 7066 } 7067 7068 for (BuiltinCandidateTypeSet::iterator 7069 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(), 7070 MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end(); 7071 MemPtr != MemPtrEnd; ++MemPtr) { 7072 if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr))) 7073 continue; 7074 7075 AddBuiltinAssignmentOperatorCandidates(S, *MemPtr, Args, 2, 7076 CandidateSet); 7077 } 7078 } 7079 } 7080 7081 // C++ [over.built]p19: 7082 // 7083 // For every pair (T, VQ), where T is any type and VQ is either 7084 // volatile or empty, there exist candidate operator functions 7085 // of the form 7086 // 7087 // T*VQ& operator=(T*VQ&, T*); 7088 // 7089 // C++ [over.built]p21: 7090 // 7091 // For every pair (T, VQ), where T is a cv-qualified or 7092 // cv-unqualified object type and VQ is either volatile or 7093 // empty, there exist candidate operator functions of the form 7094 // 7095 // T*VQ& operator+=(T*VQ&, ptrdiff_t); 7096 // T*VQ& operator-=(T*VQ&, ptrdiff_t); 7097 void addAssignmentPointerOverloads(bool isEqualOp) { 7098 /// Set of (canonical) types that we've already handled. 7099 llvm::SmallPtrSet<QualType, 8> AddedTypes; 7100 7101 for (BuiltinCandidateTypeSet::iterator 7102 Ptr = CandidateTypes[0].pointer_begin(), 7103 PtrEnd = CandidateTypes[0].pointer_end(); 7104 Ptr != PtrEnd; ++Ptr) { 7105 // If this is operator=, keep track of the builtin candidates we added. 7106 if (isEqualOp) 7107 AddedTypes.insert(S.Context.getCanonicalType(*Ptr)); 7108 else if (!(*Ptr)->getPointeeType()->isObjectType()) 7109 continue; 7110 7111 // non-volatile version 7112 QualType ParamTypes[2] = { 7113 S.Context.getLValueReferenceType(*Ptr), 7114 isEqualOp ? *Ptr : S.Context.getPointerDiffType(), 7115 }; 7116 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet, 7117 /*IsAssigmentOperator=*/ isEqualOp); 7118 7119 bool NeedVolatile = !(*Ptr).isVolatileQualified() && 7120 VisibleTypeConversionsQuals.hasVolatile(); 7121 if (NeedVolatile) { 7122 // volatile version 7123 ParamTypes[0] = 7124 S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr)); 7125 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet, 7126 /*IsAssigmentOperator=*/isEqualOp); 7127 } 7128 7129 if (!(*Ptr).isRestrictQualified() && 7130 VisibleTypeConversionsQuals.hasRestrict()) { 7131 // restrict version 7132 ParamTypes[0] 7133 = S.Context.getLValueReferenceType(S.Context.getRestrictType(*Ptr)); 7134 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet, 7135 /*IsAssigmentOperator=*/isEqualOp); 7136 7137 if (NeedVolatile) { 7138 // volatile restrict version 7139 ParamTypes[0] 7140 = S.Context.getLValueReferenceType( 7141 S.Context.getCVRQualifiedType(*Ptr, 7142 (Qualifiers::Volatile | 7143 Qualifiers::Restrict))); 7144 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, 7145 CandidateSet, 7146 /*IsAssigmentOperator=*/isEqualOp); 7147 } 7148 } 7149 } 7150 7151 if (isEqualOp) { 7152 for (BuiltinCandidateTypeSet::iterator 7153 Ptr = CandidateTypes[1].pointer_begin(), 7154 PtrEnd = CandidateTypes[1].pointer_end(); 7155 Ptr != PtrEnd; ++Ptr) { 7156 // Make sure we don't add the same candidate twice. 7157 if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr))) 7158 continue; 7159 7160 QualType ParamTypes[2] = { 7161 S.Context.getLValueReferenceType(*Ptr), 7162 *Ptr, 7163 }; 7164 7165 // non-volatile version 7166 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet, 7167 /*IsAssigmentOperator=*/true); 7168 7169 bool NeedVolatile = !(*Ptr).isVolatileQualified() && 7170 VisibleTypeConversionsQuals.hasVolatile(); 7171 if (NeedVolatile) { 7172 // volatile version 7173 ParamTypes[0] = 7174 S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr)); 7175 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, 7176 CandidateSet, /*IsAssigmentOperator=*/true); 7177 } 7178 7179 if (!(*Ptr).isRestrictQualified() && 7180 VisibleTypeConversionsQuals.hasRestrict()) { 7181 // restrict version 7182 ParamTypes[0] 7183 = S.Context.getLValueReferenceType(S.Context.getRestrictType(*Ptr)); 7184 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, 7185 CandidateSet, /*IsAssigmentOperator=*/true); 7186 7187 if (NeedVolatile) { 7188 // volatile restrict version 7189 ParamTypes[0] 7190 = S.Context.getLValueReferenceType( 7191 S.Context.getCVRQualifiedType(*Ptr, 7192 (Qualifiers::Volatile | 7193 Qualifiers::Restrict))); 7194 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, 7195 CandidateSet, /*IsAssigmentOperator=*/true); 7196 7197 } 7198 } 7199 } 7200 } 7201 } 7202 7203 // C++ [over.built]p18: 7204 // 7205 // For every triple (L, VQ, R), where L is an arithmetic type, 7206 // VQ is either volatile or empty, and R is a promoted 7207 // arithmetic type, there exist candidate operator functions of 7208 // the form 7209 // 7210 // VQ L& operator=(VQ L&, R); 7211 // VQ L& operator*=(VQ L&, R); 7212 // VQ L& operator/=(VQ L&, R); 7213 // VQ L& operator+=(VQ L&, R); 7214 // VQ L& operator-=(VQ L&, R); 7215 void addAssignmentArithmeticOverloads(bool isEqualOp) { 7216 if (!HasArithmeticOrEnumeralCandidateType) 7217 return; 7218 7219 for (unsigned Left = 0; Left < NumArithmeticTypes; ++Left) { 7220 for (unsigned Right = FirstPromotedArithmeticType; 7221 Right < LastPromotedArithmeticType; ++Right) { 7222 QualType ParamTypes[2]; 7223 ParamTypes[1] = getArithmeticType(Right); 7224 7225 // Add this built-in operator as a candidate (VQ is empty). 7226 ParamTypes[0] = 7227 S.Context.getLValueReferenceType(getArithmeticType(Left)); 7228 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet, 7229 /*IsAssigmentOperator=*/isEqualOp); 7230 7231 // Add this built-in operator as a candidate (VQ is 'volatile'). 7232 if (VisibleTypeConversionsQuals.hasVolatile()) { 7233 ParamTypes[0] = 7234 S.Context.getVolatileType(getArithmeticType(Left)); 7235 ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]); 7236 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, 7237 CandidateSet, 7238 /*IsAssigmentOperator=*/isEqualOp); 7239 } 7240 } 7241 } 7242 7243 // Extension: Add the binary operators =, +=, -=, *=, /= for vector types. 7244 for (BuiltinCandidateTypeSet::iterator 7245 Vec1 = CandidateTypes[0].vector_begin(), 7246 Vec1End = CandidateTypes[0].vector_end(); 7247 Vec1 != Vec1End; ++Vec1) { 7248 for (BuiltinCandidateTypeSet::iterator 7249 Vec2 = CandidateTypes[1].vector_begin(), 7250 Vec2End = CandidateTypes[1].vector_end(); 7251 Vec2 != Vec2End; ++Vec2) { 7252 QualType ParamTypes[2]; 7253 ParamTypes[1] = *Vec2; 7254 // Add this built-in operator as a candidate (VQ is empty). 7255 ParamTypes[0] = S.Context.getLValueReferenceType(*Vec1); 7256 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet, 7257 /*IsAssigmentOperator=*/isEqualOp); 7258 7259 // Add this built-in operator as a candidate (VQ is 'volatile'). 7260 if (VisibleTypeConversionsQuals.hasVolatile()) { 7261 ParamTypes[0] = S.Context.getVolatileType(*Vec1); 7262 ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]); 7263 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, 7264 CandidateSet, 7265 /*IsAssigmentOperator=*/isEqualOp); 7266 } 7267 } 7268 } 7269 } 7270 7271 // C++ [over.built]p22: 7272 // 7273 // For every triple (L, VQ, R), where L is an integral type, VQ 7274 // is either volatile or empty, and R is a promoted integral 7275 // type, there exist candidate operator functions of the form 7276 // 7277 // VQ L& operator%=(VQ L&, R); 7278 // VQ L& operator<<=(VQ L&, R); 7279 // VQ L& operator>>=(VQ L&, R); 7280 // VQ L& operator&=(VQ L&, R); 7281 // VQ L& operator^=(VQ L&, R); 7282 // VQ L& operator|=(VQ L&, R); 7283 void addAssignmentIntegralOverloads() { 7284 if (!HasArithmeticOrEnumeralCandidateType) 7285 return; 7286 7287 for (unsigned Left = FirstIntegralType; Left < LastIntegralType; ++Left) { 7288 for (unsigned Right = FirstPromotedIntegralType; 7289 Right < LastPromotedIntegralType; ++Right) { 7290 QualType ParamTypes[2]; 7291 ParamTypes[1] = getArithmeticType(Right); 7292 7293 // Add this built-in operator as a candidate (VQ is empty). 7294 ParamTypes[0] = 7295 S.Context.getLValueReferenceType(getArithmeticType(Left)); 7296 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet); 7297 if (VisibleTypeConversionsQuals.hasVolatile()) { 7298 // Add this built-in operator as a candidate (VQ is 'volatile'). 7299 ParamTypes[0] = getArithmeticType(Left); 7300 ParamTypes[0] = S.Context.getVolatileType(ParamTypes[0]); 7301 ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]); 7302 S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, 7303 CandidateSet); 7304 } 7305 } 7306 } 7307 } 7308 7309 // C++ [over.operator]p23: 7310 // 7311 // There also exist candidate operator functions of the form 7312 // 7313 // bool operator!(bool); 7314 // bool operator&&(bool, bool); 7315 // bool operator||(bool, bool); 7316 void addExclaimOverload() { 7317 QualType ParamTy = S.Context.BoolTy; 7318 S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, 1, CandidateSet, 7319 /*IsAssignmentOperator=*/false, 7320 /*NumContextualBoolArguments=*/1); 7321 } 7322 void addAmpAmpOrPipePipeOverload() { 7323 QualType ParamTypes[2] = { S.Context.BoolTy, S.Context.BoolTy }; 7324 S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2, CandidateSet, 7325 /*IsAssignmentOperator=*/false, 7326 /*NumContextualBoolArguments=*/2); 7327 } 7328 7329 // C++ [over.built]p13: 7330 // 7331 // For every cv-qualified or cv-unqualified object type T there 7332 // exist candidate operator functions of the form 7333 // 7334 // T* operator+(T*, ptrdiff_t); [ABOVE] 7335 // T& operator[](T*, ptrdiff_t); 7336 // T* operator-(T*, ptrdiff_t); [ABOVE] 7337 // T* operator+(ptrdiff_t, T*); [ABOVE] 7338 // T& operator[](ptrdiff_t, T*); 7339 void addSubscriptOverloads() { 7340 for (BuiltinCandidateTypeSet::iterator 7341 Ptr = CandidateTypes[0].pointer_begin(), 7342 PtrEnd = CandidateTypes[0].pointer_end(); 7343 Ptr != PtrEnd; ++Ptr) { 7344 QualType ParamTypes[2] = { *Ptr, S.Context.getPointerDiffType() }; 7345 QualType PointeeType = (*Ptr)->getPointeeType(); 7346 if (!PointeeType->isObjectType()) 7347 continue; 7348 7349 QualType ResultTy = S.Context.getLValueReferenceType(PointeeType); 7350 7351 // T& operator[](T*, ptrdiff_t) 7352 S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet); 7353 } 7354 7355 for (BuiltinCandidateTypeSet::iterator 7356 Ptr = CandidateTypes[1].pointer_begin(), 7357 PtrEnd = CandidateTypes[1].pointer_end(); 7358 Ptr != PtrEnd; ++Ptr) { 7359 QualType ParamTypes[2] = { S.Context.getPointerDiffType(), *Ptr }; 7360 QualType PointeeType = (*Ptr)->getPointeeType(); 7361 if (!PointeeType->isObjectType()) 7362 continue; 7363 7364 QualType ResultTy = S.Context.getLValueReferenceType(PointeeType); 7365 7366 // T& operator[](ptrdiff_t, T*) 7367 S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet); 7368 } 7369 } 7370 7371 // C++ [over.built]p11: 7372 // For every quintuple (C1, C2, T, CV1, CV2), where C2 is a class type, 7373 // C1 is the same type as C2 or is a derived class of C2, T is an object 7374 // type or a function type, and CV1 and CV2 are cv-qualifier-seqs, 7375 // there exist candidate operator functions of the form 7376 // 7377 // CV12 T& operator->*(CV1 C1*, CV2 T C2::*); 7378 // 7379 // where CV12 is the union of CV1 and CV2. 7380 void addArrowStarOverloads() { 7381 for (BuiltinCandidateTypeSet::iterator 7382 Ptr = CandidateTypes[0].pointer_begin(), 7383 PtrEnd = CandidateTypes[0].pointer_end(); 7384 Ptr != PtrEnd; ++Ptr) { 7385 QualType C1Ty = (*Ptr); 7386 QualType C1; 7387 QualifierCollector Q1; 7388 C1 = QualType(Q1.strip(C1Ty->getPointeeType()), 0); 7389 if (!isa<RecordType>(C1)) 7390 continue; 7391 // heuristic to reduce number of builtin candidates in the set. 7392 // Add volatile/restrict version only if there are conversions to a 7393 // volatile/restrict type. 7394 if (!VisibleTypeConversionsQuals.hasVolatile() && Q1.hasVolatile()) 7395 continue; 7396 if (!VisibleTypeConversionsQuals.hasRestrict() && Q1.hasRestrict()) 7397 continue; 7398 for (BuiltinCandidateTypeSet::iterator 7399 MemPtr = CandidateTypes[1].member_pointer_begin(), 7400 MemPtrEnd = CandidateTypes[1].member_pointer_end(); 7401 MemPtr != MemPtrEnd; ++MemPtr) { 7402 const MemberPointerType *mptr = cast<MemberPointerType>(*MemPtr); 7403 QualType C2 = QualType(mptr->getClass(), 0); 7404 C2 = C2.getUnqualifiedType(); 7405 if (C1 != C2 && !S.IsDerivedFrom(C1, C2)) 7406 break; 7407 QualType ParamTypes[2] = { *Ptr, *MemPtr }; 7408 // build CV12 T& 7409 QualType T = mptr->getPointeeType(); 7410 if (!VisibleTypeConversionsQuals.hasVolatile() && 7411 T.isVolatileQualified()) 7412 continue; 7413 if (!VisibleTypeConversionsQuals.hasRestrict() && 7414 T.isRestrictQualified()) 7415 continue; 7416 T = Q1.apply(S.Context, T); 7417 QualType ResultTy = S.Context.getLValueReferenceType(T); 7418 S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet); 7419 } 7420 } 7421 } 7422 7423 // Note that we don't consider the first argument, since it has been 7424 // contextually converted to bool long ago. The candidates below are 7425 // therefore added as binary. 7426 // 7427 // C++ [over.built]p25: 7428 // For every type T, where T is a pointer, pointer-to-member, or scoped 7429 // enumeration type, there exist candidate operator functions of the form 7430 // 7431 // T operator?(bool, T, T); 7432 // 7433 void addConditionalOperatorOverloads() { 7434 /// Set of (canonical) types that we've already handled. 7435 llvm::SmallPtrSet<QualType, 8> AddedTypes; 7436 7437 for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) { 7438 for (BuiltinCandidateTypeSet::iterator 7439 Ptr = CandidateTypes[ArgIdx].pointer_begin(), 7440 PtrEnd = CandidateTypes[ArgIdx].pointer_end(); 7441 Ptr != PtrEnd; ++Ptr) { 7442 if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr))) 7443 continue; 7444 7445 QualType ParamTypes[2] = { *Ptr, *Ptr }; 7446 S.AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet); 7447 } 7448 7449 for (BuiltinCandidateTypeSet::iterator 7450 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(), 7451 MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end(); 7452 MemPtr != MemPtrEnd; ++MemPtr) { 7453 if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr))) 7454 continue; 7455 7456 QualType ParamTypes[2] = { *MemPtr, *MemPtr }; 7457 S.AddBuiltinCandidate(*MemPtr, ParamTypes, Args, 2, CandidateSet); 7458 } 7459 7460 if (S.getLangOpts().CPlusPlus0x) { 7461 for (BuiltinCandidateTypeSet::iterator 7462 Enum = CandidateTypes[ArgIdx].enumeration_begin(), 7463 EnumEnd = CandidateTypes[ArgIdx].enumeration_end(); 7464 Enum != EnumEnd; ++Enum) { 7465 if (!(*Enum)->getAs<EnumType>()->getDecl()->isScoped()) 7466 continue; 7467 7468 if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum))) 7469 continue; 7470 7471 QualType ParamTypes[2] = { *Enum, *Enum }; 7472 S.AddBuiltinCandidate(*Enum, ParamTypes, Args, 2, CandidateSet); 7473 } 7474 } 7475 } 7476 } 7477}; 7478 7479} // end anonymous namespace 7480 7481/// AddBuiltinOperatorCandidates - Add the appropriate built-in 7482/// operator overloads to the candidate set (C++ [over.built]), based 7483/// on the operator @p Op and the arguments given. For example, if the 7484/// operator is a binary '+', this routine might add "int 7485/// operator+(int, int)" to cover integer addition. 7486void 7487Sema::AddBuiltinOperatorCandidates(OverloadedOperatorKind Op, 7488 SourceLocation OpLoc, 7489 Expr **Args, unsigned NumArgs, 7490 OverloadCandidateSet& CandidateSet) { 7491 // Find all of the types that the arguments can convert to, but only 7492 // if the operator we're looking at has built-in operator candidates 7493 // that make use of these types. Also record whether we encounter non-record 7494 // candidate types or either arithmetic or enumeral candidate types. 7495 Qualifiers VisibleTypeConversionsQuals; 7496 VisibleTypeConversionsQuals.addConst(); 7497 for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) 7498 VisibleTypeConversionsQuals += CollectVRQualifiers(Context, Args[ArgIdx]); 7499 7500 bool HasNonRecordCandidateType = false; 7501 bool HasArithmeticOrEnumeralCandidateType = false; 7502 SmallVector<BuiltinCandidateTypeSet, 2> CandidateTypes; 7503 for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) { 7504 CandidateTypes.push_back(BuiltinCandidateTypeSet(*this)); 7505 CandidateTypes[ArgIdx].AddTypesConvertedFrom(Args[ArgIdx]->getType(), 7506 OpLoc, 7507 true, 7508 (Op == OO_Exclaim || 7509 Op == OO_AmpAmp || 7510 Op == OO_PipePipe), 7511 VisibleTypeConversionsQuals); 7512 HasNonRecordCandidateType = HasNonRecordCandidateType || 7513 CandidateTypes[ArgIdx].hasNonRecordTypes(); 7514 HasArithmeticOrEnumeralCandidateType = 7515 HasArithmeticOrEnumeralCandidateType || 7516 CandidateTypes[ArgIdx].hasArithmeticOrEnumeralTypes(); 7517 } 7518 7519 // Exit early when no non-record types have been added to the candidate set 7520 // for any of the arguments to the operator. 7521 // 7522 // We can't exit early for !, ||, or &&, since there we have always have 7523 // 'bool' overloads. 7524 if (!HasNonRecordCandidateType && 7525 !(Op == OO_Exclaim || Op == OO_AmpAmp || Op == OO_PipePipe)) 7526 return; 7527 7528 // Setup an object to manage the common state for building overloads. 7529 BuiltinOperatorOverloadBuilder OpBuilder(*this, Args, NumArgs, 7530 VisibleTypeConversionsQuals, 7531 HasArithmeticOrEnumeralCandidateType, 7532 CandidateTypes, CandidateSet); 7533 7534 // Dispatch over the operation to add in only those overloads which apply. 7535 switch (Op) { 7536 case OO_None: 7537 case NUM_OVERLOADED_OPERATORS: 7538 llvm_unreachable("Expected an overloaded operator"); 7539 7540 case OO_New: 7541 case OO_Delete: 7542 case OO_Array_New: 7543 case OO_Array_Delete: 7544 case OO_Call: 7545 llvm_unreachable( 7546 "Special operators don't use AddBuiltinOperatorCandidates"); 7547 7548 case OO_Comma: 7549 case OO_Arrow: 7550 // C++ [over.match.oper]p3: 7551 // -- For the operator ',', the unary operator '&', or the 7552 // operator '->', the built-in candidates set is empty. 7553 break; 7554 7555 case OO_Plus: // '+' is either unary or binary 7556 if (NumArgs == 1) 7557 OpBuilder.addUnaryPlusPointerOverloads(); 7558 // Fall through. 7559 7560 case OO_Minus: // '-' is either unary or binary 7561 if (NumArgs == 1) { 7562 OpBuilder.addUnaryPlusOrMinusArithmeticOverloads(); 7563 } else { 7564 OpBuilder.addBinaryPlusOrMinusPointerOverloads(Op); 7565 OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false); 7566 } 7567 break; 7568 7569 case OO_Star: // '*' is either unary or binary 7570 if (NumArgs == 1) 7571 OpBuilder.addUnaryStarPointerOverloads(); 7572 else 7573 OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false); 7574 break; 7575 7576 case OO_Slash: 7577 OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false); 7578 break; 7579 7580 case OO_PlusPlus: 7581 case OO_MinusMinus: 7582 OpBuilder.addPlusPlusMinusMinusArithmeticOverloads(Op); 7583 OpBuilder.addPlusPlusMinusMinusPointerOverloads(); 7584 break; 7585 7586 case OO_EqualEqual: 7587 case OO_ExclaimEqual: 7588 OpBuilder.addEqualEqualOrNotEqualMemberPointerOverloads(); 7589 // Fall through. 7590 7591 case OO_Less: 7592 case OO_Greater: 7593 case OO_LessEqual: 7594 case OO_GreaterEqual: 7595 OpBuilder.addRelationalPointerOrEnumeralOverloads(); 7596 OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/true); 7597 break; 7598 7599 case OO_Percent: 7600 case OO_Caret: 7601 case OO_Pipe: 7602 case OO_LessLess: 7603 case OO_GreaterGreater: 7604 OpBuilder.addBinaryBitwiseArithmeticOverloads(Op); 7605 break; 7606 7607 case OO_Amp: // '&' is either unary or binary 7608 if (NumArgs == 1) 7609 // C++ [over.match.oper]p3: 7610 // -- For the operator ',', the unary operator '&', or the 7611 // operator '->', the built-in candidates set is empty. 7612 break; 7613 7614 OpBuilder.addBinaryBitwiseArithmeticOverloads(Op); 7615 break; 7616 7617 case OO_Tilde: 7618 OpBuilder.addUnaryTildePromotedIntegralOverloads(); 7619 break; 7620 7621 case OO_Equal: 7622 OpBuilder.addAssignmentMemberPointerOrEnumeralOverloads(); 7623 // Fall through. 7624 7625 case OO_PlusEqual: 7626 case OO_MinusEqual: 7627 OpBuilder.addAssignmentPointerOverloads(Op == OO_Equal); 7628 // Fall through. 7629 7630 case OO_StarEqual: 7631 case OO_SlashEqual: 7632 OpBuilder.addAssignmentArithmeticOverloads(Op == OO_Equal); 7633 break; 7634 7635 case OO_PercentEqual: 7636 case OO_LessLessEqual: 7637 case OO_GreaterGreaterEqual: 7638 case OO_AmpEqual: 7639 case OO_CaretEqual: 7640 case OO_PipeEqual: 7641 OpBuilder.addAssignmentIntegralOverloads(); 7642 break; 7643 7644 case OO_Exclaim: 7645 OpBuilder.addExclaimOverload(); 7646 break; 7647 7648 case OO_AmpAmp: 7649 case OO_PipePipe: 7650 OpBuilder.addAmpAmpOrPipePipeOverload(); 7651 break; 7652 7653 case OO_Subscript: 7654 OpBuilder.addSubscriptOverloads(); 7655 break; 7656 7657 case OO_ArrowStar: 7658 OpBuilder.addArrowStarOverloads(); 7659 break; 7660 7661 case OO_Conditional: 7662 OpBuilder.addConditionalOperatorOverloads(); 7663 OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false); 7664 break; 7665 } 7666} 7667 7668/// \brief Add function candidates found via argument-dependent lookup 7669/// to the set of overloading candidates. 7670/// 7671/// This routine performs argument-dependent name lookup based on the 7672/// given function name (which may also be an operator name) and adds 7673/// all of the overload candidates found by ADL to the overload 7674/// candidate set (C++ [basic.lookup.argdep]). 7675void 7676Sema::AddArgumentDependentLookupCandidates(DeclarationName Name, 7677 bool Operator, SourceLocation Loc, 7678 llvm::ArrayRef<Expr *> Args, 7679 TemplateArgumentListInfo *ExplicitTemplateArgs, 7680 OverloadCandidateSet& CandidateSet, 7681 bool PartialOverloading, 7682 bool StdNamespaceIsAssociated) { 7683 ADLResult Fns; 7684 7685 // FIXME: This approach for uniquing ADL results (and removing 7686 // redundant candidates from the set) relies on pointer-equality, 7687 // which means we need to key off the canonical decl. However, 7688 // always going back to the canonical decl might not get us the 7689 // right set of default arguments. What default arguments are 7690 // we supposed to consider on ADL candidates, anyway? 7691 7692 // FIXME: Pass in the explicit template arguments? 7693 ArgumentDependentLookup(Name, Operator, Loc, Args, Fns, 7694 StdNamespaceIsAssociated); 7695 7696 // Erase all of the candidates we already knew about. 7697 for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(), 7698 CandEnd = CandidateSet.end(); 7699 Cand != CandEnd; ++Cand) 7700 if (Cand->Function) { 7701 Fns.erase(Cand->Function); 7702 if (FunctionTemplateDecl *FunTmpl = Cand->Function->getPrimaryTemplate()) 7703 Fns.erase(FunTmpl); 7704 } 7705 7706 // For each of the ADL candidates we found, add it to the overload 7707 // set. 7708 for (ADLResult::iterator I = Fns.begin(), E = Fns.end(); I != E; ++I) { 7709 DeclAccessPair FoundDecl = DeclAccessPair::make(*I, AS_none); 7710 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) { 7711 if (ExplicitTemplateArgs) 7712 continue; 7713 7714 AddOverloadCandidate(FD, FoundDecl, Args, CandidateSet, false, 7715 PartialOverloading); 7716 } else 7717 AddTemplateOverloadCandidate(cast<FunctionTemplateDecl>(*I), 7718 FoundDecl, ExplicitTemplateArgs, 7719 Args, CandidateSet); 7720 } 7721} 7722 7723/// isBetterOverloadCandidate - Determines whether the first overload 7724/// candidate is a better candidate than the second (C++ 13.3.3p1). 7725bool 7726isBetterOverloadCandidate(Sema &S, 7727 const OverloadCandidate &Cand1, 7728 const OverloadCandidate &Cand2, 7729 SourceLocation Loc, 7730 bool UserDefinedConversion) { 7731 // Define viable functions to be better candidates than non-viable 7732 // functions. 7733 if (!Cand2.Viable) 7734 return Cand1.Viable; 7735 else if (!Cand1.Viable) 7736 return false; 7737 7738 // C++ [over.match.best]p1: 7739 // 7740 // -- if F is a static member function, ICS1(F) is defined such 7741 // that ICS1(F) is neither better nor worse than ICS1(G) for 7742 // any function G, and, symmetrically, ICS1(G) is neither 7743 // better nor worse than ICS1(F). 7744 unsigned StartArg = 0; 7745 if (Cand1.IgnoreObjectArgument || Cand2.IgnoreObjectArgument) 7746 StartArg = 1; 7747 7748 // C++ [over.match.best]p1: 7749 // A viable function F1 is defined to be a better function than another 7750 // viable function F2 if for all arguments i, ICSi(F1) is not a worse 7751 // conversion sequence than ICSi(F2), and then... 7752 unsigned NumArgs = Cand1.NumConversions; 7753 assert(Cand2.NumConversions == NumArgs && "Overload candidate mismatch"); 7754 bool HasBetterConversion = false; 7755 for (unsigned ArgIdx = StartArg; ArgIdx < NumArgs; ++ArgIdx) { 7756 switch (CompareImplicitConversionSequences(S, 7757 Cand1.Conversions[ArgIdx], 7758 Cand2.Conversions[ArgIdx])) { 7759 case ImplicitConversionSequence::Better: 7760 // Cand1 has a better conversion sequence. 7761 HasBetterConversion = true; 7762 break; 7763 7764 case ImplicitConversionSequence::Worse: 7765 // Cand1 can't be better than Cand2. 7766 return false; 7767 7768 case ImplicitConversionSequence::Indistinguishable: 7769 // Do nothing. 7770 break; 7771 } 7772 } 7773 7774 // -- for some argument j, ICSj(F1) is a better conversion sequence than 7775 // ICSj(F2), or, if not that, 7776 if (HasBetterConversion) 7777 return true; 7778 7779 // - F1 is a non-template function and F2 is a function template 7780 // specialization, or, if not that, 7781 if ((!Cand1.Function || !Cand1.Function->getPrimaryTemplate()) && 7782 Cand2.Function && Cand2.Function->getPrimaryTemplate()) 7783 return true; 7784 7785 // -- F1 and F2 are function template specializations, and the function 7786 // template for F1 is more specialized than the template for F2 7787 // according to the partial ordering rules described in 14.5.5.2, or, 7788 // if not that, 7789 if (Cand1.Function && Cand1.Function->getPrimaryTemplate() && 7790 Cand2.Function && Cand2.Function->getPrimaryTemplate()) { 7791 if (FunctionTemplateDecl *BetterTemplate 7792 = S.getMoreSpecializedTemplate(Cand1.Function->getPrimaryTemplate(), 7793 Cand2.Function->getPrimaryTemplate(), 7794 Loc, 7795 isa<CXXConversionDecl>(Cand1.Function)? TPOC_Conversion 7796 : TPOC_Call, 7797 Cand1.ExplicitCallArguments)) 7798 return BetterTemplate == Cand1.Function->getPrimaryTemplate(); 7799 } 7800 7801 // -- the context is an initialization by user-defined conversion 7802 // (see 8.5, 13.3.1.5) and the standard conversion sequence 7803 // from the return type of F1 to the destination type (i.e., 7804 // the type of the entity being initialized) is a better 7805 // conversion sequence than the standard conversion sequence 7806 // from the return type of F2 to the destination type. 7807 if (UserDefinedConversion && Cand1.Function && Cand2.Function && 7808 isa<CXXConversionDecl>(Cand1.Function) && 7809 isa<CXXConversionDecl>(Cand2.Function)) { 7810 // First check whether we prefer one of the conversion functions over the 7811 // other. This only distinguishes the results in non-standard, extension 7812 // cases such as the conversion from a lambda closure type to a function 7813 // pointer or block. 7814 ImplicitConversionSequence::CompareKind FuncResult 7815 = compareConversionFunctions(S, Cand1.Function, Cand2.Function); 7816 if (FuncResult != ImplicitConversionSequence::Indistinguishable) 7817 return FuncResult; 7818 7819 switch (CompareStandardConversionSequences(S, 7820 Cand1.FinalConversion, 7821 Cand2.FinalConversion)) { 7822 case ImplicitConversionSequence::Better: 7823 // Cand1 has a better conversion sequence. 7824 return true; 7825 7826 case ImplicitConversionSequence::Worse: 7827 // Cand1 can't be better than Cand2. 7828 return false; 7829 7830 case ImplicitConversionSequence::Indistinguishable: 7831 // Do nothing 7832 break; 7833 } 7834 } 7835 7836 return false; 7837} 7838 7839/// \brief Computes the best viable function (C++ 13.3.3) 7840/// within an overload candidate set. 7841/// 7842/// \param Loc The location of the function name (or operator symbol) for 7843/// which overload resolution occurs. 7844/// 7845/// \param Best If overload resolution was successful or found a deleted 7846/// function, \p Best points to the candidate function found. 7847/// 7848/// \returns The result of overload resolution. 7849OverloadingResult 7850OverloadCandidateSet::BestViableFunction(Sema &S, SourceLocation Loc, 7851 iterator &Best, 7852 bool UserDefinedConversion) { 7853 // Find the best viable function. 7854 Best = end(); 7855 for (iterator Cand = begin(); Cand != end(); ++Cand) { 7856 if (Cand->Viable) 7857 if (Best == end() || isBetterOverloadCandidate(S, *Cand, *Best, Loc, 7858 UserDefinedConversion)) 7859 Best = Cand; 7860 } 7861 7862 // If we didn't find any viable functions, abort. 7863 if (Best == end()) 7864 return OR_No_Viable_Function; 7865 7866 // Make sure that this function is better than every other viable 7867 // function. If not, we have an ambiguity. 7868 for (iterator Cand = begin(); Cand != end(); ++Cand) { 7869 if (Cand->Viable && 7870 Cand != Best && 7871 !isBetterOverloadCandidate(S, *Best, *Cand, Loc, 7872 UserDefinedConversion)) { 7873 Best = end(); 7874 return OR_Ambiguous; 7875 } 7876 } 7877 7878 // Best is the best viable function. 7879 if (Best->Function && 7880 (Best->Function->isDeleted() || 7881 S.isFunctionConsideredUnavailable(Best->Function))) 7882 return OR_Deleted; 7883 7884 return OR_Success; 7885} 7886 7887namespace { 7888 7889enum OverloadCandidateKind { 7890 oc_function, 7891 oc_method, 7892 oc_constructor, 7893 oc_function_template, 7894 oc_method_template, 7895 oc_constructor_template, 7896 oc_implicit_default_constructor, 7897 oc_implicit_copy_constructor, 7898 oc_implicit_move_constructor, 7899 oc_implicit_copy_assignment, 7900 oc_implicit_move_assignment, 7901 oc_implicit_inherited_constructor 7902}; 7903 7904OverloadCandidateKind ClassifyOverloadCandidate(Sema &S, 7905 FunctionDecl *Fn, 7906 std::string &Description) { 7907 bool isTemplate = false; 7908 7909 if (FunctionTemplateDecl *FunTmpl = Fn->getPrimaryTemplate()) { 7910 isTemplate = true; 7911 Description = S.getTemplateArgumentBindingsText( 7912 FunTmpl->getTemplateParameters(), *Fn->getTemplateSpecializationArgs()); 7913 } 7914 7915 if (CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn)) { 7916 if (!Ctor->isImplicit()) 7917 return isTemplate ? oc_constructor_template : oc_constructor; 7918 7919 if (Ctor->getInheritedConstructor()) 7920 return oc_implicit_inherited_constructor; 7921 7922 if (Ctor->isDefaultConstructor()) 7923 return oc_implicit_default_constructor; 7924 7925 if (Ctor->isMoveConstructor()) 7926 return oc_implicit_move_constructor; 7927 7928 assert(Ctor->isCopyConstructor() && 7929 "unexpected sort of implicit constructor"); 7930 return oc_implicit_copy_constructor; 7931 } 7932 7933 if (CXXMethodDecl *Meth = dyn_cast<CXXMethodDecl>(Fn)) { 7934 // This actually gets spelled 'candidate function' for now, but 7935 // it doesn't hurt to split it out. 7936 if (!Meth->isImplicit()) 7937 return isTemplate ? oc_method_template : oc_method; 7938 7939 if (Meth->isMoveAssignmentOperator()) 7940 return oc_implicit_move_assignment; 7941 7942 if (Meth->isCopyAssignmentOperator()) 7943 return oc_implicit_copy_assignment; 7944 7945 assert(isa<CXXConversionDecl>(Meth) && "expected conversion"); 7946 return oc_method; 7947 } 7948 7949 return isTemplate ? oc_function_template : oc_function; 7950} 7951 7952void MaybeEmitInheritedConstructorNote(Sema &S, FunctionDecl *Fn) { 7953 const CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn); 7954 if (!Ctor) return; 7955 7956 Ctor = Ctor->getInheritedConstructor(); 7957 if (!Ctor) return; 7958 7959 S.Diag(Ctor->getLocation(), diag::note_ovl_candidate_inherited_constructor); 7960} 7961 7962} // end anonymous namespace 7963 7964// Notes the location of an overload candidate. 7965void Sema::NoteOverloadCandidate(FunctionDecl *Fn, QualType DestType) { 7966 std::string FnDesc; 7967 OverloadCandidateKind K = ClassifyOverloadCandidate(*this, Fn, FnDesc); 7968 PartialDiagnostic PD = PDiag(diag::note_ovl_candidate) 7969 << (unsigned) K << FnDesc; 7970 HandleFunctionTypeMismatch(PD, Fn->getType(), DestType); 7971 Diag(Fn->getLocation(), PD); 7972 MaybeEmitInheritedConstructorNote(*this, Fn); 7973} 7974 7975//Notes the location of all overload candidates designated through 7976// OverloadedExpr 7977void Sema::NoteAllOverloadCandidates(Expr* OverloadedExpr, QualType DestType) { 7978 assert(OverloadedExpr->getType() == Context.OverloadTy); 7979 7980 OverloadExpr::FindResult Ovl = OverloadExpr::find(OverloadedExpr); 7981 OverloadExpr *OvlExpr = Ovl.Expression; 7982 7983 for (UnresolvedSetIterator I = OvlExpr->decls_begin(), 7984 IEnd = OvlExpr->decls_end(); 7985 I != IEnd; ++I) { 7986 if (FunctionTemplateDecl *FunTmpl = 7987 dyn_cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl()) ) { 7988 NoteOverloadCandidate(FunTmpl->getTemplatedDecl(), DestType); 7989 } else if (FunctionDecl *Fun 7990 = dyn_cast<FunctionDecl>((*I)->getUnderlyingDecl()) ) { 7991 NoteOverloadCandidate(Fun, DestType); 7992 } 7993 } 7994} 7995 7996/// Diagnoses an ambiguous conversion. The partial diagnostic is the 7997/// "lead" diagnostic; it will be given two arguments, the source and 7998/// target types of the conversion. 7999void ImplicitConversionSequence::DiagnoseAmbiguousConversion( 8000 Sema &S, 8001 SourceLocation CaretLoc, 8002 const PartialDiagnostic &PDiag) const { 8003 S.Diag(CaretLoc, PDiag) 8004 << Ambiguous.getFromType() << Ambiguous.getToType(); 8005 for (AmbiguousConversionSequence::const_iterator 8006 I = Ambiguous.begin(), E = Ambiguous.end(); I != E; ++I) { 8007 S.NoteOverloadCandidate(*I); 8008 } 8009} 8010 8011namespace { 8012 8013void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I) { 8014 const ImplicitConversionSequence &Conv = Cand->Conversions[I]; 8015 assert(Conv.isBad()); 8016 assert(Cand->Function && "for now, candidate must be a function"); 8017 FunctionDecl *Fn = Cand->Function; 8018 8019 // There's a conversion slot for the object argument if this is a 8020 // non-constructor method. Note that 'I' corresponds the 8021 // conversion-slot index. 8022 bool isObjectArgument = false; 8023 if (isa<CXXMethodDecl>(Fn) && !isa<CXXConstructorDecl>(Fn)) { 8024 if (I == 0) 8025 isObjectArgument = true; 8026 else 8027 I--; 8028 } 8029 8030 std::string FnDesc; 8031 OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc); 8032 8033 Expr *FromExpr = Conv.Bad.FromExpr; 8034 QualType FromTy = Conv.Bad.getFromType(); 8035 QualType ToTy = Conv.Bad.getToType(); 8036 8037 if (FromTy == S.Context.OverloadTy) { 8038 assert(FromExpr && "overload set argument came from implicit argument?"); 8039 Expr *E = FromExpr->IgnoreParens(); 8040 if (isa<UnaryOperator>(E)) 8041 E = cast<UnaryOperator>(E)->getSubExpr()->IgnoreParens(); 8042 DeclarationName Name = cast<OverloadExpr>(E)->getName(); 8043 8044 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_overload) 8045 << (unsigned) FnKind << FnDesc 8046 << (FromExpr ? FromExpr->getSourceRange() : SourceRange()) 8047 << ToTy << Name << I+1; 8048 MaybeEmitInheritedConstructorNote(S, Fn); 8049 return; 8050 } 8051 8052 // Do some hand-waving analysis to see if the non-viability is due 8053 // to a qualifier mismatch. 8054 CanQualType CFromTy = S.Context.getCanonicalType(FromTy); 8055 CanQualType CToTy = S.Context.getCanonicalType(ToTy); 8056 if (CanQual<ReferenceType> RT = CToTy->getAs<ReferenceType>()) 8057 CToTy = RT->getPointeeType(); 8058 else { 8059 // TODO: detect and diagnose the full richness of const mismatches. 8060 if (CanQual<PointerType> FromPT = CFromTy->getAs<PointerType>()) 8061 if (CanQual<PointerType> ToPT = CToTy->getAs<PointerType>()) 8062 CFromTy = FromPT->getPointeeType(), CToTy = ToPT->getPointeeType(); 8063 } 8064 8065 if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() && 8066 !CToTy.isAtLeastAsQualifiedAs(CFromTy)) { 8067 Qualifiers FromQs = CFromTy.getQualifiers(); 8068 Qualifiers ToQs = CToTy.getQualifiers(); 8069 8070 if (FromQs.getAddressSpace() != ToQs.getAddressSpace()) { 8071 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_addrspace) 8072 << (unsigned) FnKind << FnDesc 8073 << (FromExpr ? FromExpr->getSourceRange() : SourceRange()) 8074 << FromTy 8075 << FromQs.getAddressSpace() << ToQs.getAddressSpace() 8076 << (unsigned) isObjectArgument << I+1; 8077 MaybeEmitInheritedConstructorNote(S, Fn); 8078 return; 8079 } 8080 8081 if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) { 8082 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_ownership) 8083 << (unsigned) FnKind << FnDesc 8084 << (FromExpr ? FromExpr->getSourceRange() : SourceRange()) 8085 << FromTy 8086 << FromQs.getObjCLifetime() << ToQs.getObjCLifetime() 8087 << (unsigned) isObjectArgument << I+1; 8088 MaybeEmitInheritedConstructorNote(S, Fn); 8089 return; 8090 } 8091 8092 if (FromQs.getObjCGCAttr() != ToQs.getObjCGCAttr()) { 8093 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_gc) 8094 << (unsigned) FnKind << FnDesc 8095 << (FromExpr ? FromExpr->getSourceRange() : SourceRange()) 8096 << FromTy 8097 << FromQs.getObjCGCAttr() << ToQs.getObjCGCAttr() 8098 << (unsigned) isObjectArgument << I+1; 8099 MaybeEmitInheritedConstructorNote(S, Fn); 8100 return; 8101 } 8102 8103 unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers(); 8104 assert(CVR && "unexpected qualifiers mismatch"); 8105 8106 if (isObjectArgument) { 8107 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr_this) 8108 << (unsigned) FnKind << FnDesc 8109 << (FromExpr ? FromExpr->getSourceRange() : SourceRange()) 8110 << FromTy << (CVR - 1); 8111 } else { 8112 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr) 8113 << (unsigned) FnKind << FnDesc 8114 << (FromExpr ? FromExpr->getSourceRange() : SourceRange()) 8115 << FromTy << (CVR - 1) << I+1; 8116 } 8117 MaybeEmitInheritedConstructorNote(S, Fn); 8118 return; 8119 } 8120 8121 // Special diagnostic for failure to convert an initializer list, since 8122 // telling the user that it has type void is not useful. 8123 if (FromExpr && isa<InitListExpr>(FromExpr)) { 8124 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_list_argument) 8125 << (unsigned) FnKind << FnDesc 8126 << (FromExpr ? FromExpr->getSourceRange() : SourceRange()) 8127 << FromTy << ToTy << (unsigned) isObjectArgument << I+1; 8128 MaybeEmitInheritedConstructorNote(S, Fn); 8129 return; 8130 } 8131 8132 // Diagnose references or pointers to incomplete types differently, 8133 // since it's far from impossible that the incompleteness triggered 8134 // the failure. 8135 QualType TempFromTy = FromTy.getNonReferenceType(); 8136 if (const PointerType *PTy = TempFromTy->getAs<PointerType>()) 8137 TempFromTy = PTy->getPointeeType(); 8138 if (TempFromTy->isIncompleteType()) { 8139 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_conv_incomplete) 8140 << (unsigned) FnKind << FnDesc 8141 << (FromExpr ? FromExpr->getSourceRange() : SourceRange()) 8142 << FromTy << ToTy << (unsigned) isObjectArgument << I+1; 8143 MaybeEmitInheritedConstructorNote(S, Fn); 8144 return; 8145 } 8146 8147 // Diagnose base -> derived pointer conversions. 8148 unsigned BaseToDerivedConversion = 0; 8149 if (const PointerType *FromPtrTy = FromTy->getAs<PointerType>()) { 8150 if (const PointerType *ToPtrTy = ToTy->getAs<PointerType>()) { 8151 if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs( 8152 FromPtrTy->getPointeeType()) && 8153 !FromPtrTy->getPointeeType()->isIncompleteType() && 8154 !ToPtrTy->getPointeeType()->isIncompleteType() && 8155 S.IsDerivedFrom(ToPtrTy->getPointeeType(), 8156 FromPtrTy->getPointeeType())) 8157 BaseToDerivedConversion = 1; 8158 } 8159 } else if (const ObjCObjectPointerType *FromPtrTy 8160 = FromTy->getAs<ObjCObjectPointerType>()) { 8161 if (const ObjCObjectPointerType *ToPtrTy 8162 = ToTy->getAs<ObjCObjectPointerType>()) 8163 if (const ObjCInterfaceDecl *FromIface = FromPtrTy->getInterfaceDecl()) 8164 if (const ObjCInterfaceDecl *ToIface = ToPtrTy->getInterfaceDecl()) 8165 if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs( 8166 FromPtrTy->getPointeeType()) && 8167 FromIface->isSuperClassOf(ToIface)) 8168 BaseToDerivedConversion = 2; 8169 } else if (const ReferenceType *ToRefTy = ToTy->getAs<ReferenceType>()) { 8170 if (ToRefTy->getPointeeType().isAtLeastAsQualifiedAs(FromTy) && 8171 !FromTy->isIncompleteType() && 8172 !ToRefTy->getPointeeType()->isIncompleteType() && 8173 S.IsDerivedFrom(ToRefTy->getPointeeType(), FromTy)) { 8174 BaseToDerivedConversion = 3; 8175 } else if (ToTy->isLValueReferenceType() && !FromExpr->isLValue() && 8176 ToTy.getNonReferenceType().getCanonicalType() == 8177 FromTy.getNonReferenceType().getCanonicalType()) { 8178 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_lvalue) 8179 << (unsigned) FnKind << FnDesc 8180 << (FromExpr ? FromExpr->getSourceRange() : SourceRange()) 8181 << (unsigned) isObjectArgument << I + 1; 8182 MaybeEmitInheritedConstructorNote(S, Fn); 8183 return; 8184 } 8185 } 8186 8187 if (BaseToDerivedConversion) { 8188 S.Diag(Fn->getLocation(), 8189 diag::note_ovl_candidate_bad_base_to_derived_conv) 8190 << (unsigned) FnKind << FnDesc 8191 << (FromExpr ? FromExpr->getSourceRange() : SourceRange()) 8192 << (BaseToDerivedConversion - 1) 8193 << FromTy << ToTy << I+1; 8194 MaybeEmitInheritedConstructorNote(S, Fn); 8195 return; 8196 } 8197 8198 if (isa<ObjCObjectPointerType>(CFromTy) && 8199 isa<PointerType>(CToTy)) { 8200 Qualifiers FromQs = CFromTy.getQualifiers(); 8201 Qualifiers ToQs = CToTy.getQualifiers(); 8202 if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) { 8203 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_arc_conv) 8204 << (unsigned) FnKind << FnDesc 8205 << (FromExpr ? FromExpr->getSourceRange() : SourceRange()) 8206 << FromTy << ToTy << (unsigned) isObjectArgument << I+1; 8207 MaybeEmitInheritedConstructorNote(S, Fn); 8208 return; 8209 } 8210 } 8211 8212 // Emit the generic diagnostic and, optionally, add the hints to it. 8213 PartialDiagnostic FDiag = S.PDiag(diag::note_ovl_candidate_bad_conv); 8214 FDiag << (unsigned) FnKind << FnDesc 8215 << (FromExpr ? FromExpr->getSourceRange() : SourceRange()) 8216 << FromTy << ToTy << (unsigned) isObjectArgument << I + 1 8217 << (unsigned) (Cand->Fix.Kind); 8218 8219 // If we can fix the conversion, suggest the FixIts. 8220 for (std::vector<FixItHint>::iterator HI = Cand->Fix.Hints.begin(), 8221 HE = Cand->Fix.Hints.end(); HI != HE; ++HI) 8222 FDiag << *HI; 8223 S.Diag(Fn->getLocation(), FDiag); 8224 8225 MaybeEmitInheritedConstructorNote(S, Fn); 8226} 8227 8228void DiagnoseArityMismatch(Sema &S, OverloadCandidate *Cand, 8229 unsigned NumFormalArgs) { 8230 // TODO: treat calls to a missing default constructor as a special case 8231 8232 FunctionDecl *Fn = Cand->Function; 8233 const FunctionProtoType *FnTy = Fn->getType()->getAs<FunctionProtoType>(); 8234 8235 unsigned MinParams = Fn->getMinRequiredArguments(); 8236 8237 // With invalid overloaded operators, it's possible that we think we 8238 // have an arity mismatch when it fact it looks like we have the 8239 // right number of arguments, because only overloaded operators have 8240 // the weird behavior of overloading member and non-member functions. 8241 // Just don't report anything. 8242 if (Fn->isInvalidDecl() && 8243 Fn->getDeclName().getNameKind() == DeclarationName::CXXOperatorName) 8244 return; 8245 8246 // at least / at most / exactly 8247 unsigned mode, modeCount; 8248 if (NumFormalArgs < MinParams) { 8249 assert((Cand->FailureKind == ovl_fail_too_few_arguments) || 8250 (Cand->FailureKind == ovl_fail_bad_deduction && 8251 Cand->DeductionFailure.Result == Sema::TDK_TooFewArguments)); 8252 if (MinParams != FnTy->getNumArgs() || 8253 FnTy->isVariadic() || FnTy->isTemplateVariadic()) 8254 mode = 0; // "at least" 8255 else 8256 mode = 2; // "exactly" 8257 modeCount = MinParams; 8258 } else { 8259 assert((Cand->FailureKind == ovl_fail_too_many_arguments) || 8260 (Cand->FailureKind == ovl_fail_bad_deduction && 8261 Cand->DeductionFailure.Result == Sema::TDK_TooManyArguments)); 8262 if (MinParams != FnTy->getNumArgs()) 8263 mode = 1; // "at most" 8264 else 8265 mode = 2; // "exactly" 8266 modeCount = FnTy->getNumArgs(); 8267 } 8268 8269 std::string Description; 8270 OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, Description); 8271 8272 if (modeCount == 1 && Fn->getParamDecl(0)->getDeclName()) 8273 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity_one) 8274 << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != 0) << mode 8275 << Fn->getParamDecl(0) << NumFormalArgs; 8276 else 8277 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity) 8278 << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != 0) << mode 8279 << modeCount << NumFormalArgs; 8280 MaybeEmitInheritedConstructorNote(S, Fn); 8281} 8282 8283/// Diagnose a failed template-argument deduction. 8284void DiagnoseBadDeduction(Sema &S, OverloadCandidate *Cand, 8285 unsigned NumArgs) { 8286 FunctionDecl *Fn = Cand->Function; // pattern 8287 8288 TemplateParameter Param = Cand->DeductionFailure.getTemplateParameter(); 8289 NamedDecl *ParamD; 8290 (ParamD = Param.dyn_cast<TemplateTypeParmDecl*>()) || 8291 (ParamD = Param.dyn_cast<NonTypeTemplateParmDecl*>()) || 8292 (ParamD = Param.dyn_cast<TemplateTemplateParmDecl*>()); 8293 switch (Cand->DeductionFailure.Result) { 8294 case Sema::TDK_Success: 8295 llvm_unreachable("TDK_success while diagnosing bad deduction"); 8296 8297 case Sema::TDK_Incomplete: { 8298 assert(ParamD && "no parameter found for incomplete deduction result"); 8299 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_incomplete_deduction) 8300 << ParamD->getDeclName(); 8301 MaybeEmitInheritedConstructorNote(S, Fn); 8302 return; 8303 } 8304 8305 case Sema::TDK_Underqualified: { 8306 assert(ParamD && "no parameter found for bad qualifiers deduction result"); 8307 TemplateTypeParmDecl *TParam = cast<TemplateTypeParmDecl>(ParamD); 8308 8309 QualType Param = Cand->DeductionFailure.getFirstArg()->getAsType(); 8310 8311 // Param will have been canonicalized, but it should just be a 8312 // qualified version of ParamD, so move the qualifiers to that. 8313 QualifierCollector Qs; 8314 Qs.strip(Param); 8315 QualType NonCanonParam = Qs.apply(S.Context, TParam->getTypeForDecl()); 8316 assert(S.Context.hasSameType(Param, NonCanonParam)); 8317 8318 // Arg has also been canonicalized, but there's nothing we can do 8319 // about that. It also doesn't matter as much, because it won't 8320 // have any template parameters in it (because deduction isn't 8321 // done on dependent types). 8322 QualType Arg = Cand->DeductionFailure.getSecondArg()->getAsType(); 8323 8324 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_underqualified) 8325 << ParamD->getDeclName() << Arg << NonCanonParam; 8326 MaybeEmitInheritedConstructorNote(S, Fn); 8327 return; 8328 } 8329 8330 case Sema::TDK_Inconsistent: { 8331 assert(ParamD && "no parameter found for inconsistent deduction result"); 8332 int which = 0; 8333 if (isa<TemplateTypeParmDecl>(ParamD)) 8334 which = 0; 8335 else if (isa<NonTypeTemplateParmDecl>(ParamD)) 8336 which = 1; 8337 else { 8338 which = 2; 8339 } 8340 8341 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_inconsistent_deduction) 8342 << which << ParamD->getDeclName() 8343 << *Cand->DeductionFailure.getFirstArg() 8344 << *Cand->DeductionFailure.getSecondArg(); 8345 MaybeEmitInheritedConstructorNote(S, Fn); 8346 return; 8347 } 8348 8349 case Sema::TDK_InvalidExplicitArguments: 8350 assert(ParamD && "no parameter found for invalid explicit arguments"); 8351 if (ParamD->getDeclName()) 8352 S.Diag(Fn->getLocation(), 8353 diag::note_ovl_candidate_explicit_arg_mismatch_named) 8354 << ParamD->getDeclName(); 8355 else { 8356 int index = 0; 8357 if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(ParamD)) 8358 index = TTP->getIndex(); 8359 else if (NonTypeTemplateParmDecl *NTTP 8360 = dyn_cast<NonTypeTemplateParmDecl>(ParamD)) 8361 index = NTTP->getIndex(); 8362 else 8363 index = cast<TemplateTemplateParmDecl>(ParamD)->getIndex(); 8364 S.Diag(Fn->getLocation(), 8365 diag::note_ovl_candidate_explicit_arg_mismatch_unnamed) 8366 << (index + 1); 8367 } 8368 MaybeEmitInheritedConstructorNote(S, Fn); 8369 return; 8370 8371 case Sema::TDK_TooManyArguments: 8372 case Sema::TDK_TooFewArguments: 8373 DiagnoseArityMismatch(S, Cand, NumArgs); 8374 return; 8375 8376 case Sema::TDK_InstantiationDepth: 8377 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_instantiation_depth); 8378 MaybeEmitInheritedConstructorNote(S, Fn); 8379 return; 8380 8381 case Sema::TDK_SubstitutionFailure: { 8382 // Format the template argument list into the argument string. 8383 llvm::SmallString<128> TemplateArgString; 8384 if (TemplateArgumentList *Args = 8385 Cand->DeductionFailure.getTemplateArgumentList()) { 8386 TemplateArgString = " "; 8387 TemplateArgString += S.getTemplateArgumentBindingsText( 8388 Fn->getDescribedFunctionTemplate()->getTemplateParameters(), *Args); 8389 } 8390 8391 // If this candidate was disabled by enable_if, say so. 8392 PartialDiagnosticAt *PDiag = Cand->DeductionFailure.getSFINAEDiagnostic(); 8393 if (PDiag && PDiag->second.getDiagID() == 8394 diag::err_typename_nested_not_found_enable_if) { 8395 // FIXME: Use the source range of the condition, and the fully-qualified 8396 // name of the enable_if template. These are both present in PDiag. 8397 S.Diag(PDiag->first, diag::note_ovl_candidate_disabled_by_enable_if) 8398 << "'enable_if'" << TemplateArgString; 8399 return; 8400 } 8401 8402 // Format the SFINAE diagnostic into the argument string. 8403 // FIXME: Add a general mechanism to include a PartialDiagnostic *'s 8404 // formatted message in another diagnostic. 8405 llvm::SmallString<128> SFINAEArgString; 8406 SourceRange R; 8407 if (PDiag) { 8408 SFINAEArgString = ": "; 8409 R = SourceRange(PDiag->first, PDiag->first); 8410 PDiag->second.EmitToString(S.getDiagnostics(), SFINAEArgString); 8411 } 8412 8413 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_substitution_failure) 8414 << TemplateArgString << SFINAEArgString << R; 8415 MaybeEmitInheritedConstructorNote(S, Fn); 8416 return; 8417 } 8418 8419 // TODO: diagnose these individually, then kill off 8420 // note_ovl_candidate_bad_deduction, which is uselessly vague. 8421 case Sema::TDK_NonDeducedMismatch: 8422 case Sema::TDK_FailedOverloadResolution: 8423 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_deduction); 8424 MaybeEmitInheritedConstructorNote(S, Fn); 8425 return; 8426 } 8427} 8428 8429/// CUDA: diagnose an invalid call across targets. 8430void DiagnoseBadTarget(Sema &S, OverloadCandidate *Cand) { 8431 FunctionDecl *Caller = cast<FunctionDecl>(S.CurContext); 8432 FunctionDecl *Callee = Cand->Function; 8433 8434 Sema::CUDAFunctionTarget CallerTarget = S.IdentifyCUDATarget(Caller), 8435 CalleeTarget = S.IdentifyCUDATarget(Callee); 8436 8437 std::string FnDesc; 8438 OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Callee, FnDesc); 8439 8440 S.Diag(Callee->getLocation(), diag::note_ovl_candidate_bad_target) 8441 << (unsigned) FnKind << CalleeTarget << CallerTarget; 8442} 8443 8444/// Generates a 'note' diagnostic for an overload candidate. We've 8445/// already generated a primary error at the call site. 8446/// 8447/// It really does need to be a single diagnostic with its caret 8448/// pointed at the candidate declaration. Yes, this creates some 8449/// major challenges of technical writing. Yes, this makes pointing 8450/// out problems with specific arguments quite awkward. It's still 8451/// better than generating twenty screens of text for every failed 8452/// overload. 8453/// 8454/// It would be great to be able to express per-candidate problems 8455/// more richly for those diagnostic clients that cared, but we'd 8456/// still have to be just as careful with the default diagnostics. 8457void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand, 8458 unsigned NumArgs) { 8459 FunctionDecl *Fn = Cand->Function; 8460 8461 // Note deleted candidates, but only if they're viable. 8462 if (Cand->Viable && (Fn->isDeleted() || 8463 S.isFunctionConsideredUnavailable(Fn))) { 8464 std::string FnDesc; 8465 OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc); 8466 8467 S.Diag(Fn->getLocation(), diag::note_ovl_candidate_deleted) 8468 << FnKind << FnDesc 8469 << (Fn->isDeleted() ? (Fn->isDeletedAsWritten() ? 1 : 2) : 0); 8470 MaybeEmitInheritedConstructorNote(S, Fn); 8471 return; 8472 } 8473 8474 // We don't really have anything else to say about viable candidates. 8475 if (Cand->Viable) { 8476 S.NoteOverloadCandidate(Fn); 8477 return; 8478 } 8479 8480 switch (Cand->FailureKind) { 8481 case ovl_fail_too_many_arguments: 8482 case ovl_fail_too_few_arguments: 8483 return DiagnoseArityMismatch(S, Cand, NumArgs); 8484 8485 case ovl_fail_bad_deduction: 8486 return DiagnoseBadDeduction(S, Cand, NumArgs); 8487 8488 case ovl_fail_trivial_conversion: 8489 case ovl_fail_bad_final_conversion: 8490 case ovl_fail_final_conversion_not_exact: 8491 return S.NoteOverloadCandidate(Fn); 8492 8493 case ovl_fail_bad_conversion: { 8494 unsigned I = (Cand->IgnoreObjectArgument ? 1 : 0); 8495 for (unsigned N = Cand->NumConversions; I != N; ++I) 8496 if (Cand->Conversions[I].isBad()) 8497 return DiagnoseBadConversion(S, Cand, I); 8498 8499 // FIXME: this currently happens when we're called from SemaInit 8500 // when user-conversion overload fails. Figure out how to handle 8501 // those conditions and diagnose them well. 8502 return S.NoteOverloadCandidate(Fn); 8503 } 8504 8505 case ovl_fail_bad_target: 8506 return DiagnoseBadTarget(S, Cand); 8507 } 8508} 8509 8510void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) { 8511 // Desugar the type of the surrogate down to a function type, 8512 // retaining as many typedefs as possible while still showing 8513 // the function type (and, therefore, its parameter types). 8514 QualType FnType = Cand->Surrogate->getConversionType(); 8515 bool isLValueReference = false; 8516 bool isRValueReference = false; 8517 bool isPointer = false; 8518 if (const LValueReferenceType *FnTypeRef = 8519 FnType->getAs<LValueReferenceType>()) { 8520 FnType = FnTypeRef->getPointeeType(); 8521 isLValueReference = true; 8522 } else if (const RValueReferenceType *FnTypeRef = 8523 FnType->getAs<RValueReferenceType>()) { 8524 FnType = FnTypeRef->getPointeeType(); 8525 isRValueReference = true; 8526 } 8527 if (const PointerType *FnTypePtr = FnType->getAs<PointerType>()) { 8528 FnType = FnTypePtr->getPointeeType(); 8529 isPointer = true; 8530 } 8531 // Desugar down to a function type. 8532 FnType = QualType(FnType->getAs<FunctionType>(), 0); 8533 // Reconstruct the pointer/reference as appropriate. 8534 if (isPointer) FnType = S.Context.getPointerType(FnType); 8535 if (isRValueReference) FnType = S.Context.getRValueReferenceType(FnType); 8536 if (isLValueReference) FnType = S.Context.getLValueReferenceType(FnType); 8537 8538 S.Diag(Cand->Surrogate->getLocation(), diag::note_ovl_surrogate_cand) 8539 << FnType; 8540 MaybeEmitInheritedConstructorNote(S, Cand->Surrogate); 8541} 8542 8543void NoteBuiltinOperatorCandidate(Sema &S, 8544 StringRef Opc, 8545 SourceLocation OpLoc, 8546 OverloadCandidate *Cand) { 8547 assert(Cand->NumConversions <= 2 && "builtin operator is not binary"); 8548 std::string TypeStr("operator"); 8549 TypeStr += Opc; 8550 TypeStr += "("; 8551 TypeStr += Cand->BuiltinTypes.ParamTypes[0].getAsString(); 8552 if (Cand->NumConversions == 1) { 8553 TypeStr += ")"; 8554 S.Diag(OpLoc, diag::note_ovl_builtin_unary_candidate) << TypeStr; 8555 } else { 8556 TypeStr += ", "; 8557 TypeStr += Cand->BuiltinTypes.ParamTypes[1].getAsString(); 8558 TypeStr += ")"; 8559 S.Diag(OpLoc, diag::note_ovl_builtin_binary_candidate) << TypeStr; 8560 } 8561} 8562 8563void NoteAmbiguousUserConversions(Sema &S, SourceLocation OpLoc, 8564 OverloadCandidate *Cand) { 8565 unsigned NoOperands = Cand->NumConversions; 8566 for (unsigned ArgIdx = 0; ArgIdx < NoOperands; ++ArgIdx) { 8567 const ImplicitConversionSequence &ICS = Cand->Conversions[ArgIdx]; 8568 if (ICS.isBad()) break; // all meaningless after first invalid 8569 if (!ICS.isAmbiguous()) continue; 8570 8571 ICS.DiagnoseAmbiguousConversion(S, OpLoc, 8572 S.PDiag(diag::note_ambiguous_type_conversion)); 8573 } 8574} 8575 8576SourceLocation GetLocationForCandidate(const OverloadCandidate *Cand) { 8577 if (Cand->Function) 8578 return Cand->Function->getLocation(); 8579 if (Cand->IsSurrogate) 8580 return Cand->Surrogate->getLocation(); 8581 return SourceLocation(); 8582} 8583 8584static unsigned 8585RankDeductionFailure(const OverloadCandidate::DeductionFailureInfo &DFI) { 8586 switch ((Sema::TemplateDeductionResult)DFI.Result) { 8587 case Sema::TDK_Success: 8588 llvm_unreachable("TDK_success while diagnosing bad deduction"); 8589 8590 case Sema::TDK_Invalid: 8591 case Sema::TDK_Incomplete: 8592 return 1; 8593 8594 case Sema::TDK_Underqualified: 8595 case Sema::TDK_Inconsistent: 8596 return 2; 8597 8598 case Sema::TDK_SubstitutionFailure: 8599 case Sema::TDK_NonDeducedMismatch: 8600 return 3; 8601 8602 case Sema::TDK_InstantiationDepth: 8603 case Sema::TDK_FailedOverloadResolution: 8604 return 4; 8605 8606 case Sema::TDK_InvalidExplicitArguments: 8607 return 5; 8608 8609 case Sema::TDK_TooManyArguments: 8610 case Sema::TDK_TooFewArguments: 8611 return 6; 8612 } 8613 llvm_unreachable("Unhandled deduction result"); 8614} 8615 8616struct CompareOverloadCandidatesForDisplay { 8617 Sema &S; 8618 CompareOverloadCandidatesForDisplay(Sema &S) : S(S) {} 8619 8620 bool operator()(const OverloadCandidate *L, 8621 const OverloadCandidate *R) { 8622 // Fast-path this check. 8623 if (L == R) return false; 8624 8625 // Order first by viability. 8626 if (L->Viable) { 8627 if (!R->Viable) return true; 8628 8629 // TODO: introduce a tri-valued comparison for overload 8630 // candidates. Would be more worthwhile if we had a sort 8631 // that could exploit it. 8632 if (isBetterOverloadCandidate(S, *L, *R, SourceLocation())) return true; 8633 if (isBetterOverloadCandidate(S, *R, *L, SourceLocation())) return false; 8634 } else if (R->Viable) 8635 return false; 8636 8637 assert(L->Viable == R->Viable); 8638 8639 // Criteria by which we can sort non-viable candidates: 8640 if (!L->Viable) { 8641 // 1. Arity mismatches come after other candidates. 8642 if (L->FailureKind == ovl_fail_too_many_arguments || 8643 L->FailureKind == ovl_fail_too_few_arguments) 8644 return false; 8645 if (R->FailureKind == ovl_fail_too_many_arguments || 8646 R->FailureKind == ovl_fail_too_few_arguments) 8647 return true; 8648 8649 // 2. Bad conversions come first and are ordered by the number 8650 // of bad conversions and quality of good conversions. 8651 if (L->FailureKind == ovl_fail_bad_conversion) { 8652 if (R->FailureKind != ovl_fail_bad_conversion) 8653 return true; 8654 8655 // The conversion that can be fixed with a smaller number of changes, 8656 // comes first. 8657 unsigned numLFixes = L->Fix.NumConversionsFixed; 8658 unsigned numRFixes = R->Fix.NumConversionsFixed; 8659 numLFixes = (numLFixes == 0) ? UINT_MAX : numLFixes; 8660 numRFixes = (numRFixes == 0) ? UINT_MAX : numRFixes; 8661 if (numLFixes != numRFixes) { 8662 if (numLFixes < numRFixes) 8663 return true; 8664 else 8665 return false; 8666 } 8667 8668 // If there's any ordering between the defined conversions... 8669 // FIXME: this might not be transitive. 8670 assert(L->NumConversions == R->NumConversions); 8671 8672 int leftBetter = 0; 8673 unsigned I = (L->IgnoreObjectArgument || R->IgnoreObjectArgument); 8674 for (unsigned E = L->NumConversions; I != E; ++I) { 8675 switch (CompareImplicitConversionSequences(S, 8676 L->Conversions[I], 8677 R->Conversions[I])) { 8678 case ImplicitConversionSequence::Better: 8679 leftBetter++; 8680 break; 8681 8682 case ImplicitConversionSequence::Worse: 8683 leftBetter--; 8684 break; 8685 8686 case ImplicitConversionSequence::Indistinguishable: 8687 break; 8688 } 8689 } 8690 if (leftBetter > 0) return true; 8691 if (leftBetter < 0) return false; 8692 8693 } else if (R->FailureKind == ovl_fail_bad_conversion) 8694 return false; 8695 8696 if (L->FailureKind == ovl_fail_bad_deduction) { 8697 if (R->FailureKind != ovl_fail_bad_deduction) 8698 return true; 8699 8700 if (L->DeductionFailure.Result != R->DeductionFailure.Result) 8701 return RankDeductionFailure(L->DeductionFailure) 8702 < RankDeductionFailure(R->DeductionFailure); 8703 } else if (R->FailureKind == ovl_fail_bad_deduction) 8704 return false; 8705 8706 // TODO: others? 8707 } 8708 8709 // Sort everything else by location. 8710 SourceLocation LLoc = GetLocationForCandidate(L); 8711 SourceLocation RLoc = GetLocationForCandidate(R); 8712 8713 // Put candidates without locations (e.g. builtins) at the end. 8714 if (LLoc.isInvalid()) return false; 8715 if (RLoc.isInvalid()) return true; 8716 8717 return S.SourceMgr.isBeforeInTranslationUnit(LLoc, RLoc); 8718 } 8719}; 8720 8721/// CompleteNonViableCandidate - Normally, overload resolution only 8722/// computes up to the first. Produces the FixIt set if possible. 8723void CompleteNonViableCandidate(Sema &S, OverloadCandidate *Cand, 8724 llvm::ArrayRef<Expr *> Args) { 8725 assert(!Cand->Viable); 8726 8727 // Don't do anything on failures other than bad conversion. 8728 if (Cand->FailureKind != ovl_fail_bad_conversion) return; 8729 8730 // We only want the FixIts if all the arguments can be corrected. 8731 bool Unfixable = false; 8732 // Use a implicit copy initialization to check conversion fixes. 8733 Cand->Fix.setConversionChecker(TryCopyInitialization); 8734 8735 // Skip forward to the first bad conversion. 8736 unsigned ConvIdx = (Cand->IgnoreObjectArgument ? 1 : 0); 8737 unsigned ConvCount = Cand->NumConversions; 8738 while (true) { 8739 assert(ConvIdx != ConvCount && "no bad conversion in candidate"); 8740 ConvIdx++; 8741 if (Cand->Conversions[ConvIdx - 1].isBad()) { 8742 Unfixable = !Cand->TryToFixBadConversion(ConvIdx - 1, S); 8743 break; 8744 } 8745 } 8746 8747 if (ConvIdx == ConvCount) 8748 return; 8749 8750 assert(!Cand->Conversions[ConvIdx].isInitialized() && 8751 "remaining conversion is initialized?"); 8752 8753 // FIXME: this should probably be preserved from the overload 8754 // operation somehow. 8755 bool SuppressUserConversions = false; 8756 8757 const FunctionProtoType* Proto; 8758 unsigned ArgIdx = ConvIdx; 8759 8760 if (Cand->IsSurrogate) { 8761 QualType ConvType 8762 = Cand->Surrogate->getConversionType().getNonReferenceType(); 8763 if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>()) 8764 ConvType = ConvPtrType->getPointeeType(); 8765 Proto = ConvType->getAs<FunctionProtoType>(); 8766 ArgIdx--; 8767 } else if (Cand->Function) { 8768 Proto = Cand->Function->getType()->getAs<FunctionProtoType>(); 8769 if (isa<CXXMethodDecl>(Cand->Function) && 8770 !isa<CXXConstructorDecl>(Cand->Function)) 8771 ArgIdx--; 8772 } else { 8773 // Builtin binary operator with a bad first conversion. 8774 assert(ConvCount <= 3); 8775 for (; ConvIdx != ConvCount; ++ConvIdx) 8776 Cand->Conversions[ConvIdx] 8777 = TryCopyInitialization(S, Args[ConvIdx], 8778 Cand->BuiltinTypes.ParamTypes[ConvIdx], 8779 SuppressUserConversions, 8780 /*InOverloadResolution*/ true, 8781 /*AllowObjCWritebackConversion=*/ 8782 S.getLangOpts().ObjCAutoRefCount); 8783 return; 8784 } 8785 8786 // Fill in the rest of the conversions. 8787 unsigned NumArgsInProto = Proto->getNumArgs(); 8788 for (; ConvIdx != ConvCount; ++ConvIdx, ++ArgIdx) { 8789 if (ArgIdx < NumArgsInProto) { 8790 Cand->Conversions[ConvIdx] 8791 = TryCopyInitialization(S, Args[ArgIdx], Proto->getArgType(ArgIdx), 8792 SuppressUserConversions, 8793 /*InOverloadResolution=*/true, 8794 /*AllowObjCWritebackConversion=*/ 8795 S.getLangOpts().ObjCAutoRefCount); 8796 // Store the FixIt in the candidate if it exists. 8797 if (!Unfixable && Cand->Conversions[ConvIdx].isBad()) 8798 Unfixable = !Cand->TryToFixBadConversion(ConvIdx, S); 8799 } 8800 else 8801 Cand->Conversions[ConvIdx].setEllipsis(); 8802 } 8803} 8804 8805} // end anonymous namespace 8806 8807/// PrintOverloadCandidates - When overload resolution fails, prints 8808/// diagnostic messages containing the candidates in the candidate 8809/// set. 8810void OverloadCandidateSet::NoteCandidates(Sema &S, 8811 OverloadCandidateDisplayKind OCD, 8812 llvm::ArrayRef<Expr *> Args, 8813 StringRef Opc, 8814 SourceLocation OpLoc) { 8815 // Sort the candidates by viability and position. Sorting directly would 8816 // be prohibitive, so we make a set of pointers and sort those. 8817 SmallVector<OverloadCandidate*, 32> Cands; 8818 if (OCD == OCD_AllCandidates) Cands.reserve(size()); 8819 for (iterator Cand = begin(), LastCand = end(); Cand != LastCand; ++Cand) { 8820 if (Cand->Viable) 8821 Cands.push_back(Cand); 8822 else if (OCD == OCD_AllCandidates) { 8823 CompleteNonViableCandidate(S, Cand, Args); 8824 if (Cand->Function || Cand->IsSurrogate) 8825 Cands.push_back(Cand); 8826 // Otherwise, this a non-viable builtin candidate. We do not, in general, 8827 // want to list every possible builtin candidate. 8828 } 8829 } 8830 8831 std::sort(Cands.begin(), Cands.end(), 8832 CompareOverloadCandidatesForDisplay(S)); 8833 8834 bool ReportedAmbiguousConversions = false; 8835 8836 SmallVectorImpl<OverloadCandidate*>::iterator I, E; 8837 const DiagnosticsEngine::OverloadsShown ShowOverloads = 8838 S.Diags.getShowOverloads(); 8839 unsigned CandsShown = 0; 8840 for (I = Cands.begin(), E = Cands.end(); I != E; ++I) { 8841 OverloadCandidate *Cand = *I; 8842 8843 // Set an arbitrary limit on the number of candidate functions we'll spam 8844 // the user with. FIXME: This limit should depend on details of the 8845 // candidate list. 8846 if (CandsShown >= 4 && ShowOverloads == DiagnosticsEngine::Ovl_Best) { 8847 break; 8848 } 8849 ++CandsShown; 8850 8851 if (Cand->Function) 8852 NoteFunctionCandidate(S, Cand, Args.size()); 8853 else if (Cand->IsSurrogate) 8854 NoteSurrogateCandidate(S, Cand); 8855 else { 8856 assert(Cand->Viable && 8857 "Non-viable built-in candidates are not added to Cands."); 8858 // Generally we only see ambiguities including viable builtin 8859 // operators if overload resolution got screwed up by an 8860 // ambiguous user-defined conversion. 8861 // 8862 // FIXME: It's quite possible for different conversions to see 8863 // different ambiguities, though. 8864 if (!ReportedAmbiguousConversions) { 8865 NoteAmbiguousUserConversions(S, OpLoc, Cand); 8866 ReportedAmbiguousConversions = true; 8867 } 8868 8869 // If this is a viable builtin, print it. 8870 NoteBuiltinOperatorCandidate(S, Opc, OpLoc, Cand); 8871 } 8872 } 8873 8874 if (I != E) 8875 S.Diag(OpLoc, diag::note_ovl_too_many_candidates) << int(E - I); 8876} 8877 8878// [PossiblyAFunctionType] --> [Return] 8879// NonFunctionType --> NonFunctionType 8880// R (A) --> R(A) 8881// R (*)(A) --> R (A) 8882// R (&)(A) --> R (A) 8883// R (S::*)(A) --> R (A) 8884QualType Sema::ExtractUnqualifiedFunctionType(QualType PossiblyAFunctionType) { 8885 QualType Ret = PossiblyAFunctionType; 8886 if (const PointerType *ToTypePtr = 8887 PossiblyAFunctionType->getAs<PointerType>()) 8888 Ret = ToTypePtr->getPointeeType(); 8889 else if (const ReferenceType *ToTypeRef = 8890 PossiblyAFunctionType->getAs<ReferenceType>()) 8891 Ret = ToTypeRef->getPointeeType(); 8892 else if (const MemberPointerType *MemTypePtr = 8893 PossiblyAFunctionType->getAs<MemberPointerType>()) 8894 Ret = MemTypePtr->getPointeeType(); 8895 Ret = 8896 Context.getCanonicalType(Ret).getUnqualifiedType(); 8897 return Ret; 8898} 8899 8900// A helper class to help with address of function resolution 8901// - allows us to avoid passing around all those ugly parameters 8902class AddressOfFunctionResolver 8903{ 8904 Sema& S; 8905 Expr* SourceExpr; 8906 const QualType& TargetType; 8907 QualType TargetFunctionType; // Extracted function type from target type 8908 8909 bool Complain; 8910 //DeclAccessPair& ResultFunctionAccessPair; 8911 ASTContext& Context; 8912 8913 bool TargetTypeIsNonStaticMemberFunction; 8914 bool FoundNonTemplateFunction; 8915 8916 OverloadExpr::FindResult OvlExprInfo; 8917 OverloadExpr *OvlExpr; 8918 TemplateArgumentListInfo OvlExplicitTemplateArgs; 8919 SmallVector<std::pair<DeclAccessPair, FunctionDecl*>, 4> Matches; 8920 8921public: 8922 AddressOfFunctionResolver(Sema &S, Expr* SourceExpr, 8923 const QualType& TargetType, bool Complain) 8924 : S(S), SourceExpr(SourceExpr), TargetType(TargetType), 8925 Complain(Complain), Context(S.getASTContext()), 8926 TargetTypeIsNonStaticMemberFunction( 8927 !!TargetType->getAs<MemberPointerType>()), 8928 FoundNonTemplateFunction(false), 8929 OvlExprInfo(OverloadExpr::find(SourceExpr)), 8930 OvlExpr(OvlExprInfo.Expression) 8931 { 8932 ExtractUnqualifiedFunctionTypeFromTargetType(); 8933 8934 if (!TargetFunctionType->isFunctionType()) { 8935 if (OvlExpr->hasExplicitTemplateArgs()) { 8936 DeclAccessPair dap; 8937 if (FunctionDecl* Fn = S.ResolveSingleFunctionTemplateSpecialization( 8938 OvlExpr, false, &dap) ) { 8939 8940 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) { 8941 if (!Method->isStatic()) { 8942 // If the target type is a non-function type and the function 8943 // found is a non-static member function, pretend as if that was 8944 // the target, it's the only possible type to end up with. 8945 TargetTypeIsNonStaticMemberFunction = true; 8946 8947 // And skip adding the function if its not in the proper form. 8948 // We'll diagnose this due to an empty set of functions. 8949 if (!OvlExprInfo.HasFormOfMemberPointer) 8950 return; 8951 } 8952 } 8953 8954 Matches.push_back(std::make_pair(dap,Fn)); 8955 } 8956 } 8957 return; 8958 } 8959 8960 if (OvlExpr->hasExplicitTemplateArgs()) 8961 OvlExpr->getExplicitTemplateArgs().copyInto(OvlExplicitTemplateArgs); 8962 8963 if (FindAllFunctionsThatMatchTargetTypeExactly()) { 8964 // C++ [over.over]p4: 8965 // If more than one function is selected, [...] 8966 if (Matches.size() > 1) { 8967 if (FoundNonTemplateFunction) 8968 EliminateAllTemplateMatches(); 8969 else 8970 EliminateAllExceptMostSpecializedTemplate(); 8971 } 8972 } 8973 } 8974 8975private: 8976 bool isTargetTypeAFunction() const { 8977 return TargetFunctionType->isFunctionType(); 8978 } 8979 8980 // [ToType] [Return] 8981 8982 // R (*)(A) --> R (A), IsNonStaticMemberFunction = false 8983 // R (&)(A) --> R (A), IsNonStaticMemberFunction = false 8984 // R (S::*)(A) --> R (A), IsNonStaticMemberFunction = true 8985 void inline ExtractUnqualifiedFunctionTypeFromTargetType() { 8986 TargetFunctionType = S.ExtractUnqualifiedFunctionType(TargetType); 8987 } 8988 8989 // return true if any matching specializations were found 8990 bool AddMatchingTemplateFunction(FunctionTemplateDecl* FunctionTemplate, 8991 const DeclAccessPair& CurAccessFunPair) { 8992 if (CXXMethodDecl *Method 8993 = dyn_cast<CXXMethodDecl>(FunctionTemplate->getTemplatedDecl())) { 8994 // Skip non-static function templates when converting to pointer, and 8995 // static when converting to member pointer. 8996 if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction) 8997 return false; 8998 } 8999 else if (TargetTypeIsNonStaticMemberFunction) 9000 return false; 9001 9002 // C++ [over.over]p2: 9003 // If the name is a function template, template argument deduction is 9004 // done (14.8.2.2), and if the argument deduction succeeds, the 9005 // resulting template argument list is used to generate a single 9006 // function template specialization, which is added to the set of 9007 // overloaded functions considered. 9008 FunctionDecl *Specialization = 0; 9009 TemplateDeductionInfo Info(OvlExpr->getNameLoc()); 9010 if (Sema::TemplateDeductionResult Result 9011 = S.DeduceTemplateArguments(FunctionTemplate, 9012 &OvlExplicitTemplateArgs, 9013 TargetFunctionType, Specialization, 9014 Info)) { 9015 // FIXME: make a note of the failed deduction for diagnostics. 9016 (void)Result; 9017 return false; 9018 } 9019 9020 // Template argument deduction ensures that we have an exact match. 9021 // This function template specicalization works. 9022 Specialization = cast<FunctionDecl>(Specialization->getCanonicalDecl()); 9023 assert(TargetFunctionType 9024 == Context.getCanonicalType(Specialization->getType())); 9025 Matches.push_back(std::make_pair(CurAccessFunPair, Specialization)); 9026 return true; 9027 } 9028 9029 bool AddMatchingNonTemplateFunction(NamedDecl* Fn, 9030 const DeclAccessPair& CurAccessFunPair) { 9031 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) { 9032 // Skip non-static functions when converting to pointer, and static 9033 // when converting to member pointer. 9034 if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction) 9035 return false; 9036 } 9037 else if (TargetTypeIsNonStaticMemberFunction) 9038 return false; 9039 9040 if (FunctionDecl *FunDecl = dyn_cast<FunctionDecl>(Fn)) { 9041 if (S.getLangOpts().CUDA) 9042 if (FunctionDecl *Caller = dyn_cast<FunctionDecl>(S.CurContext)) 9043 if (S.CheckCUDATarget(Caller, FunDecl)) 9044 return false; 9045 9046 QualType ResultTy; 9047 if (Context.hasSameUnqualifiedType(TargetFunctionType, 9048 FunDecl->getType()) || 9049 S.IsNoReturnConversion(FunDecl->getType(), TargetFunctionType, 9050 ResultTy)) { 9051 Matches.push_back(std::make_pair(CurAccessFunPair, 9052 cast<FunctionDecl>(FunDecl->getCanonicalDecl()))); 9053 FoundNonTemplateFunction = true; 9054 return true; 9055 } 9056 } 9057 9058 return false; 9059 } 9060 9061 bool FindAllFunctionsThatMatchTargetTypeExactly() { 9062 bool Ret = false; 9063 9064 // If the overload expression doesn't have the form of a pointer to 9065 // member, don't try to convert it to a pointer-to-member type. 9066 if (IsInvalidFormOfPointerToMemberFunction()) 9067 return false; 9068 9069 for (UnresolvedSetIterator I = OvlExpr->decls_begin(), 9070 E = OvlExpr->decls_end(); 9071 I != E; ++I) { 9072 // Look through any using declarations to find the underlying function. 9073 NamedDecl *Fn = (*I)->getUnderlyingDecl(); 9074 9075 // C++ [over.over]p3: 9076 // Non-member functions and static member functions match 9077 // targets of type "pointer-to-function" or "reference-to-function." 9078 // Nonstatic member functions match targets of 9079 // type "pointer-to-member-function." 9080 // Note that according to DR 247, the containing class does not matter. 9081 if (FunctionTemplateDecl *FunctionTemplate 9082 = dyn_cast<FunctionTemplateDecl>(Fn)) { 9083 if (AddMatchingTemplateFunction(FunctionTemplate, I.getPair())) 9084 Ret = true; 9085 } 9086 // If we have explicit template arguments supplied, skip non-templates. 9087 else if (!OvlExpr->hasExplicitTemplateArgs() && 9088 AddMatchingNonTemplateFunction(Fn, I.getPair())) 9089 Ret = true; 9090 } 9091 assert(Ret || Matches.empty()); 9092 return Ret; 9093 } 9094 9095 void EliminateAllExceptMostSpecializedTemplate() { 9096 // [...] and any given function template specialization F1 is 9097 // eliminated if the set contains a second function template 9098 // specialization whose function template is more specialized 9099 // than the function template of F1 according to the partial 9100 // ordering rules of 14.5.5.2. 9101 9102 // The algorithm specified above is quadratic. We instead use a 9103 // two-pass algorithm (similar to the one used to identify the 9104 // best viable function in an overload set) that identifies the 9105 // best function template (if it exists). 9106 9107 UnresolvedSet<4> MatchesCopy; // TODO: avoid! 9108 for (unsigned I = 0, E = Matches.size(); I != E; ++I) 9109 MatchesCopy.addDecl(Matches[I].second, Matches[I].first.getAccess()); 9110 9111 UnresolvedSetIterator Result = 9112 S.getMostSpecialized(MatchesCopy.begin(), MatchesCopy.end(), 9113 TPOC_Other, 0, SourceExpr->getLocStart(), 9114 S.PDiag(), 9115 S.PDiag(diag::err_addr_ovl_ambiguous) 9116 << Matches[0].second->getDeclName(), 9117 S.PDiag(diag::note_ovl_candidate) 9118 << (unsigned) oc_function_template, 9119 Complain, TargetFunctionType); 9120 9121 if (Result != MatchesCopy.end()) { 9122 // Make it the first and only element 9123 Matches[0].first = Matches[Result - MatchesCopy.begin()].first; 9124 Matches[0].second = cast<FunctionDecl>(*Result); 9125 Matches.resize(1); 9126 } 9127 } 9128 9129 void EliminateAllTemplateMatches() { 9130 // [...] any function template specializations in the set are 9131 // eliminated if the set also contains a non-template function, [...] 9132 for (unsigned I = 0, N = Matches.size(); I != N; ) { 9133 if (Matches[I].second->getPrimaryTemplate() == 0) 9134 ++I; 9135 else { 9136 Matches[I] = Matches[--N]; 9137 Matches.set_size(N); 9138 } 9139 } 9140 } 9141 9142public: 9143 void ComplainNoMatchesFound() const { 9144 assert(Matches.empty()); 9145 S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_no_viable) 9146 << OvlExpr->getName() << TargetFunctionType 9147 << OvlExpr->getSourceRange(); 9148 S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType); 9149 } 9150 9151 bool IsInvalidFormOfPointerToMemberFunction() const { 9152 return TargetTypeIsNonStaticMemberFunction && 9153 !OvlExprInfo.HasFormOfMemberPointer; 9154 } 9155 9156 void ComplainIsInvalidFormOfPointerToMemberFunction() const { 9157 // TODO: Should we condition this on whether any functions might 9158 // have matched, or is it more appropriate to do that in callers? 9159 // TODO: a fixit wouldn't hurt. 9160 S.Diag(OvlExpr->getNameLoc(), diag::err_addr_ovl_no_qualifier) 9161 << TargetType << OvlExpr->getSourceRange(); 9162 } 9163 9164 void ComplainOfInvalidConversion() const { 9165 S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_not_func_ptrref) 9166 << OvlExpr->getName() << TargetType; 9167 } 9168 9169 void ComplainMultipleMatchesFound() const { 9170 assert(Matches.size() > 1); 9171 S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_ambiguous) 9172 << OvlExpr->getName() 9173 << OvlExpr->getSourceRange(); 9174 S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType); 9175 } 9176 9177 bool hadMultipleCandidates() const { return (OvlExpr->getNumDecls() > 1); } 9178 9179 int getNumMatches() const { return Matches.size(); } 9180 9181 FunctionDecl* getMatchingFunctionDecl() const { 9182 if (Matches.size() != 1) return 0; 9183 return Matches[0].second; 9184 } 9185 9186 const DeclAccessPair* getMatchingFunctionAccessPair() const { 9187 if (Matches.size() != 1) return 0; 9188 return &Matches[0].first; 9189 } 9190}; 9191 9192/// ResolveAddressOfOverloadedFunction - Try to resolve the address of 9193/// an overloaded function (C++ [over.over]), where @p From is an 9194/// expression with overloaded function type and @p ToType is the type 9195/// we're trying to resolve to. For example: 9196/// 9197/// @code 9198/// int f(double); 9199/// int f(int); 9200/// 9201/// int (*pfd)(double) = f; // selects f(double) 9202/// @endcode 9203/// 9204/// This routine returns the resulting FunctionDecl if it could be 9205/// resolved, and NULL otherwise. When @p Complain is true, this 9206/// routine will emit diagnostics if there is an error. 9207FunctionDecl * 9208Sema::ResolveAddressOfOverloadedFunction(Expr *AddressOfExpr, 9209 QualType TargetType, 9210 bool Complain, 9211 DeclAccessPair &FoundResult, 9212 bool *pHadMultipleCandidates) { 9213 assert(AddressOfExpr->getType() == Context.OverloadTy); 9214 9215 AddressOfFunctionResolver Resolver(*this, AddressOfExpr, TargetType, 9216 Complain); 9217 int NumMatches = Resolver.getNumMatches(); 9218 FunctionDecl* Fn = 0; 9219 if (NumMatches == 0 && Complain) { 9220 if (Resolver.IsInvalidFormOfPointerToMemberFunction()) 9221 Resolver.ComplainIsInvalidFormOfPointerToMemberFunction(); 9222 else 9223 Resolver.ComplainNoMatchesFound(); 9224 } 9225 else if (NumMatches > 1 && Complain) 9226 Resolver.ComplainMultipleMatchesFound(); 9227 else if (NumMatches == 1) { 9228 Fn = Resolver.getMatchingFunctionDecl(); 9229 assert(Fn); 9230 FoundResult = *Resolver.getMatchingFunctionAccessPair(); 9231 MarkFunctionReferenced(AddressOfExpr->getLocStart(), Fn); 9232 if (Complain) 9233 CheckAddressOfMemberAccess(AddressOfExpr, FoundResult); 9234 } 9235 9236 if (pHadMultipleCandidates) 9237 *pHadMultipleCandidates = Resolver.hadMultipleCandidates(); 9238 return Fn; 9239} 9240 9241/// \brief Given an expression that refers to an overloaded function, try to 9242/// resolve that overloaded function expression down to a single function. 9243/// 9244/// This routine can only resolve template-ids that refer to a single function 9245/// template, where that template-id refers to a single template whose template 9246/// arguments are either provided by the template-id or have defaults, 9247/// as described in C++0x [temp.arg.explicit]p3. 9248FunctionDecl * 9249Sema::ResolveSingleFunctionTemplateSpecialization(OverloadExpr *ovl, 9250 bool Complain, 9251 DeclAccessPair *FoundResult) { 9252 // C++ [over.over]p1: 9253 // [...] [Note: any redundant set of parentheses surrounding the 9254 // overloaded function name is ignored (5.1). ] 9255 // C++ [over.over]p1: 9256 // [...] The overloaded function name can be preceded by the & 9257 // operator. 9258 9259 // If we didn't actually find any template-ids, we're done. 9260 if (!ovl->hasExplicitTemplateArgs()) 9261 return 0; 9262 9263 TemplateArgumentListInfo ExplicitTemplateArgs; 9264 ovl->getExplicitTemplateArgs().copyInto(ExplicitTemplateArgs); 9265 9266 // Look through all of the overloaded functions, searching for one 9267 // whose type matches exactly. 9268 FunctionDecl *Matched = 0; 9269 for (UnresolvedSetIterator I = ovl->decls_begin(), 9270 E = ovl->decls_end(); I != E; ++I) { 9271 // C++0x [temp.arg.explicit]p3: 9272 // [...] In contexts where deduction is done and fails, or in contexts 9273 // where deduction is not done, if a template argument list is 9274 // specified and it, along with any default template arguments, 9275 // identifies a single function template specialization, then the 9276 // template-id is an lvalue for the function template specialization. 9277 FunctionTemplateDecl *FunctionTemplate 9278 = cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl()); 9279 9280 // C++ [over.over]p2: 9281 // If the name is a function template, template argument deduction is 9282 // done (14.8.2.2), and if the argument deduction succeeds, the 9283 // resulting template argument list is used to generate a single 9284 // function template specialization, which is added to the set of 9285 // overloaded functions considered. 9286 FunctionDecl *Specialization = 0; 9287 TemplateDeductionInfo Info(ovl->getNameLoc()); 9288 if (TemplateDeductionResult Result 9289 = DeduceTemplateArguments(FunctionTemplate, &ExplicitTemplateArgs, 9290 Specialization, Info)) { 9291 // FIXME: make a note of the failed deduction for diagnostics. 9292 (void)Result; 9293 continue; 9294 } 9295 9296 assert(Specialization && "no specialization and no error?"); 9297 9298 // Multiple matches; we can't resolve to a single declaration. 9299 if (Matched) { 9300 if (Complain) { 9301 Diag(ovl->getExprLoc(), diag::err_addr_ovl_ambiguous) 9302 << ovl->getName(); 9303 NoteAllOverloadCandidates(ovl); 9304 } 9305 return 0; 9306 } 9307 9308 Matched = Specialization; 9309 if (FoundResult) *FoundResult = I.getPair(); 9310 } 9311 9312 return Matched; 9313} 9314 9315 9316 9317 9318// Resolve and fix an overloaded expression that can be resolved 9319// because it identifies a single function template specialization. 9320// 9321// Last three arguments should only be supplied if Complain = true 9322// 9323// Return true if it was logically possible to so resolve the 9324// expression, regardless of whether or not it succeeded. Always 9325// returns true if 'complain' is set. 9326bool Sema::ResolveAndFixSingleFunctionTemplateSpecialization( 9327 ExprResult &SrcExpr, bool doFunctionPointerConverion, 9328 bool complain, const SourceRange& OpRangeForComplaining, 9329 QualType DestTypeForComplaining, 9330 unsigned DiagIDForComplaining) { 9331 assert(SrcExpr.get()->getType() == Context.OverloadTy); 9332 9333 OverloadExpr::FindResult ovl = OverloadExpr::find(SrcExpr.get()); 9334 9335 DeclAccessPair found; 9336 ExprResult SingleFunctionExpression; 9337 if (FunctionDecl *fn = ResolveSingleFunctionTemplateSpecialization( 9338 ovl.Expression, /*complain*/ false, &found)) { 9339 if (DiagnoseUseOfDecl(fn, SrcExpr.get()->getLocStart())) { 9340 SrcExpr = ExprError(); 9341 return true; 9342 } 9343 9344 // It is only correct to resolve to an instance method if we're 9345 // resolving a form that's permitted to be a pointer to member. 9346 // Otherwise we'll end up making a bound member expression, which 9347 // is illegal in all the contexts we resolve like this. 9348 if (!ovl.HasFormOfMemberPointer && 9349 isa<CXXMethodDecl>(fn) && 9350 cast<CXXMethodDecl>(fn)->isInstance()) { 9351 if (!complain) return false; 9352 9353 Diag(ovl.Expression->getExprLoc(), 9354 diag::err_bound_member_function) 9355 << 0 << ovl.Expression->getSourceRange(); 9356 9357 // TODO: I believe we only end up here if there's a mix of 9358 // static and non-static candidates (otherwise the expression 9359 // would have 'bound member' type, not 'overload' type). 9360 // Ideally we would note which candidate was chosen and why 9361 // the static candidates were rejected. 9362 SrcExpr = ExprError(); 9363 return true; 9364 } 9365 9366 // Fix the expression to refer to 'fn'. 9367 SingleFunctionExpression = 9368 Owned(FixOverloadedFunctionReference(SrcExpr.take(), found, fn)); 9369 9370 // If desired, do function-to-pointer decay. 9371 if (doFunctionPointerConverion) { 9372 SingleFunctionExpression = 9373 DefaultFunctionArrayLvalueConversion(SingleFunctionExpression.take()); 9374 if (SingleFunctionExpression.isInvalid()) { 9375 SrcExpr = ExprError(); 9376 return true; 9377 } 9378 } 9379 } 9380 9381 if (!SingleFunctionExpression.isUsable()) { 9382 if (complain) { 9383 Diag(OpRangeForComplaining.getBegin(), DiagIDForComplaining) 9384 << ovl.Expression->getName() 9385 << DestTypeForComplaining 9386 << OpRangeForComplaining 9387 << ovl.Expression->getQualifierLoc().getSourceRange(); 9388 NoteAllOverloadCandidates(SrcExpr.get()); 9389 9390 SrcExpr = ExprError(); 9391 return true; 9392 } 9393 9394 return false; 9395 } 9396 9397 SrcExpr = SingleFunctionExpression; 9398 return true; 9399} 9400 9401/// \brief Add a single candidate to the overload set. 9402static void AddOverloadedCallCandidate(Sema &S, 9403 DeclAccessPair FoundDecl, 9404 TemplateArgumentListInfo *ExplicitTemplateArgs, 9405 llvm::ArrayRef<Expr *> Args, 9406 OverloadCandidateSet &CandidateSet, 9407 bool PartialOverloading, 9408 bool KnownValid) { 9409 NamedDecl *Callee = FoundDecl.getDecl(); 9410 if (isa<UsingShadowDecl>(Callee)) 9411 Callee = cast<UsingShadowDecl>(Callee)->getTargetDecl(); 9412 9413 if (FunctionDecl *Func = dyn_cast<FunctionDecl>(Callee)) { 9414 if (ExplicitTemplateArgs) { 9415 assert(!KnownValid && "Explicit template arguments?"); 9416 return; 9417 } 9418 S.AddOverloadCandidate(Func, FoundDecl, Args, CandidateSet, false, 9419 PartialOverloading); 9420 return; 9421 } 9422 9423 if (FunctionTemplateDecl *FuncTemplate 9424 = dyn_cast<FunctionTemplateDecl>(Callee)) { 9425 S.AddTemplateOverloadCandidate(FuncTemplate, FoundDecl, 9426 ExplicitTemplateArgs, Args, CandidateSet); 9427 return; 9428 } 9429 9430 assert(!KnownValid && "unhandled case in overloaded call candidate"); 9431} 9432 9433/// \brief Add the overload candidates named by callee and/or found by argument 9434/// dependent lookup to the given overload set. 9435void Sema::AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE, 9436 llvm::ArrayRef<Expr *> Args, 9437 OverloadCandidateSet &CandidateSet, 9438 bool PartialOverloading) { 9439 9440#ifndef NDEBUG 9441 // Verify that ArgumentDependentLookup is consistent with the rules 9442 // in C++0x [basic.lookup.argdep]p3: 9443 // 9444 // Let X be the lookup set produced by unqualified lookup (3.4.1) 9445 // and let Y be the lookup set produced by argument dependent 9446 // lookup (defined as follows). If X contains 9447 // 9448 // -- a declaration of a class member, or 9449 // 9450 // -- a block-scope function declaration that is not a 9451 // using-declaration, or 9452 // 9453 // -- a declaration that is neither a function or a function 9454 // template 9455 // 9456 // then Y is empty. 9457 9458 if (ULE->requiresADL()) { 9459 for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(), 9460 E = ULE->decls_end(); I != E; ++I) { 9461 assert(!(*I)->getDeclContext()->isRecord()); 9462 assert(isa<UsingShadowDecl>(*I) || 9463 !(*I)->getDeclContext()->isFunctionOrMethod()); 9464 assert((*I)->getUnderlyingDecl()->isFunctionOrFunctionTemplate()); 9465 } 9466 } 9467#endif 9468 9469 // It would be nice to avoid this copy. 9470 TemplateArgumentListInfo TABuffer; 9471 TemplateArgumentListInfo *ExplicitTemplateArgs = 0; 9472 if (ULE->hasExplicitTemplateArgs()) { 9473 ULE->copyTemplateArgumentsInto(TABuffer); 9474 ExplicitTemplateArgs = &TABuffer; 9475 } 9476 9477 for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(), 9478 E = ULE->decls_end(); I != E; ++I) 9479 AddOverloadedCallCandidate(*this, I.getPair(), ExplicitTemplateArgs, Args, 9480 CandidateSet, PartialOverloading, 9481 /*KnownValid*/ true); 9482 9483 if (ULE->requiresADL()) 9484 AddArgumentDependentLookupCandidates(ULE->getName(), /*Operator*/ false, 9485 ULE->getExprLoc(), 9486 Args, ExplicitTemplateArgs, 9487 CandidateSet, PartialOverloading, 9488 ULE->isStdAssociatedNamespace()); 9489} 9490 9491/// Attempt to recover from an ill-formed use of a non-dependent name in a 9492/// template, where the non-dependent name was declared after the template 9493/// was defined. This is common in code written for a compilers which do not 9494/// correctly implement two-stage name lookup. 9495/// 9496/// Returns true if a viable candidate was found and a diagnostic was issued. 9497static bool 9498DiagnoseTwoPhaseLookup(Sema &SemaRef, SourceLocation FnLoc, 9499 const CXXScopeSpec &SS, LookupResult &R, 9500 TemplateArgumentListInfo *ExplicitTemplateArgs, 9501 llvm::ArrayRef<Expr *> Args) { 9502 if (SemaRef.ActiveTemplateInstantiations.empty() || !SS.isEmpty()) 9503 return false; 9504 9505 for (DeclContext *DC = SemaRef.CurContext; DC; DC = DC->getParent()) { 9506 if (DC->isTransparentContext()) 9507 continue; 9508 9509 SemaRef.LookupQualifiedName(R, DC); 9510 9511 if (!R.empty()) { 9512 R.suppressDiagnostics(); 9513 9514 if (isa<CXXRecordDecl>(DC)) { 9515 // Don't diagnose names we find in classes; we get much better 9516 // diagnostics for these from DiagnoseEmptyLookup. 9517 R.clear(); 9518 return false; 9519 } 9520 9521 OverloadCandidateSet Candidates(FnLoc); 9522 for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I) 9523 AddOverloadedCallCandidate(SemaRef, I.getPair(), 9524 ExplicitTemplateArgs, Args, 9525 Candidates, false, /*KnownValid*/ false); 9526 9527 OverloadCandidateSet::iterator Best; 9528 if (Candidates.BestViableFunction(SemaRef, FnLoc, Best) != OR_Success) { 9529 // No viable functions. Don't bother the user with notes for functions 9530 // which don't work and shouldn't be found anyway. 9531 R.clear(); 9532 return false; 9533 } 9534 9535 // Find the namespaces where ADL would have looked, and suggest 9536 // declaring the function there instead. 9537 Sema::AssociatedNamespaceSet AssociatedNamespaces; 9538 Sema::AssociatedClassSet AssociatedClasses; 9539 SemaRef.FindAssociatedClassesAndNamespaces(FnLoc, Args, 9540 AssociatedNamespaces, 9541 AssociatedClasses); 9542 // Never suggest declaring a function within namespace 'std'. 9543 Sema::AssociatedNamespaceSet SuggestedNamespaces; 9544 if (DeclContext *Std = SemaRef.getStdNamespace()) { 9545 for (Sema::AssociatedNamespaceSet::iterator 9546 it = AssociatedNamespaces.begin(), 9547 end = AssociatedNamespaces.end(); it != end; ++it) { 9548 if (!Std->Encloses(*it)) 9549 SuggestedNamespaces.insert(*it); 9550 } 9551 } else { 9552 // Lacking the 'std::' namespace, use all of the associated namespaces. 9553 SuggestedNamespaces = AssociatedNamespaces; 9554 } 9555 9556 SemaRef.Diag(R.getNameLoc(), diag::err_not_found_by_two_phase_lookup) 9557 << R.getLookupName(); 9558 if (SuggestedNamespaces.empty()) { 9559 SemaRef.Diag(Best->Function->getLocation(), 9560 diag::note_not_found_by_two_phase_lookup) 9561 << R.getLookupName() << 0; 9562 } else if (SuggestedNamespaces.size() == 1) { 9563 SemaRef.Diag(Best->Function->getLocation(), 9564 diag::note_not_found_by_two_phase_lookup) 9565 << R.getLookupName() << 1 << *SuggestedNamespaces.begin(); 9566 } else { 9567 // FIXME: It would be useful to list the associated namespaces here, 9568 // but the diagnostics infrastructure doesn't provide a way to produce 9569 // a localized representation of a list of items. 9570 SemaRef.Diag(Best->Function->getLocation(), 9571 diag::note_not_found_by_two_phase_lookup) 9572 << R.getLookupName() << 2; 9573 } 9574 9575 // Try to recover by calling this function. 9576 return true; 9577 } 9578 9579 R.clear(); 9580 } 9581 9582 return false; 9583} 9584 9585/// Attempt to recover from ill-formed use of a non-dependent operator in a 9586/// template, where the non-dependent operator was declared after the template 9587/// was defined. 9588/// 9589/// Returns true if a viable candidate was found and a diagnostic was issued. 9590static bool 9591DiagnoseTwoPhaseOperatorLookup(Sema &SemaRef, OverloadedOperatorKind Op, 9592 SourceLocation OpLoc, 9593 llvm::ArrayRef<Expr *> Args) { 9594 DeclarationName OpName = 9595 SemaRef.Context.DeclarationNames.getCXXOperatorName(Op); 9596 LookupResult R(SemaRef, OpName, OpLoc, Sema::LookupOperatorName); 9597 return DiagnoseTwoPhaseLookup(SemaRef, OpLoc, CXXScopeSpec(), R, 9598 /*ExplicitTemplateArgs=*/0, Args); 9599} 9600 9601namespace { 9602// Callback to limit the allowed keywords and to only accept typo corrections 9603// that are keywords or whose decls refer to functions (or template functions) 9604// that accept the given number of arguments. 9605class RecoveryCallCCC : public CorrectionCandidateCallback { 9606 public: 9607 RecoveryCallCCC(Sema &SemaRef, unsigned NumArgs, bool HasExplicitTemplateArgs) 9608 : NumArgs(NumArgs), HasExplicitTemplateArgs(HasExplicitTemplateArgs) { 9609 WantTypeSpecifiers = SemaRef.getLangOpts().CPlusPlus; 9610 WantRemainingKeywords = false; 9611 } 9612 9613 virtual bool ValidateCandidate(const TypoCorrection &candidate) { 9614 if (!candidate.getCorrectionDecl()) 9615 return candidate.isKeyword(); 9616 9617 for (TypoCorrection::const_decl_iterator DI = candidate.begin(), 9618 DIEnd = candidate.end(); DI != DIEnd; ++DI) { 9619 FunctionDecl *FD = 0; 9620 NamedDecl *ND = (*DI)->getUnderlyingDecl(); 9621 if (FunctionTemplateDecl *FTD = dyn_cast<FunctionTemplateDecl>(ND)) 9622 FD = FTD->getTemplatedDecl(); 9623 if (!HasExplicitTemplateArgs && !FD) { 9624 if (!(FD = dyn_cast<FunctionDecl>(ND)) && isa<ValueDecl>(ND)) { 9625 // If the Decl is neither a function nor a template function, 9626 // determine if it is a pointer or reference to a function. If so, 9627 // check against the number of arguments expected for the pointee. 9628 QualType ValType = cast<ValueDecl>(ND)->getType(); 9629 if (ValType->isAnyPointerType() || ValType->isReferenceType()) 9630 ValType = ValType->getPointeeType(); 9631 if (const FunctionProtoType *FPT = ValType->getAs<FunctionProtoType>()) 9632 if (FPT->getNumArgs() == NumArgs) 9633 return true; 9634 } 9635 } 9636 if (FD && FD->getNumParams() >= NumArgs && 9637 FD->getMinRequiredArguments() <= NumArgs) 9638 return true; 9639 } 9640 return false; 9641 } 9642 9643 private: 9644 unsigned NumArgs; 9645 bool HasExplicitTemplateArgs; 9646}; 9647 9648// Callback that effectively disabled typo correction 9649class NoTypoCorrectionCCC : public CorrectionCandidateCallback { 9650 public: 9651 NoTypoCorrectionCCC() { 9652 WantTypeSpecifiers = false; 9653 WantExpressionKeywords = false; 9654 WantCXXNamedCasts = false; 9655 WantRemainingKeywords = false; 9656 } 9657 9658 virtual bool ValidateCandidate(const TypoCorrection &candidate) { 9659 return false; 9660 } 9661}; 9662 9663class BuildRecoveryCallExprRAII { 9664 Sema &SemaRef; 9665public: 9666 BuildRecoveryCallExprRAII(Sema &S) : SemaRef(S) { 9667 assert(SemaRef.IsBuildingRecoveryCallExpr == false); 9668 SemaRef.IsBuildingRecoveryCallExpr = true; 9669 } 9670 9671 ~BuildRecoveryCallExprRAII() { 9672 SemaRef.IsBuildingRecoveryCallExpr = false; 9673 } 9674}; 9675 9676} 9677 9678/// Attempts to recover from a call where no functions were found. 9679/// 9680/// Returns true if new candidates were found. 9681static ExprResult 9682BuildRecoveryCallExpr(Sema &SemaRef, Scope *S, Expr *Fn, 9683 UnresolvedLookupExpr *ULE, 9684 SourceLocation LParenLoc, 9685 llvm::MutableArrayRef<Expr *> Args, 9686 SourceLocation RParenLoc, 9687 bool EmptyLookup, bool AllowTypoCorrection) { 9688 // Do not try to recover if it is already building a recovery call. 9689 // This stops infinite loops for template instantiations like 9690 // 9691 // template <typename T> auto foo(T t) -> decltype(foo(t)) {} 9692 // template <typename T> auto foo(T t) -> decltype(foo(&t)) {} 9693 // 9694 if (SemaRef.IsBuildingRecoveryCallExpr) 9695 return ExprError(); 9696 BuildRecoveryCallExprRAII RCE(SemaRef); 9697 9698 CXXScopeSpec SS; 9699 SS.Adopt(ULE->getQualifierLoc()); 9700 SourceLocation TemplateKWLoc = ULE->getTemplateKeywordLoc(); 9701 9702 TemplateArgumentListInfo TABuffer; 9703 TemplateArgumentListInfo *ExplicitTemplateArgs = 0; 9704 if (ULE->hasExplicitTemplateArgs()) { 9705 ULE->copyTemplateArgumentsInto(TABuffer); 9706 ExplicitTemplateArgs = &TABuffer; 9707 } 9708 9709 LookupResult R(SemaRef, ULE->getName(), ULE->getNameLoc(), 9710 Sema::LookupOrdinaryName); 9711 RecoveryCallCCC Validator(SemaRef, Args.size(), ExplicitTemplateArgs != 0); 9712 NoTypoCorrectionCCC RejectAll; 9713 CorrectionCandidateCallback *CCC = AllowTypoCorrection ? 9714 (CorrectionCandidateCallback*)&Validator : 9715 (CorrectionCandidateCallback*)&RejectAll; 9716 if (!DiagnoseTwoPhaseLookup(SemaRef, Fn->getExprLoc(), SS, R, 9717 ExplicitTemplateArgs, Args) && 9718 (!EmptyLookup || 9719 SemaRef.DiagnoseEmptyLookup(S, SS, R, *CCC, 9720 ExplicitTemplateArgs, Args))) 9721 return ExprError(); 9722 9723 assert(!R.empty() && "lookup results empty despite recovery"); 9724 9725 // Build an implicit member call if appropriate. Just drop the 9726 // casts and such from the call, we don't really care. 9727 ExprResult NewFn = ExprError(); 9728 if ((*R.begin())->isCXXClassMember()) 9729 NewFn = SemaRef.BuildPossibleImplicitMemberExpr(SS, TemplateKWLoc, 9730 R, ExplicitTemplateArgs); 9731 else if (ExplicitTemplateArgs || TemplateKWLoc.isValid()) 9732 NewFn = SemaRef.BuildTemplateIdExpr(SS, TemplateKWLoc, R, false, 9733 ExplicitTemplateArgs); 9734 else 9735 NewFn = SemaRef.BuildDeclarationNameExpr(SS, R, false); 9736 9737 if (NewFn.isInvalid()) 9738 return ExprError(); 9739 9740 // This shouldn't cause an infinite loop because we're giving it 9741 // an expression with viable lookup results, which should never 9742 // end up here. 9743 return SemaRef.ActOnCallExpr(/*Scope*/ 0, NewFn.take(), LParenLoc, 9744 MultiExprArg(Args.data(), Args.size()), 9745 RParenLoc); 9746} 9747 9748/// \brief Constructs and populates an OverloadedCandidateSet from 9749/// the given function. 9750/// \returns true when an the ExprResult output parameter has been set. 9751bool Sema::buildOverloadedCallSet(Scope *S, Expr *Fn, 9752 UnresolvedLookupExpr *ULE, 9753 Expr **Args, unsigned NumArgs, 9754 SourceLocation RParenLoc, 9755 OverloadCandidateSet *CandidateSet, 9756 ExprResult *Result) { 9757#ifndef NDEBUG 9758 if (ULE->requiresADL()) { 9759 // To do ADL, we must have found an unqualified name. 9760 assert(!ULE->getQualifier() && "qualified name with ADL"); 9761 9762 // We don't perform ADL for implicit declarations of builtins. 9763 // Verify that this was correctly set up. 9764 FunctionDecl *F; 9765 if (ULE->decls_begin() + 1 == ULE->decls_end() && 9766 (F = dyn_cast<FunctionDecl>(*ULE->decls_begin())) && 9767 F->getBuiltinID() && F->isImplicit()) 9768 llvm_unreachable("performing ADL for builtin"); 9769 9770 // We don't perform ADL in C. 9771 assert(getLangOpts().CPlusPlus && "ADL enabled in C"); 9772 } else 9773 assert(!ULE->isStdAssociatedNamespace() && 9774 "std is associated namespace but not doing ADL"); 9775#endif 9776 9777 UnbridgedCastsSet UnbridgedCasts; 9778 if (checkArgPlaceholdersForOverload(*this, Args, NumArgs, UnbridgedCasts)) { 9779 *Result = ExprError(); 9780 return true; 9781 } 9782 9783 // Add the functions denoted by the callee to the set of candidate 9784 // functions, including those from argument-dependent lookup. 9785 AddOverloadedCallCandidates(ULE, llvm::makeArrayRef(Args, NumArgs), 9786 *CandidateSet); 9787 9788 // If we found nothing, try to recover. 9789 // BuildRecoveryCallExpr diagnoses the error itself, so we just bail 9790 // out if it fails. 9791 if (CandidateSet->empty()) { 9792 // In Microsoft mode, if we are inside a template class member function then 9793 // create a type dependent CallExpr. The goal is to postpone name lookup 9794 // to instantiation time to be able to search into type dependent base 9795 // classes. 9796 if (getLangOpts().MicrosoftMode && CurContext->isDependentContext() && 9797 (isa<FunctionDecl>(CurContext) || isa<CXXRecordDecl>(CurContext))) { 9798 CallExpr *CE = new (Context) CallExpr(Context, Fn, 9799 llvm::makeArrayRef(Args, NumArgs), 9800 Context.DependentTy, VK_RValue, 9801 RParenLoc); 9802 CE->setTypeDependent(true); 9803 *Result = Owned(CE); 9804 return true; 9805 } 9806 return false; 9807 } 9808 9809 UnbridgedCasts.restore(); 9810 return false; 9811} 9812 9813/// FinishOverloadedCallExpr - given an OverloadCandidateSet, builds and returns 9814/// the completed call expression. If overload resolution fails, emits 9815/// diagnostics and returns ExprError() 9816static ExprResult FinishOverloadedCallExpr(Sema &SemaRef, Scope *S, Expr *Fn, 9817 UnresolvedLookupExpr *ULE, 9818 SourceLocation LParenLoc, 9819 Expr **Args, unsigned NumArgs, 9820 SourceLocation RParenLoc, 9821 Expr *ExecConfig, 9822 OverloadCandidateSet *CandidateSet, 9823 OverloadCandidateSet::iterator *Best, 9824 OverloadingResult OverloadResult, 9825 bool AllowTypoCorrection) { 9826 if (CandidateSet->empty()) 9827 return BuildRecoveryCallExpr(SemaRef, S, Fn, ULE, LParenLoc, 9828 llvm::MutableArrayRef<Expr *>(Args, NumArgs), 9829 RParenLoc, /*EmptyLookup=*/true, 9830 AllowTypoCorrection); 9831 9832 switch (OverloadResult) { 9833 case OR_Success: { 9834 FunctionDecl *FDecl = (*Best)->Function; 9835 SemaRef.MarkFunctionReferenced(Fn->getExprLoc(), FDecl); 9836 SemaRef.CheckUnresolvedLookupAccess(ULE, (*Best)->FoundDecl); 9837 SemaRef.DiagnoseUseOfDecl(FDecl, ULE->getNameLoc()); 9838 Fn = SemaRef.FixOverloadedFunctionReference(Fn, (*Best)->FoundDecl, FDecl); 9839 return SemaRef.BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, NumArgs, 9840 RParenLoc, ExecConfig); 9841 } 9842 9843 case OR_No_Viable_Function: { 9844 // Try to recover by looking for viable functions which the user might 9845 // have meant to call. 9846 ExprResult Recovery = BuildRecoveryCallExpr(SemaRef, S, Fn, ULE, LParenLoc, 9847 llvm::MutableArrayRef<Expr *>(Args, NumArgs), 9848 RParenLoc, 9849 /*EmptyLookup=*/false, 9850 AllowTypoCorrection); 9851 if (!Recovery.isInvalid()) 9852 return Recovery; 9853 9854 SemaRef.Diag(Fn->getLocStart(), 9855 diag::err_ovl_no_viable_function_in_call) 9856 << ULE->getName() << Fn->getSourceRange(); 9857 CandidateSet->NoteCandidates(SemaRef, OCD_AllCandidates, 9858 llvm::makeArrayRef(Args, NumArgs)); 9859 break; 9860 } 9861 9862 case OR_Ambiguous: 9863 SemaRef.Diag(Fn->getLocStart(), diag::err_ovl_ambiguous_call) 9864 << ULE->getName() << Fn->getSourceRange(); 9865 CandidateSet->NoteCandidates(SemaRef, OCD_ViableCandidates, 9866 llvm::makeArrayRef(Args, NumArgs)); 9867 break; 9868 9869 case OR_Deleted: { 9870 SemaRef.Diag(Fn->getLocStart(), diag::err_ovl_deleted_call) 9871 << (*Best)->Function->isDeleted() 9872 << ULE->getName() 9873 << SemaRef.getDeletedOrUnavailableSuffix((*Best)->Function) 9874 << Fn->getSourceRange(); 9875 CandidateSet->NoteCandidates(SemaRef, OCD_AllCandidates, 9876 llvm::makeArrayRef(Args, NumArgs)); 9877 9878 // We emitted an error for the unvailable/deleted function call but keep 9879 // the call in the AST. 9880 FunctionDecl *FDecl = (*Best)->Function; 9881 Fn = SemaRef.FixOverloadedFunctionReference(Fn, (*Best)->FoundDecl, FDecl); 9882 return SemaRef.BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, NumArgs, 9883 RParenLoc, ExecConfig); 9884 } 9885 } 9886 9887 // Overload resolution failed. 9888 return ExprError(); 9889} 9890 9891/// BuildOverloadedCallExpr - Given the call expression that calls Fn 9892/// (which eventually refers to the declaration Func) and the call 9893/// arguments Args/NumArgs, attempt to resolve the function call down 9894/// to a specific function. If overload resolution succeeds, returns 9895/// the call expression produced by overload resolution. 9896/// Otherwise, emits diagnostics and returns ExprError. 9897ExprResult Sema::BuildOverloadedCallExpr(Scope *S, Expr *Fn, 9898 UnresolvedLookupExpr *ULE, 9899 SourceLocation LParenLoc, 9900 Expr **Args, unsigned NumArgs, 9901 SourceLocation RParenLoc, 9902 Expr *ExecConfig, 9903 bool AllowTypoCorrection) { 9904 OverloadCandidateSet CandidateSet(Fn->getExprLoc()); 9905 ExprResult result; 9906 9907 if (buildOverloadedCallSet(S, Fn, ULE, Args, NumArgs, LParenLoc, 9908 &CandidateSet, &result)) 9909 return result; 9910 9911 OverloadCandidateSet::iterator Best; 9912 OverloadingResult OverloadResult = 9913 CandidateSet.BestViableFunction(*this, Fn->getLocStart(), Best); 9914 9915 return FinishOverloadedCallExpr(*this, S, Fn, ULE, LParenLoc, Args, NumArgs, 9916 RParenLoc, ExecConfig, &CandidateSet, 9917 &Best, OverloadResult, 9918 AllowTypoCorrection); 9919} 9920 9921static bool IsOverloaded(const UnresolvedSetImpl &Functions) { 9922 return Functions.size() > 1 || 9923 (Functions.size() == 1 && isa<FunctionTemplateDecl>(*Functions.begin())); 9924} 9925 9926/// \brief Create a unary operation that may resolve to an overloaded 9927/// operator. 9928/// 9929/// \param OpLoc The location of the operator itself (e.g., '*'). 9930/// 9931/// \param OpcIn The UnaryOperator::Opcode that describes this 9932/// operator. 9933/// 9934/// \param Fns The set of non-member functions that will be 9935/// considered by overload resolution. The caller needs to build this 9936/// set based on the context using, e.g., 9937/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This 9938/// set should not contain any member functions; those will be added 9939/// by CreateOverloadedUnaryOp(). 9940/// 9941/// \param Input The input argument. 9942ExprResult 9943Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, unsigned OpcIn, 9944 const UnresolvedSetImpl &Fns, 9945 Expr *Input) { 9946 UnaryOperator::Opcode Opc = static_cast<UnaryOperator::Opcode>(OpcIn); 9947 9948 OverloadedOperatorKind Op = UnaryOperator::getOverloadedOperator(Opc); 9949 assert(Op != OO_None && "Invalid opcode for overloaded unary operator"); 9950 DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op); 9951 // TODO: provide better source location info. 9952 DeclarationNameInfo OpNameInfo(OpName, OpLoc); 9953 9954 if (checkPlaceholderForOverload(*this, Input)) 9955 return ExprError(); 9956 9957 Expr *Args[2] = { Input, 0 }; 9958 unsigned NumArgs = 1; 9959 9960 // For post-increment and post-decrement, add the implicit '0' as 9961 // the second argument, so that we know this is a post-increment or 9962 // post-decrement. 9963 if (Opc == UO_PostInc || Opc == UO_PostDec) { 9964 llvm::APSInt Zero(Context.getTypeSize(Context.IntTy), false); 9965 Args[1] = IntegerLiteral::Create(Context, Zero, Context.IntTy, 9966 SourceLocation()); 9967 NumArgs = 2; 9968 } 9969 9970 if (Input->isTypeDependent()) { 9971 if (Fns.empty()) 9972 return Owned(new (Context) UnaryOperator(Input, 9973 Opc, 9974 Context.DependentTy, 9975 VK_RValue, OK_Ordinary, 9976 OpLoc)); 9977 9978 CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators 9979 UnresolvedLookupExpr *Fn 9980 = UnresolvedLookupExpr::Create(Context, NamingClass, 9981 NestedNameSpecifierLoc(), OpNameInfo, 9982 /*ADL*/ true, IsOverloaded(Fns), 9983 Fns.begin(), Fns.end()); 9984 return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn, 9985 llvm::makeArrayRef(Args, NumArgs), 9986 Context.DependentTy, 9987 VK_RValue, 9988 OpLoc, false)); 9989 } 9990 9991 // Build an empty overload set. 9992 OverloadCandidateSet CandidateSet(OpLoc); 9993 9994 // Add the candidates from the given function set. 9995 AddFunctionCandidates(Fns, llvm::makeArrayRef(Args, NumArgs), CandidateSet, 9996 false); 9997 9998 // Add operator candidates that are member functions. 9999 AddMemberOperatorCandidates(Op, OpLoc, &Args[0], NumArgs, CandidateSet); 10000 10001 // Add candidates from ADL. 10002 AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true, 10003 OpLoc, llvm::makeArrayRef(Args, NumArgs), 10004 /*ExplicitTemplateArgs*/ 0, 10005 CandidateSet); 10006 10007 // Add builtin operator candidates. 10008 AddBuiltinOperatorCandidates(Op, OpLoc, &Args[0], NumArgs, CandidateSet); 10009 10010 bool HadMultipleCandidates = (CandidateSet.size() > 1); 10011 10012 // Perform overload resolution. 10013 OverloadCandidateSet::iterator Best; 10014 switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) { 10015 case OR_Success: { 10016 // We found a built-in operator or an overloaded operator. 10017 FunctionDecl *FnDecl = Best->Function; 10018 10019 if (FnDecl) { 10020 // We matched an overloaded operator. Build a call to that 10021 // operator. 10022 10023 MarkFunctionReferenced(OpLoc, FnDecl); 10024 10025 // Convert the arguments. 10026 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) { 10027 CheckMemberOperatorAccess(OpLoc, Args[0], 0, Best->FoundDecl); 10028 10029 ExprResult InputRes = 10030 PerformObjectArgumentInitialization(Input, /*Qualifier=*/0, 10031 Best->FoundDecl, Method); 10032 if (InputRes.isInvalid()) 10033 return ExprError(); 10034 Input = InputRes.take(); 10035 } else { 10036 // Convert the arguments. 10037 ExprResult InputInit 10038 = PerformCopyInitialization(InitializedEntity::InitializeParameter( 10039 Context, 10040 FnDecl->getParamDecl(0)), 10041 SourceLocation(), 10042 Input); 10043 if (InputInit.isInvalid()) 10044 return ExprError(); 10045 Input = InputInit.take(); 10046 } 10047 10048 DiagnoseUseOfDecl(Best->FoundDecl, OpLoc); 10049 10050 // Determine the result type. 10051 QualType ResultTy = FnDecl->getResultType(); 10052 ExprValueKind VK = Expr::getValueKindForType(ResultTy); 10053 ResultTy = ResultTy.getNonLValueExprType(Context); 10054 10055 // Build the actual expression node. 10056 ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl, 10057 HadMultipleCandidates, OpLoc); 10058 if (FnExpr.isInvalid()) 10059 return ExprError(); 10060 10061 Args[0] = Input; 10062 CallExpr *TheCall = 10063 new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.take(), 10064 llvm::makeArrayRef(Args, NumArgs), 10065 ResultTy, VK, OpLoc, false); 10066 10067 if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall, 10068 FnDecl)) 10069 return ExprError(); 10070 10071 return MaybeBindToTemporary(TheCall); 10072 } else { 10073 // We matched a built-in operator. Convert the arguments, then 10074 // break out so that we will build the appropriate built-in 10075 // operator node. 10076 ExprResult InputRes = 10077 PerformImplicitConversion(Input, Best->BuiltinTypes.ParamTypes[0], 10078 Best->Conversions[0], AA_Passing); 10079 if (InputRes.isInvalid()) 10080 return ExprError(); 10081 Input = InputRes.take(); 10082 break; 10083 } 10084 } 10085 10086 case OR_No_Viable_Function: 10087 // This is an erroneous use of an operator which can be overloaded by 10088 // a non-member function. Check for non-member operators which were 10089 // defined too late to be candidates. 10090 if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc, 10091 llvm::makeArrayRef(Args, NumArgs))) 10092 // FIXME: Recover by calling the found function. 10093 return ExprError(); 10094 10095 // No viable function; fall through to handling this as a 10096 // built-in operator, which will produce an error message for us. 10097 break; 10098 10099 case OR_Ambiguous: 10100 Diag(OpLoc, diag::err_ovl_ambiguous_oper_unary) 10101 << UnaryOperator::getOpcodeStr(Opc) 10102 << Input->getType() 10103 << Input->getSourceRange(); 10104 CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, 10105 llvm::makeArrayRef(Args, NumArgs), 10106 UnaryOperator::getOpcodeStr(Opc), OpLoc); 10107 return ExprError(); 10108 10109 case OR_Deleted: 10110 Diag(OpLoc, diag::err_ovl_deleted_oper) 10111 << Best->Function->isDeleted() 10112 << UnaryOperator::getOpcodeStr(Opc) 10113 << getDeletedOrUnavailableSuffix(Best->Function) 10114 << Input->getSourceRange(); 10115 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, 10116 llvm::makeArrayRef(Args, NumArgs), 10117 UnaryOperator::getOpcodeStr(Opc), OpLoc); 10118 return ExprError(); 10119 } 10120 10121 // Either we found no viable overloaded operator or we matched a 10122 // built-in operator. In either case, fall through to trying to 10123 // build a built-in operation. 10124 return CreateBuiltinUnaryOp(OpLoc, Opc, Input); 10125} 10126 10127/// \brief Create a binary operation that may resolve to an overloaded 10128/// operator. 10129/// 10130/// \param OpLoc The location of the operator itself (e.g., '+'). 10131/// 10132/// \param OpcIn The BinaryOperator::Opcode that describes this 10133/// operator. 10134/// 10135/// \param Fns The set of non-member functions that will be 10136/// considered by overload resolution. The caller needs to build this 10137/// set based on the context using, e.g., 10138/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This 10139/// set should not contain any member functions; those will be added 10140/// by CreateOverloadedBinOp(). 10141/// 10142/// \param LHS Left-hand argument. 10143/// \param RHS Right-hand argument. 10144ExprResult 10145Sema::CreateOverloadedBinOp(SourceLocation OpLoc, 10146 unsigned OpcIn, 10147 const UnresolvedSetImpl &Fns, 10148 Expr *LHS, Expr *RHS) { 10149 Expr *Args[2] = { LHS, RHS }; 10150 LHS=RHS=0; //Please use only Args instead of LHS/RHS couple 10151 10152 BinaryOperator::Opcode Opc = static_cast<BinaryOperator::Opcode>(OpcIn); 10153 OverloadedOperatorKind Op = BinaryOperator::getOverloadedOperator(Opc); 10154 DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op); 10155 10156 // If either side is type-dependent, create an appropriate dependent 10157 // expression. 10158 if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) { 10159 if (Fns.empty()) { 10160 // If there are no functions to store, just build a dependent 10161 // BinaryOperator or CompoundAssignment. 10162 if (Opc <= BO_Assign || Opc > BO_OrAssign) 10163 return Owned(new (Context) BinaryOperator(Args[0], Args[1], Opc, 10164 Context.DependentTy, 10165 VK_RValue, OK_Ordinary, 10166 OpLoc, 10167 FPFeatures.fp_contract)); 10168 10169 return Owned(new (Context) CompoundAssignOperator(Args[0], Args[1], Opc, 10170 Context.DependentTy, 10171 VK_LValue, 10172 OK_Ordinary, 10173 Context.DependentTy, 10174 Context.DependentTy, 10175 OpLoc, 10176 FPFeatures.fp_contract)); 10177 } 10178 10179 // FIXME: save results of ADL from here? 10180 CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators 10181 // TODO: provide better source location info in DNLoc component. 10182 DeclarationNameInfo OpNameInfo(OpName, OpLoc); 10183 UnresolvedLookupExpr *Fn 10184 = UnresolvedLookupExpr::Create(Context, NamingClass, 10185 NestedNameSpecifierLoc(), OpNameInfo, 10186 /*ADL*/ true, IsOverloaded(Fns), 10187 Fns.begin(), Fns.end()); 10188 return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn, Args, 10189 Context.DependentTy, VK_RValue, 10190 OpLoc, FPFeatures.fp_contract)); 10191 } 10192 10193 // Always do placeholder-like conversions on the RHS. 10194 if (checkPlaceholderForOverload(*this, Args[1])) 10195 return ExprError(); 10196 10197 // Do placeholder-like conversion on the LHS; note that we should 10198 // not get here with a PseudoObject LHS. 10199 assert(Args[0]->getObjectKind() != OK_ObjCProperty); 10200 if (checkPlaceholderForOverload(*this, Args[0])) 10201 return ExprError(); 10202 10203 // If this is the assignment operator, we only perform overload resolution 10204 // if the left-hand side is a class or enumeration type. This is actually 10205 // a hack. The standard requires that we do overload resolution between the 10206 // various built-in candidates, but as DR507 points out, this can lead to 10207 // problems. So we do it this way, which pretty much follows what GCC does. 10208 // Note that we go the traditional code path for compound assignment forms. 10209 if (Opc == BO_Assign && !Args[0]->getType()->isOverloadableType()) 10210 return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]); 10211 10212 // If this is the .* operator, which is not overloadable, just 10213 // create a built-in binary operator. 10214 if (Opc == BO_PtrMemD) 10215 return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]); 10216 10217 // Build an empty overload set. 10218 OverloadCandidateSet CandidateSet(OpLoc); 10219 10220 // Add the candidates from the given function set. 10221 AddFunctionCandidates(Fns, Args, CandidateSet, false); 10222 10223 // Add operator candidates that are member functions. 10224 AddMemberOperatorCandidates(Op, OpLoc, Args, 2, CandidateSet); 10225 10226 // Add candidates from ADL. 10227 AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true, 10228 OpLoc, Args, 10229 /*ExplicitTemplateArgs*/ 0, 10230 CandidateSet); 10231 10232 // Add builtin operator candidates. 10233 AddBuiltinOperatorCandidates(Op, OpLoc, Args, 2, CandidateSet); 10234 10235 bool HadMultipleCandidates = (CandidateSet.size() > 1); 10236 10237 // Perform overload resolution. 10238 OverloadCandidateSet::iterator Best; 10239 switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) { 10240 case OR_Success: { 10241 // We found a built-in operator or an overloaded operator. 10242 FunctionDecl *FnDecl = Best->Function; 10243 10244 if (FnDecl) { 10245 // We matched an overloaded operator. Build a call to that 10246 // operator. 10247 10248 MarkFunctionReferenced(OpLoc, FnDecl); 10249 10250 // Convert the arguments. 10251 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) { 10252 // Best->Access is only meaningful for class members. 10253 CheckMemberOperatorAccess(OpLoc, Args[0], Args[1], Best->FoundDecl); 10254 10255 ExprResult Arg1 = 10256 PerformCopyInitialization( 10257 InitializedEntity::InitializeParameter(Context, 10258 FnDecl->getParamDecl(0)), 10259 SourceLocation(), Owned(Args[1])); 10260 if (Arg1.isInvalid()) 10261 return ExprError(); 10262 10263 ExprResult Arg0 = 10264 PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0, 10265 Best->FoundDecl, Method); 10266 if (Arg0.isInvalid()) 10267 return ExprError(); 10268 Args[0] = Arg0.takeAs<Expr>(); 10269 Args[1] = RHS = Arg1.takeAs<Expr>(); 10270 } else { 10271 // Convert the arguments. 10272 ExprResult Arg0 = PerformCopyInitialization( 10273 InitializedEntity::InitializeParameter(Context, 10274 FnDecl->getParamDecl(0)), 10275 SourceLocation(), Owned(Args[0])); 10276 if (Arg0.isInvalid()) 10277 return ExprError(); 10278 10279 ExprResult Arg1 = 10280 PerformCopyInitialization( 10281 InitializedEntity::InitializeParameter(Context, 10282 FnDecl->getParamDecl(1)), 10283 SourceLocation(), Owned(Args[1])); 10284 if (Arg1.isInvalid()) 10285 return ExprError(); 10286 Args[0] = LHS = Arg0.takeAs<Expr>(); 10287 Args[1] = RHS = Arg1.takeAs<Expr>(); 10288 } 10289 10290 DiagnoseUseOfDecl(Best->FoundDecl, OpLoc); 10291 10292 // Determine the result type. 10293 QualType ResultTy = FnDecl->getResultType(); 10294 ExprValueKind VK = Expr::getValueKindForType(ResultTy); 10295 ResultTy = ResultTy.getNonLValueExprType(Context); 10296 10297 // Build the actual expression node. 10298 ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl, 10299 HadMultipleCandidates, OpLoc); 10300 if (FnExpr.isInvalid()) 10301 return ExprError(); 10302 10303 CXXOperatorCallExpr *TheCall = 10304 new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.take(), 10305 Args, ResultTy, VK, OpLoc, 10306 FPFeatures.fp_contract); 10307 10308 if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall, 10309 FnDecl)) 10310 return ExprError(); 10311 10312 return MaybeBindToTemporary(TheCall); 10313 } else { 10314 // We matched a built-in operator. Convert the arguments, then 10315 // break out so that we will build the appropriate built-in 10316 // operator node. 10317 ExprResult ArgsRes0 = 10318 PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0], 10319 Best->Conversions[0], AA_Passing); 10320 if (ArgsRes0.isInvalid()) 10321 return ExprError(); 10322 Args[0] = ArgsRes0.take(); 10323 10324 ExprResult ArgsRes1 = 10325 PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1], 10326 Best->Conversions[1], AA_Passing); 10327 if (ArgsRes1.isInvalid()) 10328 return ExprError(); 10329 Args[1] = ArgsRes1.take(); 10330 break; 10331 } 10332 } 10333 10334 case OR_No_Viable_Function: { 10335 // C++ [over.match.oper]p9: 10336 // If the operator is the operator , [...] and there are no 10337 // viable functions, then the operator is assumed to be the 10338 // built-in operator and interpreted according to clause 5. 10339 if (Opc == BO_Comma) 10340 break; 10341 10342 // For class as left operand for assignment or compound assigment 10343 // operator do not fall through to handling in built-in, but report that 10344 // no overloaded assignment operator found 10345 ExprResult Result = ExprError(); 10346 if (Args[0]->getType()->isRecordType() && 10347 Opc >= BO_Assign && Opc <= BO_OrAssign) { 10348 Diag(OpLoc, diag::err_ovl_no_viable_oper) 10349 << BinaryOperator::getOpcodeStr(Opc) 10350 << Args[0]->getSourceRange() << Args[1]->getSourceRange(); 10351 } else { 10352 // This is an erroneous use of an operator which can be overloaded by 10353 // a non-member function. Check for non-member operators which were 10354 // defined too late to be candidates. 10355 if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc, Args)) 10356 // FIXME: Recover by calling the found function. 10357 return ExprError(); 10358 10359 // No viable function; try to create a built-in operation, which will 10360 // produce an error. Then, show the non-viable candidates. 10361 Result = CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]); 10362 } 10363 assert(Result.isInvalid() && 10364 "C++ binary operator overloading is missing candidates!"); 10365 if (Result.isInvalid()) 10366 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, 10367 BinaryOperator::getOpcodeStr(Opc), OpLoc); 10368 return Result; 10369 } 10370 10371 case OR_Ambiguous: 10372 Diag(OpLoc, diag::err_ovl_ambiguous_oper_binary) 10373 << BinaryOperator::getOpcodeStr(Opc) 10374 << Args[0]->getType() << Args[1]->getType() 10375 << Args[0]->getSourceRange() << Args[1]->getSourceRange(); 10376 CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args, 10377 BinaryOperator::getOpcodeStr(Opc), OpLoc); 10378 return ExprError(); 10379 10380 case OR_Deleted: 10381 if (isImplicitlyDeleted(Best->Function)) { 10382 CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function); 10383 Diag(OpLoc, diag::err_ovl_deleted_special_oper) 10384 << getSpecialMember(Method) 10385 << BinaryOperator::getOpcodeStr(Opc) 10386 << getDeletedOrUnavailableSuffix(Best->Function); 10387 10388 if (getSpecialMember(Method) != CXXInvalid) { 10389 // The user probably meant to call this special member. Just 10390 // explain why it's deleted. 10391 NoteDeletedFunction(Method); 10392 return ExprError(); 10393 } 10394 } else { 10395 Diag(OpLoc, diag::err_ovl_deleted_oper) 10396 << Best->Function->isDeleted() 10397 << BinaryOperator::getOpcodeStr(Opc) 10398 << getDeletedOrUnavailableSuffix(Best->Function) 10399 << Args[0]->getSourceRange() << Args[1]->getSourceRange(); 10400 } 10401 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, 10402 BinaryOperator::getOpcodeStr(Opc), OpLoc); 10403 return ExprError(); 10404 } 10405 10406 // We matched a built-in operator; build it. 10407 return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]); 10408} 10409 10410ExprResult 10411Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc, 10412 SourceLocation RLoc, 10413 Expr *Base, Expr *Idx) { 10414 Expr *Args[2] = { Base, Idx }; 10415 DeclarationName OpName = 10416 Context.DeclarationNames.getCXXOperatorName(OO_Subscript); 10417 10418 // If either side is type-dependent, create an appropriate dependent 10419 // expression. 10420 if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) { 10421 10422 CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators 10423 // CHECKME: no 'operator' keyword? 10424 DeclarationNameInfo OpNameInfo(OpName, LLoc); 10425 OpNameInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc)); 10426 UnresolvedLookupExpr *Fn 10427 = UnresolvedLookupExpr::Create(Context, NamingClass, 10428 NestedNameSpecifierLoc(), OpNameInfo, 10429 /*ADL*/ true, /*Overloaded*/ false, 10430 UnresolvedSetIterator(), 10431 UnresolvedSetIterator()); 10432 // Can't add any actual overloads yet 10433 10434 return Owned(new (Context) CXXOperatorCallExpr(Context, OO_Subscript, Fn, 10435 Args, 10436 Context.DependentTy, 10437 VK_RValue, 10438 RLoc, false)); 10439 } 10440 10441 // Handle placeholders on both operands. 10442 if (checkPlaceholderForOverload(*this, Args[0])) 10443 return ExprError(); 10444 if (checkPlaceholderForOverload(*this, Args[1])) 10445 return ExprError(); 10446 10447 // Build an empty overload set. 10448 OverloadCandidateSet CandidateSet(LLoc); 10449 10450 // Subscript can only be overloaded as a member function. 10451 10452 // Add operator candidates that are member functions. 10453 AddMemberOperatorCandidates(OO_Subscript, LLoc, Args, 2, CandidateSet); 10454 10455 // Add builtin operator candidates. 10456 AddBuiltinOperatorCandidates(OO_Subscript, LLoc, Args, 2, CandidateSet); 10457 10458 bool HadMultipleCandidates = (CandidateSet.size() > 1); 10459 10460 // Perform overload resolution. 10461 OverloadCandidateSet::iterator Best; 10462 switch (CandidateSet.BestViableFunction(*this, LLoc, Best)) { 10463 case OR_Success: { 10464 // We found a built-in operator or an overloaded operator. 10465 FunctionDecl *FnDecl = Best->Function; 10466 10467 if (FnDecl) { 10468 // We matched an overloaded operator. Build a call to that 10469 // operator. 10470 10471 MarkFunctionReferenced(LLoc, FnDecl); 10472 10473 CheckMemberOperatorAccess(LLoc, Args[0], Args[1], Best->FoundDecl); 10474 DiagnoseUseOfDecl(Best->FoundDecl, LLoc); 10475 10476 // Convert the arguments. 10477 CXXMethodDecl *Method = cast<CXXMethodDecl>(FnDecl); 10478 ExprResult Arg0 = 10479 PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0, 10480 Best->FoundDecl, Method); 10481 if (Arg0.isInvalid()) 10482 return ExprError(); 10483 Args[0] = Arg0.take(); 10484 10485 // Convert the arguments. 10486 ExprResult InputInit 10487 = PerformCopyInitialization(InitializedEntity::InitializeParameter( 10488 Context, 10489 FnDecl->getParamDecl(0)), 10490 SourceLocation(), 10491 Owned(Args[1])); 10492 if (InputInit.isInvalid()) 10493 return ExprError(); 10494 10495 Args[1] = InputInit.takeAs<Expr>(); 10496 10497 // Determine the result type 10498 QualType ResultTy = FnDecl->getResultType(); 10499 ExprValueKind VK = Expr::getValueKindForType(ResultTy); 10500 ResultTy = ResultTy.getNonLValueExprType(Context); 10501 10502 // Build the actual expression node. 10503 DeclarationNameInfo OpLocInfo(OpName, LLoc); 10504 OpLocInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc)); 10505 ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl, 10506 HadMultipleCandidates, 10507 OpLocInfo.getLoc(), 10508 OpLocInfo.getInfo()); 10509 if (FnExpr.isInvalid()) 10510 return ExprError(); 10511 10512 CXXOperatorCallExpr *TheCall = 10513 new (Context) CXXOperatorCallExpr(Context, OO_Subscript, 10514 FnExpr.take(), Args, 10515 ResultTy, VK, RLoc, 10516 false); 10517 10518 if (CheckCallReturnType(FnDecl->getResultType(), LLoc, TheCall, 10519 FnDecl)) 10520 return ExprError(); 10521 10522 return MaybeBindToTemporary(TheCall); 10523 } else { 10524 // We matched a built-in operator. Convert the arguments, then 10525 // break out so that we will build the appropriate built-in 10526 // operator node. 10527 ExprResult ArgsRes0 = 10528 PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0], 10529 Best->Conversions[0], AA_Passing); 10530 if (ArgsRes0.isInvalid()) 10531 return ExprError(); 10532 Args[0] = ArgsRes0.take(); 10533 10534 ExprResult ArgsRes1 = 10535 PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1], 10536 Best->Conversions[1], AA_Passing); 10537 if (ArgsRes1.isInvalid()) 10538 return ExprError(); 10539 Args[1] = ArgsRes1.take(); 10540 10541 break; 10542 } 10543 } 10544 10545 case OR_No_Viable_Function: { 10546 if (CandidateSet.empty()) 10547 Diag(LLoc, diag::err_ovl_no_oper) 10548 << Args[0]->getType() << /*subscript*/ 0 10549 << Args[0]->getSourceRange() << Args[1]->getSourceRange(); 10550 else 10551 Diag(LLoc, diag::err_ovl_no_viable_subscript) 10552 << Args[0]->getType() 10553 << Args[0]->getSourceRange() << Args[1]->getSourceRange(); 10554 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, 10555 "[]", LLoc); 10556 return ExprError(); 10557 } 10558 10559 case OR_Ambiguous: 10560 Diag(LLoc, diag::err_ovl_ambiguous_oper_binary) 10561 << "[]" 10562 << Args[0]->getType() << Args[1]->getType() 10563 << Args[0]->getSourceRange() << Args[1]->getSourceRange(); 10564 CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args, 10565 "[]", LLoc); 10566 return ExprError(); 10567 10568 case OR_Deleted: 10569 Diag(LLoc, diag::err_ovl_deleted_oper) 10570 << Best->Function->isDeleted() << "[]" 10571 << getDeletedOrUnavailableSuffix(Best->Function) 10572 << Args[0]->getSourceRange() << Args[1]->getSourceRange(); 10573 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, 10574 "[]", LLoc); 10575 return ExprError(); 10576 } 10577 10578 // We matched a built-in operator; build it. 10579 return CreateBuiltinArraySubscriptExpr(Args[0], LLoc, Args[1], RLoc); 10580} 10581 10582/// BuildCallToMemberFunction - Build a call to a member 10583/// function. MemExpr is the expression that refers to the member 10584/// function (and includes the object parameter), Args/NumArgs are the 10585/// arguments to the function call (not including the object 10586/// parameter). The caller needs to validate that the member 10587/// expression refers to a non-static member function or an overloaded 10588/// member function. 10589ExprResult 10590Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, 10591 SourceLocation LParenLoc, Expr **Args, 10592 unsigned NumArgs, SourceLocation RParenLoc) { 10593 assert(MemExprE->getType() == Context.BoundMemberTy || 10594 MemExprE->getType() == Context.OverloadTy); 10595 10596 // Dig out the member expression. This holds both the object 10597 // argument and the member function we're referring to. 10598 Expr *NakedMemExpr = MemExprE->IgnoreParens(); 10599 10600 // Determine whether this is a call to a pointer-to-member function. 10601 if (BinaryOperator *op = dyn_cast<BinaryOperator>(NakedMemExpr)) { 10602 assert(op->getType() == Context.BoundMemberTy); 10603 assert(op->getOpcode() == BO_PtrMemD || op->getOpcode() == BO_PtrMemI); 10604 10605 QualType fnType = 10606 op->getRHS()->getType()->castAs<MemberPointerType>()->getPointeeType(); 10607 10608 const FunctionProtoType *proto = fnType->castAs<FunctionProtoType>(); 10609 QualType resultType = proto->getCallResultType(Context); 10610 ExprValueKind valueKind = Expr::getValueKindForType(proto->getResultType()); 10611 10612 // Check that the object type isn't more qualified than the 10613 // member function we're calling. 10614 Qualifiers funcQuals = Qualifiers::fromCVRMask(proto->getTypeQuals()); 10615 10616 QualType objectType = op->getLHS()->getType(); 10617 if (op->getOpcode() == BO_PtrMemI) 10618 objectType = objectType->castAs<PointerType>()->getPointeeType(); 10619 Qualifiers objectQuals = objectType.getQualifiers(); 10620 10621 Qualifiers difference = objectQuals - funcQuals; 10622 difference.removeObjCGCAttr(); 10623 difference.removeAddressSpace(); 10624 if (difference) { 10625 std::string qualsString = difference.getAsString(); 10626 Diag(LParenLoc, diag::err_pointer_to_member_call_drops_quals) 10627 << fnType.getUnqualifiedType() 10628 << qualsString 10629 << (qualsString.find(' ') == std::string::npos ? 1 : 2); 10630 } 10631 10632 CXXMemberCallExpr *call 10633 = new (Context) CXXMemberCallExpr(Context, MemExprE, 10634 llvm::makeArrayRef(Args, NumArgs), 10635 resultType, valueKind, RParenLoc); 10636 10637 if (CheckCallReturnType(proto->getResultType(), 10638 op->getRHS()->getLocStart(), 10639 call, 0)) 10640 return ExprError(); 10641 10642 if (ConvertArgumentsForCall(call, op, 0, proto, Args, NumArgs, RParenLoc)) 10643 return ExprError(); 10644 10645 return MaybeBindToTemporary(call); 10646 } 10647 10648 UnbridgedCastsSet UnbridgedCasts; 10649 if (checkArgPlaceholdersForOverload(*this, Args, NumArgs, UnbridgedCasts)) 10650 return ExprError(); 10651 10652 MemberExpr *MemExpr; 10653 CXXMethodDecl *Method = 0; 10654 DeclAccessPair FoundDecl = DeclAccessPair::make(0, AS_public); 10655 NestedNameSpecifier *Qualifier = 0; 10656 if (isa<MemberExpr>(NakedMemExpr)) { 10657 MemExpr = cast<MemberExpr>(NakedMemExpr); 10658 Method = cast<CXXMethodDecl>(MemExpr->getMemberDecl()); 10659 FoundDecl = MemExpr->getFoundDecl(); 10660 Qualifier = MemExpr->getQualifier(); 10661 UnbridgedCasts.restore(); 10662 } else { 10663 UnresolvedMemberExpr *UnresExpr = cast<UnresolvedMemberExpr>(NakedMemExpr); 10664 Qualifier = UnresExpr->getQualifier(); 10665 10666 QualType ObjectType = UnresExpr->getBaseType(); 10667 Expr::Classification ObjectClassification 10668 = UnresExpr->isArrow()? Expr::Classification::makeSimpleLValue() 10669 : UnresExpr->getBase()->Classify(Context); 10670 10671 // Add overload candidates 10672 OverloadCandidateSet CandidateSet(UnresExpr->getMemberLoc()); 10673 10674 // FIXME: avoid copy. 10675 TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0; 10676 if (UnresExpr->hasExplicitTemplateArgs()) { 10677 UnresExpr->copyTemplateArgumentsInto(TemplateArgsBuffer); 10678 TemplateArgs = &TemplateArgsBuffer; 10679 } 10680 10681 for (UnresolvedMemberExpr::decls_iterator I = UnresExpr->decls_begin(), 10682 E = UnresExpr->decls_end(); I != E; ++I) { 10683 10684 NamedDecl *Func = *I; 10685 CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(Func->getDeclContext()); 10686 if (isa<UsingShadowDecl>(Func)) 10687 Func = cast<UsingShadowDecl>(Func)->getTargetDecl(); 10688 10689 10690 // Microsoft supports direct constructor calls. 10691 if (getLangOpts().MicrosoftExt && isa<CXXConstructorDecl>(Func)) { 10692 AddOverloadCandidate(cast<CXXConstructorDecl>(Func), I.getPair(), 10693 llvm::makeArrayRef(Args, NumArgs), CandidateSet); 10694 } else if ((Method = dyn_cast<CXXMethodDecl>(Func))) { 10695 // If explicit template arguments were provided, we can't call a 10696 // non-template member function. 10697 if (TemplateArgs) 10698 continue; 10699 10700 AddMethodCandidate(Method, I.getPair(), ActingDC, ObjectType, 10701 ObjectClassification, 10702 llvm::makeArrayRef(Args, NumArgs), CandidateSet, 10703 /*SuppressUserConversions=*/false); 10704 } else { 10705 AddMethodTemplateCandidate(cast<FunctionTemplateDecl>(Func), 10706 I.getPair(), ActingDC, TemplateArgs, 10707 ObjectType, ObjectClassification, 10708 llvm::makeArrayRef(Args, NumArgs), 10709 CandidateSet, 10710 /*SuppressUsedConversions=*/false); 10711 } 10712 } 10713 10714 DeclarationName DeclName = UnresExpr->getMemberName(); 10715 10716 UnbridgedCasts.restore(); 10717 10718 OverloadCandidateSet::iterator Best; 10719 switch (CandidateSet.BestViableFunction(*this, UnresExpr->getLocStart(), 10720 Best)) { 10721 case OR_Success: 10722 Method = cast<CXXMethodDecl>(Best->Function); 10723 MarkFunctionReferenced(UnresExpr->getMemberLoc(), Method); 10724 FoundDecl = Best->FoundDecl; 10725 CheckUnresolvedMemberAccess(UnresExpr, Best->FoundDecl); 10726 DiagnoseUseOfDecl(Best->FoundDecl, UnresExpr->getNameLoc()); 10727 break; 10728 10729 case OR_No_Viable_Function: 10730 Diag(UnresExpr->getMemberLoc(), 10731 diag::err_ovl_no_viable_member_function_in_call) 10732 << DeclName << MemExprE->getSourceRange(); 10733 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, 10734 llvm::makeArrayRef(Args, NumArgs)); 10735 // FIXME: Leaking incoming expressions! 10736 return ExprError(); 10737 10738 case OR_Ambiguous: 10739 Diag(UnresExpr->getMemberLoc(), diag::err_ovl_ambiguous_member_call) 10740 << DeclName << MemExprE->getSourceRange(); 10741 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, 10742 llvm::makeArrayRef(Args, NumArgs)); 10743 // FIXME: Leaking incoming expressions! 10744 return ExprError(); 10745 10746 case OR_Deleted: 10747 Diag(UnresExpr->getMemberLoc(), diag::err_ovl_deleted_member_call) 10748 << Best->Function->isDeleted() 10749 << DeclName 10750 << getDeletedOrUnavailableSuffix(Best->Function) 10751 << MemExprE->getSourceRange(); 10752 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, 10753 llvm::makeArrayRef(Args, NumArgs)); 10754 // FIXME: Leaking incoming expressions! 10755 return ExprError(); 10756 } 10757 10758 MemExprE = FixOverloadedFunctionReference(MemExprE, FoundDecl, Method); 10759 10760 // If overload resolution picked a static member, build a 10761 // non-member call based on that function. 10762 if (Method->isStatic()) { 10763 return BuildResolvedCallExpr(MemExprE, Method, LParenLoc, 10764 Args, NumArgs, RParenLoc); 10765 } 10766 10767 MemExpr = cast<MemberExpr>(MemExprE->IgnoreParens()); 10768 } 10769 10770 QualType ResultType = Method->getResultType(); 10771 ExprValueKind VK = Expr::getValueKindForType(ResultType); 10772 ResultType = ResultType.getNonLValueExprType(Context); 10773 10774 assert(Method && "Member call to something that isn't a method?"); 10775 CXXMemberCallExpr *TheCall = 10776 new (Context) CXXMemberCallExpr(Context, MemExprE, 10777 llvm::makeArrayRef(Args, NumArgs), 10778 ResultType, VK, RParenLoc); 10779 10780 // Check for a valid return type. 10781 if (CheckCallReturnType(Method->getResultType(), MemExpr->getMemberLoc(), 10782 TheCall, Method)) 10783 return ExprError(); 10784 10785 // Convert the object argument (for a non-static member function call). 10786 // We only need to do this if there was actually an overload; otherwise 10787 // it was done at lookup. 10788 if (!Method->isStatic()) { 10789 ExprResult ObjectArg = 10790 PerformObjectArgumentInitialization(MemExpr->getBase(), Qualifier, 10791 FoundDecl, Method); 10792 if (ObjectArg.isInvalid()) 10793 return ExprError(); 10794 MemExpr->setBase(ObjectArg.take()); 10795 } 10796 10797 // Convert the rest of the arguments 10798 const FunctionProtoType *Proto = 10799 Method->getType()->getAs<FunctionProtoType>(); 10800 if (ConvertArgumentsForCall(TheCall, MemExpr, Method, Proto, Args, NumArgs, 10801 RParenLoc)) 10802 return ExprError(); 10803 10804 DiagnoseSentinelCalls(Method, LParenLoc, Args, NumArgs); 10805 10806 if (CheckFunctionCall(Method, TheCall, Proto)) 10807 return ExprError(); 10808 10809 if ((isa<CXXConstructorDecl>(CurContext) || 10810 isa<CXXDestructorDecl>(CurContext)) && 10811 TheCall->getMethodDecl()->isPure()) { 10812 const CXXMethodDecl *MD = TheCall->getMethodDecl(); 10813 10814 if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts())) { 10815 Diag(MemExpr->getLocStart(), 10816 diag::warn_call_to_pure_virtual_member_function_from_ctor_dtor) 10817 << MD->getDeclName() << isa<CXXDestructorDecl>(CurContext) 10818 << MD->getParent()->getDeclName(); 10819 10820 Diag(MD->getLocStart(), diag::note_previous_decl) << MD->getDeclName(); 10821 } 10822 } 10823 return MaybeBindToTemporary(TheCall); 10824} 10825 10826/// BuildCallToObjectOfClassType - Build a call to an object of class 10827/// type (C++ [over.call.object]), which can end up invoking an 10828/// overloaded function call operator (@c operator()) or performing a 10829/// user-defined conversion on the object argument. 10830ExprResult 10831Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj, 10832 SourceLocation LParenLoc, 10833 Expr **Args, unsigned NumArgs, 10834 SourceLocation RParenLoc) { 10835 if (checkPlaceholderForOverload(*this, Obj)) 10836 return ExprError(); 10837 ExprResult Object = Owned(Obj); 10838 10839 UnbridgedCastsSet UnbridgedCasts; 10840 if (checkArgPlaceholdersForOverload(*this, Args, NumArgs, UnbridgedCasts)) 10841 return ExprError(); 10842 10843 assert(Object.get()->getType()->isRecordType() && "Requires object type argument"); 10844 const RecordType *Record = Object.get()->getType()->getAs<RecordType>(); 10845 10846 // C++ [over.call.object]p1: 10847 // If the primary-expression E in the function call syntax 10848 // evaluates to a class object of type "cv T", then the set of 10849 // candidate functions includes at least the function call 10850 // operators of T. The function call operators of T are obtained by 10851 // ordinary lookup of the name operator() in the context of 10852 // (E).operator(). 10853 OverloadCandidateSet CandidateSet(LParenLoc); 10854 DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(OO_Call); 10855 10856 if (RequireCompleteType(LParenLoc, Object.get()->getType(), 10857 diag::err_incomplete_object_call, Object.get())) 10858 return true; 10859 10860 LookupResult R(*this, OpName, LParenLoc, LookupOrdinaryName); 10861 LookupQualifiedName(R, Record->getDecl()); 10862 R.suppressDiagnostics(); 10863 10864 for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end(); 10865 Oper != OperEnd; ++Oper) { 10866 AddMethodCandidate(Oper.getPair(), Object.get()->getType(), 10867 Object.get()->Classify(Context), Args, NumArgs, CandidateSet, 10868 /*SuppressUserConversions=*/ false); 10869 } 10870 10871 // C++ [over.call.object]p2: 10872 // In addition, for each (non-explicit in C++0x) conversion function 10873 // declared in T of the form 10874 // 10875 // operator conversion-type-id () cv-qualifier; 10876 // 10877 // where cv-qualifier is the same cv-qualification as, or a 10878 // greater cv-qualification than, cv, and where conversion-type-id 10879 // denotes the type "pointer to function of (P1,...,Pn) returning 10880 // R", or the type "reference to pointer to function of 10881 // (P1,...,Pn) returning R", or the type "reference to function 10882 // of (P1,...,Pn) returning R", a surrogate call function [...] 10883 // is also considered as a candidate function. Similarly, 10884 // surrogate call functions are added to the set of candidate 10885 // functions for each conversion function declared in an 10886 // accessible base class provided the function is not hidden 10887 // within T by another intervening declaration. 10888 const UnresolvedSetImpl *Conversions 10889 = cast<CXXRecordDecl>(Record->getDecl())->getVisibleConversionFunctions(); 10890 for (UnresolvedSetImpl::iterator I = Conversions->begin(), 10891 E = Conversions->end(); I != E; ++I) { 10892 NamedDecl *D = *I; 10893 CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext()); 10894 if (isa<UsingShadowDecl>(D)) 10895 D = cast<UsingShadowDecl>(D)->getTargetDecl(); 10896 10897 // Skip over templated conversion functions; they aren't 10898 // surrogates. 10899 if (isa<FunctionTemplateDecl>(D)) 10900 continue; 10901 10902 CXXConversionDecl *Conv = cast<CXXConversionDecl>(D); 10903 if (!Conv->isExplicit()) { 10904 // Strip the reference type (if any) and then the pointer type (if 10905 // any) to get down to what might be a function type. 10906 QualType ConvType = Conv->getConversionType().getNonReferenceType(); 10907 if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>()) 10908 ConvType = ConvPtrType->getPointeeType(); 10909 10910 if (const FunctionProtoType *Proto = ConvType->getAs<FunctionProtoType>()) 10911 { 10912 AddSurrogateCandidate(Conv, I.getPair(), ActingContext, Proto, 10913 Object.get(), llvm::makeArrayRef(Args, NumArgs), 10914 CandidateSet); 10915 } 10916 } 10917 } 10918 10919 bool HadMultipleCandidates = (CandidateSet.size() > 1); 10920 10921 // Perform overload resolution. 10922 OverloadCandidateSet::iterator Best; 10923 switch (CandidateSet.BestViableFunction(*this, Object.get()->getLocStart(), 10924 Best)) { 10925 case OR_Success: 10926 // Overload resolution succeeded; we'll build the appropriate call 10927 // below. 10928 break; 10929 10930 case OR_No_Viable_Function: 10931 if (CandidateSet.empty()) 10932 Diag(Object.get()->getLocStart(), diag::err_ovl_no_oper) 10933 << Object.get()->getType() << /*call*/ 1 10934 << Object.get()->getSourceRange(); 10935 else 10936 Diag(Object.get()->getLocStart(), 10937 diag::err_ovl_no_viable_object_call) 10938 << Object.get()->getType() << Object.get()->getSourceRange(); 10939 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, 10940 llvm::makeArrayRef(Args, NumArgs)); 10941 break; 10942 10943 case OR_Ambiguous: 10944 Diag(Object.get()->getLocStart(), 10945 diag::err_ovl_ambiguous_object_call) 10946 << Object.get()->getType() << Object.get()->getSourceRange(); 10947 CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, 10948 llvm::makeArrayRef(Args, NumArgs)); 10949 break; 10950 10951 case OR_Deleted: 10952 Diag(Object.get()->getLocStart(), 10953 diag::err_ovl_deleted_object_call) 10954 << Best->Function->isDeleted() 10955 << Object.get()->getType() 10956 << getDeletedOrUnavailableSuffix(Best->Function) 10957 << Object.get()->getSourceRange(); 10958 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, 10959 llvm::makeArrayRef(Args, NumArgs)); 10960 break; 10961 } 10962 10963 if (Best == CandidateSet.end()) 10964 return true; 10965 10966 UnbridgedCasts.restore(); 10967 10968 if (Best->Function == 0) { 10969 // Since there is no function declaration, this is one of the 10970 // surrogate candidates. Dig out the conversion function. 10971 CXXConversionDecl *Conv 10972 = cast<CXXConversionDecl>( 10973 Best->Conversions[0].UserDefined.ConversionFunction); 10974 10975 CheckMemberOperatorAccess(LParenLoc, Object.get(), 0, Best->FoundDecl); 10976 DiagnoseUseOfDecl(Best->FoundDecl, LParenLoc); 10977 10978 // We selected one of the surrogate functions that converts the 10979 // object parameter to a function pointer. Perform the conversion 10980 // on the object argument, then let ActOnCallExpr finish the job. 10981 10982 // Create an implicit member expr to refer to the conversion operator. 10983 // and then call it. 10984 ExprResult Call = BuildCXXMemberCallExpr(Object.get(), Best->FoundDecl, 10985 Conv, HadMultipleCandidates); 10986 if (Call.isInvalid()) 10987 return ExprError(); 10988 // Record usage of conversion in an implicit cast. 10989 Call = Owned(ImplicitCastExpr::Create(Context, Call.get()->getType(), 10990 CK_UserDefinedConversion, 10991 Call.get(), 0, VK_RValue)); 10992 10993 return ActOnCallExpr(S, Call.get(), LParenLoc, MultiExprArg(Args, NumArgs), 10994 RParenLoc); 10995 } 10996 10997 MarkFunctionReferenced(LParenLoc, Best->Function); 10998 CheckMemberOperatorAccess(LParenLoc, Object.get(), 0, Best->FoundDecl); 10999 DiagnoseUseOfDecl(Best->FoundDecl, LParenLoc); 11000 11001 // We found an overloaded operator(). Build a CXXOperatorCallExpr 11002 // that calls this method, using Object for the implicit object 11003 // parameter and passing along the remaining arguments. 11004 CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function); 11005 const FunctionProtoType *Proto = 11006 Method->getType()->getAs<FunctionProtoType>(); 11007 11008 unsigned NumArgsInProto = Proto->getNumArgs(); 11009 unsigned NumArgsToCheck = NumArgs; 11010 11011 // Build the full argument list for the method call (the 11012 // implicit object parameter is placed at the beginning of the 11013 // list). 11014 Expr **MethodArgs; 11015 if (NumArgs < NumArgsInProto) { 11016 NumArgsToCheck = NumArgsInProto; 11017 MethodArgs = new Expr*[NumArgsInProto + 1]; 11018 } else { 11019 MethodArgs = new Expr*[NumArgs + 1]; 11020 } 11021 MethodArgs[0] = Object.get(); 11022 for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) 11023 MethodArgs[ArgIdx + 1] = Args[ArgIdx]; 11024 11025 DeclarationNameInfo OpLocInfo( 11026 Context.DeclarationNames.getCXXOperatorName(OO_Call), LParenLoc); 11027 OpLocInfo.setCXXOperatorNameRange(SourceRange(LParenLoc, RParenLoc)); 11028 ExprResult NewFn = CreateFunctionRefExpr(*this, Method, 11029 HadMultipleCandidates, 11030 OpLocInfo.getLoc(), 11031 OpLocInfo.getInfo()); 11032 if (NewFn.isInvalid()) 11033 return true; 11034 11035 // Once we've built TheCall, all of the expressions are properly 11036 // owned. 11037 QualType ResultTy = Method->getResultType(); 11038 ExprValueKind VK = Expr::getValueKindForType(ResultTy); 11039 ResultTy = ResultTy.getNonLValueExprType(Context); 11040 11041 CXXOperatorCallExpr *TheCall = 11042 new (Context) CXXOperatorCallExpr(Context, OO_Call, NewFn.take(), 11043 llvm::makeArrayRef(MethodArgs, NumArgs+1), 11044 ResultTy, VK, RParenLoc, false); 11045 delete [] MethodArgs; 11046 11047 if (CheckCallReturnType(Method->getResultType(), LParenLoc, TheCall, 11048 Method)) 11049 return true; 11050 11051 // We may have default arguments. If so, we need to allocate more 11052 // slots in the call for them. 11053 if (NumArgs < NumArgsInProto) 11054 TheCall->setNumArgs(Context, NumArgsInProto + 1); 11055 else if (NumArgs > NumArgsInProto) 11056 NumArgsToCheck = NumArgsInProto; 11057 11058 bool IsError = false; 11059 11060 // Initialize the implicit object parameter. 11061 ExprResult ObjRes = 11062 PerformObjectArgumentInitialization(Object.get(), /*Qualifier=*/0, 11063 Best->FoundDecl, Method); 11064 if (ObjRes.isInvalid()) 11065 IsError = true; 11066 else 11067 Object = ObjRes; 11068 TheCall->setArg(0, Object.take()); 11069 11070 // Check the argument types. 11071 for (unsigned i = 0; i != NumArgsToCheck; i++) { 11072 Expr *Arg; 11073 if (i < NumArgs) { 11074 Arg = Args[i]; 11075 11076 // Pass the argument. 11077 11078 ExprResult InputInit 11079 = PerformCopyInitialization(InitializedEntity::InitializeParameter( 11080 Context, 11081 Method->getParamDecl(i)), 11082 SourceLocation(), Arg); 11083 11084 IsError |= InputInit.isInvalid(); 11085 Arg = InputInit.takeAs<Expr>(); 11086 } else { 11087 ExprResult DefArg 11088 = BuildCXXDefaultArgExpr(LParenLoc, Method, Method->getParamDecl(i)); 11089 if (DefArg.isInvalid()) { 11090 IsError = true; 11091 break; 11092 } 11093 11094 Arg = DefArg.takeAs<Expr>(); 11095 } 11096 11097 TheCall->setArg(i + 1, Arg); 11098 } 11099 11100 // If this is a variadic call, handle args passed through "...". 11101 if (Proto->isVariadic()) { 11102 // Promote the arguments (C99 6.5.2.2p7). 11103 for (unsigned i = NumArgsInProto; i < NumArgs; i++) { 11104 ExprResult Arg = DefaultVariadicArgumentPromotion(Args[i], VariadicMethod, 0); 11105 IsError |= Arg.isInvalid(); 11106 TheCall->setArg(i + 1, Arg.take()); 11107 } 11108 } 11109 11110 if (IsError) return true; 11111 11112 DiagnoseSentinelCalls(Method, LParenLoc, Args, NumArgs); 11113 11114 if (CheckFunctionCall(Method, TheCall, Proto)) 11115 return true; 11116 11117 return MaybeBindToTemporary(TheCall); 11118} 11119 11120/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator-> 11121/// (if one exists), where @c Base is an expression of class type and 11122/// @c Member is the name of the member we're trying to find. 11123ExprResult 11124Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc) { 11125 assert(Base->getType()->isRecordType() && 11126 "left-hand side must have class type"); 11127 11128 if (checkPlaceholderForOverload(*this, Base)) 11129 return ExprError(); 11130 11131 SourceLocation Loc = Base->getExprLoc(); 11132 11133 // C++ [over.ref]p1: 11134 // 11135 // [...] An expression x->m is interpreted as (x.operator->())->m 11136 // for a class object x of type T if T::operator->() exists and if 11137 // the operator is selected as the best match function by the 11138 // overload resolution mechanism (13.3). 11139 DeclarationName OpName = 11140 Context.DeclarationNames.getCXXOperatorName(OO_Arrow); 11141 OverloadCandidateSet CandidateSet(Loc); 11142 const RecordType *BaseRecord = Base->getType()->getAs<RecordType>(); 11143 11144 if (RequireCompleteType(Loc, Base->getType(), 11145 diag::err_typecheck_incomplete_tag, Base)) 11146 return ExprError(); 11147 11148 LookupResult R(*this, OpName, OpLoc, LookupOrdinaryName); 11149 LookupQualifiedName(R, BaseRecord->getDecl()); 11150 R.suppressDiagnostics(); 11151 11152 for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end(); 11153 Oper != OperEnd; ++Oper) { 11154 AddMethodCandidate(Oper.getPair(), Base->getType(), Base->Classify(Context), 11155 0, 0, CandidateSet, /*SuppressUserConversions=*/false); 11156 } 11157 11158 bool HadMultipleCandidates = (CandidateSet.size() > 1); 11159 11160 // Perform overload resolution. 11161 OverloadCandidateSet::iterator Best; 11162 switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) { 11163 case OR_Success: 11164 // Overload resolution succeeded; we'll build the call below. 11165 break; 11166 11167 case OR_No_Viable_Function: 11168 if (CandidateSet.empty()) 11169 Diag(OpLoc, diag::err_typecheck_member_reference_arrow) 11170 << Base->getType() << Base->getSourceRange(); 11171 else 11172 Diag(OpLoc, diag::err_ovl_no_viable_oper) 11173 << "operator->" << Base->getSourceRange(); 11174 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Base); 11175 return ExprError(); 11176 11177 case OR_Ambiguous: 11178 Diag(OpLoc, diag::err_ovl_ambiguous_oper_unary) 11179 << "->" << Base->getType() << Base->getSourceRange(); 11180 CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Base); 11181 return ExprError(); 11182 11183 case OR_Deleted: 11184 Diag(OpLoc, diag::err_ovl_deleted_oper) 11185 << Best->Function->isDeleted() 11186 << "->" 11187 << getDeletedOrUnavailableSuffix(Best->Function) 11188 << Base->getSourceRange(); 11189 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Base); 11190 return ExprError(); 11191 } 11192 11193 MarkFunctionReferenced(OpLoc, Best->Function); 11194 CheckMemberOperatorAccess(OpLoc, Base, 0, Best->FoundDecl); 11195 DiagnoseUseOfDecl(Best->FoundDecl, OpLoc); 11196 11197 // Convert the object parameter. 11198 CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function); 11199 ExprResult BaseResult = 11200 PerformObjectArgumentInitialization(Base, /*Qualifier=*/0, 11201 Best->FoundDecl, Method); 11202 if (BaseResult.isInvalid()) 11203 return ExprError(); 11204 Base = BaseResult.take(); 11205 11206 // Build the operator call. 11207 ExprResult FnExpr = CreateFunctionRefExpr(*this, Method, 11208 HadMultipleCandidates, OpLoc); 11209 if (FnExpr.isInvalid()) 11210 return ExprError(); 11211 11212 QualType ResultTy = Method->getResultType(); 11213 ExprValueKind VK = Expr::getValueKindForType(ResultTy); 11214 ResultTy = ResultTy.getNonLValueExprType(Context); 11215 CXXOperatorCallExpr *TheCall = 11216 new (Context) CXXOperatorCallExpr(Context, OO_Arrow, FnExpr.take(), 11217 Base, ResultTy, VK, OpLoc, false); 11218 11219 if (CheckCallReturnType(Method->getResultType(), OpLoc, TheCall, 11220 Method)) 11221 return ExprError(); 11222 11223 return MaybeBindToTemporary(TheCall); 11224} 11225 11226/// BuildLiteralOperatorCall - Build a UserDefinedLiteral by creating a call to 11227/// a literal operator described by the provided lookup results. 11228ExprResult Sema::BuildLiteralOperatorCall(LookupResult &R, 11229 DeclarationNameInfo &SuffixInfo, 11230 ArrayRef<Expr*> Args, 11231 SourceLocation LitEndLoc, 11232 TemplateArgumentListInfo *TemplateArgs) { 11233 SourceLocation UDSuffixLoc = SuffixInfo.getCXXLiteralOperatorNameLoc(); 11234 11235 OverloadCandidateSet CandidateSet(UDSuffixLoc); 11236 AddFunctionCandidates(R.asUnresolvedSet(), Args, CandidateSet, true, 11237 TemplateArgs); 11238 11239 bool HadMultipleCandidates = (CandidateSet.size() > 1); 11240 11241 // Perform overload resolution. This will usually be trivial, but might need 11242 // to perform substitutions for a literal operator template. 11243 OverloadCandidateSet::iterator Best; 11244 switch (CandidateSet.BestViableFunction(*this, UDSuffixLoc, Best)) { 11245 case OR_Success: 11246 case OR_Deleted: 11247 break; 11248 11249 case OR_No_Viable_Function: 11250 Diag(UDSuffixLoc, diag::err_ovl_no_viable_function_in_call) 11251 << R.getLookupName(); 11252 CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args); 11253 return ExprError(); 11254 11255 case OR_Ambiguous: 11256 Diag(R.getNameLoc(), diag::err_ovl_ambiguous_call) << R.getLookupName(); 11257 CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args); 11258 return ExprError(); 11259 } 11260 11261 FunctionDecl *FD = Best->Function; 11262 MarkFunctionReferenced(UDSuffixLoc, FD); 11263 DiagnoseUseOfDecl(Best->FoundDecl, UDSuffixLoc); 11264 11265 ExprResult Fn = CreateFunctionRefExpr(*this, FD, HadMultipleCandidates, 11266 SuffixInfo.getLoc(), 11267 SuffixInfo.getInfo()); 11268 if (Fn.isInvalid()) 11269 return true; 11270 11271 // Check the argument types. This should almost always be a no-op, except 11272 // that array-to-pointer decay is applied to string literals. 11273 Expr *ConvArgs[2]; 11274 for (unsigned ArgIdx = 0; ArgIdx != Args.size(); ++ArgIdx) { 11275 ExprResult InputInit = PerformCopyInitialization( 11276 InitializedEntity::InitializeParameter(Context, FD->getParamDecl(ArgIdx)), 11277 SourceLocation(), Args[ArgIdx]); 11278 if (InputInit.isInvalid()) 11279 return true; 11280 ConvArgs[ArgIdx] = InputInit.take(); 11281 } 11282 11283 QualType ResultTy = FD->getResultType(); 11284 ExprValueKind VK = Expr::getValueKindForType(ResultTy); 11285 ResultTy = ResultTy.getNonLValueExprType(Context); 11286 11287 UserDefinedLiteral *UDL = 11288 new (Context) UserDefinedLiteral(Context, Fn.take(), 11289 llvm::makeArrayRef(ConvArgs, Args.size()), 11290 ResultTy, VK, LitEndLoc, UDSuffixLoc); 11291 11292 if (CheckCallReturnType(FD->getResultType(), UDSuffixLoc, UDL, FD)) 11293 return ExprError(); 11294 11295 if (CheckFunctionCall(FD, UDL, NULL)) 11296 return ExprError(); 11297 11298 return MaybeBindToTemporary(UDL); 11299} 11300 11301/// Build a call to 'begin' or 'end' for a C++11 for-range statement. If the 11302/// given LookupResult is non-empty, it is assumed to describe a member which 11303/// will be invoked. Otherwise, the function will be found via argument 11304/// dependent lookup. 11305/// CallExpr is set to a valid expression and FRS_Success returned on success, 11306/// otherwise CallExpr is set to ExprError() and some non-success value 11307/// is returned. 11308Sema::ForRangeStatus 11309Sema::BuildForRangeBeginEndCall(Scope *S, SourceLocation Loc, 11310 SourceLocation RangeLoc, VarDecl *Decl, 11311 BeginEndFunction BEF, 11312 const DeclarationNameInfo &NameInfo, 11313 LookupResult &MemberLookup, 11314 OverloadCandidateSet *CandidateSet, 11315 Expr *Range, ExprResult *CallExpr) { 11316 CandidateSet->clear(); 11317 if (!MemberLookup.empty()) { 11318 ExprResult MemberRef = 11319 BuildMemberReferenceExpr(Range, Range->getType(), Loc, 11320 /*IsPtr=*/false, CXXScopeSpec(), 11321 /*TemplateKWLoc=*/SourceLocation(), 11322 /*FirstQualifierInScope=*/0, 11323 MemberLookup, 11324 /*TemplateArgs=*/0); 11325 if (MemberRef.isInvalid()) { 11326 *CallExpr = ExprError(); 11327 Diag(Range->getLocStart(), diag::note_in_for_range) 11328 << RangeLoc << BEF << Range->getType(); 11329 return FRS_DiagnosticIssued; 11330 } 11331 *CallExpr = ActOnCallExpr(S, MemberRef.get(), Loc, MultiExprArg(), Loc, 0); 11332 if (CallExpr->isInvalid()) { 11333 *CallExpr = ExprError(); 11334 Diag(Range->getLocStart(), diag::note_in_for_range) 11335 << RangeLoc << BEF << Range->getType(); 11336 return FRS_DiagnosticIssued; 11337 } 11338 } else { 11339 UnresolvedSet<0> FoundNames; 11340 // C++11 [stmt.ranged]p1: For the purposes of this name lookup, namespace 11341 // std is an associated namespace. 11342 UnresolvedLookupExpr *Fn = 11343 UnresolvedLookupExpr::Create(Context, /*NamingClass=*/0, 11344 NestedNameSpecifierLoc(), NameInfo, 11345 /*NeedsADL=*/true, /*Overloaded=*/false, 11346 FoundNames.begin(), FoundNames.end(), 11347 /*LookInStdNamespace=*/true); 11348 11349 bool CandidateSetError = buildOverloadedCallSet(S, Fn, Fn, &Range, 1, Loc, 11350 CandidateSet, CallExpr); 11351 if (CandidateSet->empty() || CandidateSetError) { 11352 *CallExpr = ExprError(); 11353 return FRS_NoViableFunction; 11354 } 11355 OverloadCandidateSet::iterator Best; 11356 OverloadingResult OverloadResult = 11357 CandidateSet->BestViableFunction(*this, Fn->getLocStart(), Best); 11358 11359 if (OverloadResult == OR_No_Viable_Function) { 11360 *CallExpr = ExprError(); 11361 return FRS_NoViableFunction; 11362 } 11363 *CallExpr = FinishOverloadedCallExpr(*this, S, Fn, Fn, Loc, &Range, 1, 11364 Loc, 0, CandidateSet, &Best, 11365 OverloadResult, 11366 /*AllowTypoCorrection=*/false); 11367 if (CallExpr->isInvalid() || OverloadResult != OR_Success) { 11368 *CallExpr = ExprError(); 11369 Diag(Range->getLocStart(), diag::note_in_for_range) 11370 << RangeLoc << BEF << Range->getType(); 11371 return FRS_DiagnosticIssued; 11372 } 11373 } 11374 return FRS_Success; 11375} 11376 11377 11378/// FixOverloadedFunctionReference - E is an expression that refers to 11379/// a C++ overloaded function (possibly with some parentheses and 11380/// perhaps a '&' around it). We have resolved the overloaded function 11381/// to the function declaration Fn, so patch up the expression E to 11382/// refer (possibly indirectly) to Fn. Returns the new expr. 11383Expr *Sema::FixOverloadedFunctionReference(Expr *E, DeclAccessPair Found, 11384 FunctionDecl *Fn) { 11385 if (ParenExpr *PE = dyn_cast<ParenExpr>(E)) { 11386 Expr *SubExpr = FixOverloadedFunctionReference(PE->getSubExpr(), 11387 Found, Fn); 11388 if (SubExpr == PE->getSubExpr()) 11389 return PE; 11390 11391 return new (Context) ParenExpr(PE->getLParen(), PE->getRParen(), SubExpr); 11392 } 11393 11394 if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) { 11395 Expr *SubExpr = FixOverloadedFunctionReference(ICE->getSubExpr(), 11396 Found, Fn); 11397 assert(Context.hasSameType(ICE->getSubExpr()->getType(), 11398 SubExpr->getType()) && 11399 "Implicit cast type cannot be determined from overload"); 11400 assert(ICE->path_empty() && "fixing up hierarchy conversion?"); 11401 if (SubExpr == ICE->getSubExpr()) 11402 return ICE; 11403 11404 return ImplicitCastExpr::Create(Context, ICE->getType(), 11405 ICE->getCastKind(), 11406 SubExpr, 0, 11407 ICE->getValueKind()); 11408 } 11409 11410 if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(E)) { 11411 assert(UnOp->getOpcode() == UO_AddrOf && 11412 "Can only take the address of an overloaded function"); 11413 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) { 11414 if (Method->isStatic()) { 11415 // Do nothing: static member functions aren't any different 11416 // from non-member functions. 11417 } else { 11418 // Fix the sub expression, which really has to be an 11419 // UnresolvedLookupExpr holding an overloaded member function 11420 // or template. 11421 Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(), 11422 Found, Fn); 11423 if (SubExpr == UnOp->getSubExpr()) 11424 return UnOp; 11425 11426 assert(isa<DeclRefExpr>(SubExpr) 11427 && "fixed to something other than a decl ref"); 11428 assert(cast<DeclRefExpr>(SubExpr)->getQualifier() 11429 && "fixed to a member ref with no nested name qualifier"); 11430 11431 // We have taken the address of a pointer to member 11432 // function. Perform the computation here so that we get the 11433 // appropriate pointer to member type. 11434 QualType ClassType 11435 = Context.getTypeDeclType(cast<RecordDecl>(Method->getDeclContext())); 11436 QualType MemPtrType 11437 = Context.getMemberPointerType(Fn->getType(), ClassType.getTypePtr()); 11438 11439 return new (Context) UnaryOperator(SubExpr, UO_AddrOf, MemPtrType, 11440 VK_RValue, OK_Ordinary, 11441 UnOp->getOperatorLoc()); 11442 } 11443 } 11444 Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(), 11445 Found, Fn); 11446 if (SubExpr == UnOp->getSubExpr()) 11447 return UnOp; 11448 11449 return new (Context) UnaryOperator(SubExpr, UO_AddrOf, 11450 Context.getPointerType(SubExpr->getType()), 11451 VK_RValue, OK_Ordinary, 11452 UnOp->getOperatorLoc()); 11453 } 11454 11455 if (UnresolvedLookupExpr *ULE = dyn_cast<UnresolvedLookupExpr>(E)) { 11456 // FIXME: avoid copy. 11457 TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0; 11458 if (ULE->hasExplicitTemplateArgs()) { 11459 ULE->copyTemplateArgumentsInto(TemplateArgsBuffer); 11460 TemplateArgs = &TemplateArgsBuffer; 11461 } 11462 11463 DeclRefExpr *DRE = DeclRefExpr::Create(Context, 11464 ULE->getQualifierLoc(), 11465 ULE->getTemplateKeywordLoc(), 11466 Fn, 11467 /*enclosing*/ false, // FIXME? 11468 ULE->getNameLoc(), 11469 Fn->getType(), 11470 VK_LValue, 11471 Found.getDecl(), 11472 TemplateArgs); 11473 MarkDeclRefReferenced(DRE); 11474 DRE->setHadMultipleCandidates(ULE->getNumDecls() > 1); 11475 return DRE; 11476 } 11477 11478 if (UnresolvedMemberExpr *MemExpr = dyn_cast<UnresolvedMemberExpr>(E)) { 11479 // FIXME: avoid copy. 11480 TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0; 11481 if (MemExpr->hasExplicitTemplateArgs()) { 11482 MemExpr->copyTemplateArgumentsInto(TemplateArgsBuffer); 11483 TemplateArgs = &TemplateArgsBuffer; 11484 } 11485 11486 Expr *Base; 11487 11488 // If we're filling in a static method where we used to have an 11489 // implicit member access, rewrite to a simple decl ref. 11490 if (MemExpr->isImplicitAccess()) { 11491 if (cast<CXXMethodDecl>(Fn)->isStatic()) { 11492 DeclRefExpr *DRE = DeclRefExpr::Create(Context, 11493 MemExpr->getQualifierLoc(), 11494 MemExpr->getTemplateKeywordLoc(), 11495 Fn, 11496 /*enclosing*/ false, 11497 MemExpr->getMemberLoc(), 11498 Fn->getType(), 11499 VK_LValue, 11500 Found.getDecl(), 11501 TemplateArgs); 11502 MarkDeclRefReferenced(DRE); 11503 DRE->setHadMultipleCandidates(MemExpr->getNumDecls() > 1); 11504 return DRE; 11505 } else { 11506 SourceLocation Loc = MemExpr->getMemberLoc(); 11507 if (MemExpr->getQualifier()) 11508 Loc = MemExpr->getQualifierLoc().getBeginLoc(); 11509 CheckCXXThisCapture(Loc); 11510 Base = new (Context) CXXThisExpr(Loc, 11511 MemExpr->getBaseType(), 11512 /*isImplicit=*/true); 11513 } 11514 } else 11515 Base = MemExpr->getBase(); 11516 11517 ExprValueKind valueKind; 11518 QualType type; 11519 if (cast<CXXMethodDecl>(Fn)->isStatic()) { 11520 valueKind = VK_LValue; 11521 type = Fn->getType(); 11522 } else { 11523 valueKind = VK_RValue; 11524 type = Context.BoundMemberTy; 11525 } 11526 11527 MemberExpr *ME = MemberExpr::Create(Context, Base, 11528 MemExpr->isArrow(), 11529 MemExpr->getQualifierLoc(), 11530 MemExpr->getTemplateKeywordLoc(), 11531 Fn, 11532 Found, 11533 MemExpr->getMemberNameInfo(), 11534 TemplateArgs, 11535 type, valueKind, OK_Ordinary); 11536 ME->setHadMultipleCandidates(true); 11537 return ME; 11538 } 11539 11540 llvm_unreachable("Invalid reference to overloaded function"); 11541} 11542 11543ExprResult Sema::FixOverloadedFunctionReference(ExprResult E, 11544 DeclAccessPair Found, 11545 FunctionDecl *Fn) { 11546 return Owned(FixOverloadedFunctionReference((Expr *)E.get(), Found, Fn)); 11547} 11548 11549} // end namespace clang 11550