forked from OSchip/llvm-project
Drop the Diagnose parameter from Sema::PerformImplicitConversion again and instead use TryImplicitConversion in CheckSingleAssignmentConstraints when that function is in no-diagnostics mode.
llvm-svn: 142143
This commit is contained in:
parent
47fa9a346d
commit
cc152641c0
|
@ -5652,13 +5652,11 @@ public:
|
|||
|
||||
ExprResult PerformImplicitConversion(Expr *From, QualType ToType,
|
||||
AssignmentAction Action,
|
||||
bool AllowExplicit = false,
|
||||
bool Diagnose = true);
|
||||
bool AllowExplicit = false);
|
||||
ExprResult PerformImplicitConversion(Expr *From, QualType ToType,
|
||||
AssignmentAction Action,
|
||||
bool AllowExplicit,
|
||||
ImplicitConversionSequence& ICS,
|
||||
bool Diagnose = true);
|
||||
ImplicitConversionSequence& ICS);
|
||||
ExprResult PerformImplicitConversion(Expr *From, QualType ToType,
|
||||
const ImplicitConversionSequence& ICS,
|
||||
AssignmentAction Action,
|
||||
|
|
|
@ -5540,9 +5540,23 @@ Sema::CheckSingleAssignmentConstraints(QualType LHSType, ExprResult &RHS,
|
|||
// C++ 5.17p3: If the left operand is not of class type, the
|
||||
// expression is implicitly converted (C++ 4) to the
|
||||
// cv-unqualified type of the left operand.
|
||||
ExprResult Res = PerformImplicitConversion(RHS.get(),
|
||||
LHSType.getUnqualifiedType(),
|
||||
AA_Assigning, Diagnose);
|
||||
ExprResult Res;
|
||||
if (Diagnose) {
|
||||
Res = PerformImplicitConversion(RHS.get(), LHSType.getUnqualifiedType(),
|
||||
AA_Assigning);
|
||||
} else {
|
||||
ImplicitConversionSequence ICS =
|
||||
TryImplicitConversion(RHS.get(), LHSType.getUnqualifiedType(),
|
||||
/*SuppressUserConversions=*/false,
|
||||
/*AllowExplicit=*/false,
|
||||
/*InOverloadResolution=*/false,
|
||||
/*CStyle=*/false,
|
||||
/*AllowObjCWritebackConversion=*/false);
|
||||
if (ICS.isFailure())
|
||||
return Incompatible;
|
||||
Res = PerformImplicitConversion(RHS.get(), LHSType.getUnqualifiedType(),
|
||||
ICS, AA_Assigning);
|
||||
}
|
||||
if (Res.isInvalid())
|
||||
return Incompatible;
|
||||
Sema::AssignConvertType result = Compatible;
|
||||
|
|
|
@ -912,18 +912,15 @@ Sema::TryImplicitConversion(Expr *From, QualType ToType,
|
|||
/// explicit user-defined conversions are permitted.
|
||||
ExprResult
|
||||
Sema::PerformImplicitConversion(Expr *From, QualType ToType,
|
||||
AssignmentAction Action, bool AllowExplicit,
|
||||
bool Diagnose) {
|
||||
AssignmentAction Action, bool AllowExplicit) {
|
||||
ImplicitConversionSequence ICS;
|
||||
return PerformImplicitConversion(From, ToType, Action, AllowExplicit, ICS,
|
||||
Diagnose);
|
||||
return PerformImplicitConversion(From, ToType, Action, AllowExplicit, ICS);
|
||||
}
|
||||
|
||||
ExprResult
|
||||
Sema::PerformImplicitConversion(Expr *From, QualType ToType,
|
||||
AssignmentAction Action, bool AllowExplicit,
|
||||
ImplicitConversionSequence& ICS,
|
||||
bool Diagnose) {
|
||||
ImplicitConversionSequence& ICS) {
|
||||
// Objective-C ARC: Determine whether we will allow the writeback conversion.
|
||||
bool AllowObjCWritebackConversion
|
||||
= getLangOptions().ObjCAutoRefCount &&
|
||||
|
@ -935,8 +932,6 @@ Sema::PerformImplicitConversion(Expr *From, QualType ToType,
|
|||
/*InOverloadResolution=*/false,
|
||||
/*CStyle=*/false,
|
||||
AllowObjCWritebackConversion);
|
||||
if (!Diagnose && ICS.isFailure())
|
||||
return ExprError();
|
||||
return PerformImplicitConversion(From, ToType, ICS, Action);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue