More cleanup of data member access and then some.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77351 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp
index b0e091b..ab0f9e9 100644
--- a/lib/CodeGen/CGExpr.cpp
+++ b/lib/CodeGen/CGExpr.cpp
@@ -993,15 +993,14 @@
if (PTy->getPointeeType()->isUnionType())
isUnion = true;
CVRQualifiers = PTy->getPointeeType().getCVRQualifiers();
- if (CXXThisExpr *ThisExpr = dyn_cast<CXXThisExpr>(BaseExpr)) {
- QualType ClassTy = ThisExpr->getType();
- ClassTy = ClassTy->getPointeeType();
- CXXRecordDecl *ClassDecl =
- cast<CXXRecordDecl>(ClassTy->getAsRecordType()->getDecl());
+ QualType ClassTy = BaseExpr->getType();
+ ClassTy = ClassTy->getPointeeType();
+ if (CXXRecordDecl *ClassDecl =
+ dyn_cast<CXXRecordDecl>(ClassTy->getAsRecordType()->getDecl())) {
FieldDecl *Field = dyn_cast<FieldDecl>(E->getMemberDecl());
- CXXRecordDecl *BaseClassDecl =
- cast<CXXRecordDecl>(Field->getDeclContext());
- BaseValue = AddressCXXOfBaseClass(BaseValue, ClassDecl, BaseClassDecl);
+ if (CXXRecordDecl *BaseClassDecl =
+ dyn_cast<CXXRecordDecl>(Field->getDeclContext()))
+ BaseValue = AddressCXXOfBaseClass(BaseValue, ClassDecl, BaseClassDecl);
}
} else if (isa<ObjCPropertyRefExpr>(BaseExpr) ||
isa<ObjCKVCRefExpr>(BaseExpr)) {
@@ -1021,6 +1020,15 @@
if (BaseExpr->getType()->isUnionType())
isUnion = true;
CVRQualifiers = BaseExpr->getType().getCVRQualifiers();
+ if (CXXRecordDecl *ClassDecl =
+ dyn_cast<CXXRecordDecl>(
+ BaseExpr->getType()->getAsRecordType()->getDecl())) {
+ FieldDecl *Field = dyn_cast<FieldDecl>(E->getMemberDecl());
+ if (CXXRecordDecl *BaseClassDecl =
+ dyn_cast<CXXRecordDecl>(Field->getDeclContext()))
+ BaseValue =
+ AddressCXXOfBaseClass(BaseValue, ClassDecl, BaseClassDecl);
+ }
}
FieldDecl *Field = dyn_cast<FieldDecl>(E->getMemberDecl());