Remove unnecessary distinction between Ref_Compatible and
Ref_Compatible_With_Added_Qualification. We always treated these two values the same way. llvm-svn: 284895
This commit is contained in:
parent
566b34d9b7
commit
ce76629905
|
@ -8992,13 +8992,7 @@ public:
|
|||
/// that their unqualified forms (T1 and T2) are either the same
|
||||
/// or T1 is a base class of T2.
|
||||
Ref_Related,
|
||||
/// Ref_Compatible_With_Added_Qualification - The two types are
|
||||
/// reference-compatible with added qualification, meaning that
|
||||
/// they are reference-compatible and the qualifiers on T1 (cv1)
|
||||
/// are greater than the qualifiers on T2 (cv2).
|
||||
Ref_Compatible_With_Added_Qualification,
|
||||
/// Ref_Compatible - The two types are reference-compatible and
|
||||
/// have equivalent qualifiers (cv1 == cv2).
|
||||
/// Ref_Compatible - The two types are reference-compatible.
|
||||
Ref_Compatible
|
||||
};
|
||||
|
||||
|
|
|
@ -1165,7 +1165,7 @@ TryLValueToRValueCast(Sema &Self, Expr *SrcExpr, QualType DestType,
|
|||
ToType, FromType,
|
||||
DerivedToBase, ObjCConversion,
|
||||
ObjCLifetimeConversion)
|
||||
< Sema::Ref_Compatible_With_Added_Qualification) {
|
||||
!= Sema::Ref_Compatible) {
|
||||
if (CStyle)
|
||||
return TC_NotApplicable;
|
||||
msg = diag::err_bad_lvalue_to_rvalue_cast;
|
||||
|
|
|
@ -4263,7 +4263,7 @@ static void TryReferenceInitializationCore(Sema &S,
|
|||
bool T1Function = T1->isFunctionType();
|
||||
if (isLValueRef || T1Function) {
|
||||
if (InitCategory.isLValue() &&
|
||||
(RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification ||
|
||||
(RefRelationship == Sema::Ref_Compatible ||
|
||||
(Kind.isCStyleOrFunctionalCast() &&
|
||||
RefRelationship == Sema::Ref_Related))) {
|
||||
// - is an lvalue (but is not a bit-field), and "cv1 T1" is
|
||||
|
@ -4336,7 +4336,7 @@ static void TryReferenceInitializationCore(Sema &S,
|
|||
// "cv1 T1" is reference-compatible with "cv2 T2"
|
||||
// Note: functions are handled below.
|
||||
if (!T1Function &&
|
||||
(RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification ||
|
||||
(RefRelationship == Sema::Ref_Compatible ||
|
||||
(Kind.isCStyleOrFunctionalCast() &&
|
||||
RefRelationship == Sema::Ref_Related)) &&
|
||||
(InitCategory.isXValue() ||
|
||||
|
@ -4393,8 +4393,7 @@ static void TryReferenceInitializationCore(Sema &S,
|
|||
return;
|
||||
}
|
||||
|
||||
if ((RefRelationship == Sema::Ref_Compatible ||
|
||||
RefRelationship == Sema::Ref_Compatible_With_Added_Qualification) &&
|
||||
if (RefRelationship == Sema::Ref_Compatible &&
|
||||
isRValueRef && InitCategory.isLValue()) {
|
||||
Sequence.SetFailed(
|
||||
InitializationSequence::FK_RValueReferenceBindingToLValue);
|
||||
|
|
|
@ -4220,10 +4220,8 @@ Sema::CompareReferenceRelationship(SourceLocation Loc,
|
|||
T1Quals.removeUnaligned();
|
||||
T2Quals.removeUnaligned();
|
||||
|
||||
if (T1Quals == T2Quals)
|
||||
if (T1Quals.compatiblyIncludes(T2Quals))
|
||||
return Ref_Compatible;
|
||||
else if (T1Quals.compatiblyIncludes(T2Quals))
|
||||
return Ref_Compatible_With_Added_Qualification;
|
||||
else
|
||||
return Ref_Related;
|
||||
}
|
||||
|
@ -4401,8 +4399,7 @@ TryReferenceInit(Sema &S, Expr *Init, QualType DeclType,
|
|||
// reference-compatible with "cv2 T2," or
|
||||
//
|
||||
// Per C++ [over.ics.ref]p4, we don't check the bit-field property here.
|
||||
if (InitCategory.isLValue() &&
|
||||
RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification) {
|
||||
if (InitCategory.isLValue() && RefRelationship == Sema::Ref_Compatible) {
|
||||
// C++ [over.ics.ref]p1:
|
||||
// When a parameter of reference type binds directly (8.5.3)
|
||||
// to an argument expression, the implicit conversion sequence
|
||||
|
@ -4464,10 +4461,10 @@ TryReferenceInit(Sema &S, Expr *Init, QualType DeclType,
|
|||
//
|
||||
// -- is an xvalue, class prvalue, array prvalue or function
|
||||
// lvalue and "cv1 T1" is reference-compatible with "cv2 T2", or
|
||||
if (RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification &&
|
||||
if (RefRelationship == Sema::Ref_Compatible &&
|
||||
(InitCategory.isXValue() ||
|
||||
(InitCategory.isPRValue() && (T2->isRecordType() || T2->isArrayType())) ||
|
||||
(InitCategory.isLValue() && T2->isFunctionType()))) {
|
||||
(InitCategory.isPRValue() && (T2->isRecordType() || T2->isArrayType())) ||
|
||||
(InitCategory.isLValue() && T2->isFunctionType()))) {
|
||||
ICS.setStandard();
|
||||
ICS.Standard.First = ICK_Identity;
|
||||
ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base
|
||||
|
|
Loading…
Reference in New Issue