From 7b361b588031483658c4364e02026ffb06e78c26 Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Thu, 27 Aug 2009 17:37:39 +0000 Subject: [PATCH] Add an InOverloadResolution flag to TryCopyInitialization. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80261 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/Sema.h | 3 ++- lib/Sema/SemaExprCXX.cpp | 3 ++- lib/Sema/SemaInit.cpp | 3 ++- lib/Sema/SemaOverload.cpp | 18 ++++++++++++------ 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/lib/Sema/Sema.h b/lib/Sema/Sema.h index 45e6669462..ee4a9e49e7 100644 --- a/lib/Sema/Sema.h +++ b/lib/Sema/Sema.h @@ -766,7 +766,8 @@ public: ImplicitConversionSequence TryCopyInitialization(Expr* From, QualType ToType, - bool SuppressUserConversions, bool ForceRValue); + bool SuppressUserConversions, bool ForceRValue, + bool InOverloadResolution); bool PerformCopyInitialization(Expr *&From, QualType ToType, const char *Flavor, bool Elidable = false); diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp index 55417c77d6..cdda6ab32f 100644 --- a/lib/Sema/SemaExprCXX.cpp +++ b/lib/Sema/SemaExprCXX.cpp @@ -1238,7 +1238,8 @@ static bool TryClassUnification(Sema &Self, Expr *From, Expr *To, // standard doesn't say. ICS = Self.TryCopyInitialization(From, TTy, /*SuppressUserConversions=*/false, - /*ForceRValue=*/false); + /*ForceRValue=*/false, + /*InOverloadResolution=*/false); } } else { // -- Otherwise: E1 can be converted to match E2 if E1 can be diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp index f545db83f6..fb75ff3cd6 100644 --- a/lib/Sema/SemaInit.cpp +++ b/lib/Sema/SemaInit.cpp @@ -666,7 +666,8 @@ void InitListChecker::CheckSubElementType(InitListExpr *IList, ImplicitConversionSequence ICS = SemaRef.TryCopyInitialization(expr, ElemType, /*SuppressUserConversions=*/false, - /*ForceRValue=*/false); + /*ForceRValue=*/false, + /*InOverloadResolution=*/false); if (ICS.ConversionKind != ImplicitConversionSequence::BadConversion) { if (SemaRef.PerformImplicitConversion(expr, ElemType, ICS, diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp index b4f25812ba..5c92e12f69 100644 --- a/lib/Sema/SemaOverload.cpp +++ b/lib/Sema/SemaOverload.cpp @@ -1922,7 +1922,8 @@ Sema::CompareDerivedToBaseConversions(const StandardConversionSequence& SCS1, /// then we treat @p From as an rvalue, even if it is an lvalue. ImplicitConversionSequence Sema::TryCopyInitialization(Expr *From, QualType ToType, - bool SuppressUserConversions, bool ForceRValue) { + bool SuppressUserConversions, bool ForceRValue, + bool InOverloadResolution) { if (ToType->isReferenceType()) { ImplicitConversionSequence ICS; CheckReferenceInit(From, ToType, @@ -2172,7 +2173,8 @@ Sema::AddOverloadCandidate(FunctionDecl *Function, QualType ParamType = Proto->getArgType(ArgIdx); Candidate.Conversions[ArgIdx] = TryCopyInitialization(Args[ArgIdx], ParamType, - SuppressUserConversions, ForceRValue); + SuppressUserConversions, ForceRValue, + /*InOverloadResolution=*/true); if (Candidate.Conversions[ArgIdx].ConversionKind == ImplicitConversionSequence::BadConversion) { Candidate.Viable = false; @@ -2288,7 +2290,8 @@ Sema::AddMethodCandidate(CXXMethodDecl *Method, Expr *Object, QualType ParamType = Proto->getArgType(ArgIdx); Candidate.Conversions[ArgIdx + 1] = TryCopyInitialization(Args[ArgIdx], ParamType, - SuppressUserConversions, ForceRValue); + SuppressUserConversions, ForceRValue, + /*InOverloadResolution=*/false); if (Candidate.Conversions[ArgIdx + 1].ConversionKind == ImplicitConversionSequence::BadConversion) { Candidate.Viable = false; @@ -2445,7 +2448,8 @@ Sema::AddConversionCandidate(CXXConversionDecl *Conversion, ImplicitConversionSequence ICS = TryCopyInitialization(&Call, ToType, /*SuppressUserConversions=*/true, - /*ForceRValue=*/false); + /*ForceRValue=*/false, + /*InOverloadResolution=*/false); switch (ICS.ConversionKind) { case ImplicitConversionSequence::StandardConversion: @@ -2560,7 +2564,8 @@ void Sema::AddSurrogateCandidate(CXXConversionDecl *Conversion, Candidate.Conversions[ArgIdx + 1] = TryCopyInitialization(Args[ArgIdx], ParamType, /*SuppressUserConversions=*/false, - /*ForceRValue=*/false); + /*ForceRValue=*/false, + /*InOverloadResolution=*/false); if (Candidate.Conversions[ArgIdx + 1].ConversionKind == ImplicitConversionSequence::BadConversion) { Candidate.Viable = false; @@ -2692,7 +2697,8 @@ void Sema::AddBuiltinCandidate(QualType ResultTy, QualType *ParamTys, Candidate.Conversions[ArgIdx] = TryCopyInitialization(Args[ArgIdx], ParamTys[ArgIdx], ArgIdx == 0 && IsAssignmentOperator, - /*ForceRValue=*/false); + /*ForceRValue=*/false, + /*InOverloadResolution=*/false); } if (Candidate.Conversions[ArgIdx].ConversionKind == ImplicitConversionSequence::BadConversion) {