diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Sema/SemaExpr.cpp | 30 |
1 files changed, 14 insertions, 16 deletions
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 7e82df4437..fdaf9d82da 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -1031,23 +1031,21 @@ Sema::PerformObjectMemberConversion(Expr *&From, NamedDecl *Member) { dyn_cast<CXXRecordDecl>(FD->getDeclContext())) { QualType DestType = Context.getCanonicalType(Context.getTypeDeclType(RD)); - if (!DestType->isDependentType() && - !From->getType()->isDependentType()) { - QualType FromRecordType = From->getType(); - QualType DestRecordType = DestType; - if (FromRecordType->getAsPointerType()) { - DestType = Context.getPointerType(DestType); - FromRecordType = FromRecordType->getPointeeType(); - } - if (IsDerivedFrom(FromRecordType, DestRecordType) && - CheckDerivedToBaseConversion(FromRecordType, - DestRecordType, - From->getSourceRange().getBegin(), - From->getSourceRange())) - return true; - - ImpCastExprToType(From, DestType, /*isLvalue=*/true); + if (DestType->isDependentType() || From->getType()->isDependentType()) + return false; + QualType FromRecordType = From->getType(); + QualType DestRecordType = DestType; + if (FromRecordType->getAsPointerType()) { + DestType = Context.getPointerType(DestType); + FromRecordType = FromRecordType->getPointeeType(); } + if (!Context.hasSameUnqualifiedType(FromRecordType, DestRecordType) && + CheckDerivedToBaseConversion(FromRecordType, + DestRecordType, + From->getSourceRange().getBegin(), + From->getSourceRange())) + return true; + ImpCastExprToType(From, DestType, /*isLvalue=*/true); } return false; } |