diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp
index 3a37f2d..39ef799 100644
--- a/lib/CodeGen/CGExpr.cpp
+++ b/lib/CodeGen/CGExpr.cpp
@@ -993,12 +993,10 @@
     if (PTy->getPointeeType()->isUnionType())
       isUnion = true;
     CVRQualifiers = PTy->getPointeeType().getCVRQualifiers();
-    QualType ClassTy = BaseExpr->getType();
-    ClassTy = ClassTy->getPointeeType();
-    if (CXXRecordDecl *ClassDecl =
-        dyn_cast<CXXRecordDecl>(ClassTy->getAsRecordType()->getDecl())) {
+    if (const CXXRecordDecl *ClassDecl = 
+          BaseExpr->getType()->getCXXRecordDeclForPointerType()) {
       FieldDecl *Field = dyn_cast<FieldDecl>(E->getMemberDecl());
-      if (CXXRecordDecl *BaseClassDecl = 
+      if (const CXXRecordDecl *BaseClassDecl = 
           dyn_cast<CXXRecordDecl>(Field->getDeclContext()))
         BaseValue = AddressCXXOfBaseClass(BaseValue, ClassDecl, BaseClassDecl);
     }
@@ -1017,14 +1015,15 @@
       isNonGC = true;
     // FIXME: this isn't right for bitfields.
     BaseValue = BaseLV.getAddress();
-    if (BaseExpr->getType()->isUnionType())
+    QualType BaseTy = BaseExpr->getType();
+    if (BaseTy->isUnionType())
       isUnion = true;
-    CVRQualifiers = BaseExpr->getType().getCVRQualifiers();
-    if (CXXRecordDecl *ClassDecl =
+    CVRQualifiers = BaseTy.getCVRQualifiers();
+    if (const CXXRecordDecl *ClassDecl =
           dyn_cast<CXXRecordDecl>(
-                        BaseExpr->getType()->getAsRecordType()->getDecl())) {
+                        BaseTy->getAsRecordType()->getDecl())) {
         FieldDecl *Field = dyn_cast<FieldDecl>(E->getMemberDecl());
-        if (CXXRecordDecl *BaseClassDecl = 
+        if (const CXXRecordDecl *BaseClassDecl = 
             dyn_cast<CXXRecordDecl>(Field->getDeclContext()))
             BaseValue = 
               AddressCXXOfBaseClass(BaseValue, ClassDecl, BaseClassDecl);
diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp
index 5ded216..d780824 100644
--- a/lib/CodeGen/CGExprScalar.cpp
+++ b/lib/CodeGen/CGExprScalar.cpp
@@ -442,18 +442,11 @@
     // The source value may be an integer, or a pointer.
     if (isa<llvm::PointerType>(Src->getType())) {
       // Some heavy lifting for derived to base conversion.
-      if (const PointerType *PT = SrcType->getAsPointerType()) {
-        QualType SrcClassTy = PT->getPointeeType();
-        if (const RecordType *RT = SrcClassTy->getAsRecordType())
-          if (CXXRecordDecl *ClassDecl =
-              dyn_cast<CXXRecordDecl>(RT->getDecl())) {
-            QualType DstClassType = DstType->getPointeeType();
-            if (const RecordType *DRT = DstClassType->getAsRecordType())
-              if (CXXRecordDecl *BaseClassDecl = 
-                    dyn_cast<CXXRecordDecl>(DRT->getDecl()))
-                Src = CGF.AddressCXXOfBaseClass(Src, ClassDecl, BaseClassDecl);
-          }
-      }
+      if (const CXXRecordDecl *ClassDecl = 
+            SrcType->getCXXRecordDeclForPointerType())
+        if (const CXXRecordDecl *BaseClassDecl = 
+              DstType->getCXXRecordDeclForPointerType())
+          Src = CGF.AddressCXXOfBaseClass(Src, ClassDecl, BaseClassDecl);
       return Builder.CreateBitCast(Src, DstTy, "conv");
     }
     assert(SrcType->isIntegerType() && "Not ptr->ptr or int->ptr conversion?");
