Abstract more member-pointerness out.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@111771 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGExprAgg.cpp b/lib/CodeGen/CGExprAgg.cpp
index 7b198bc..1f8964d 100644
--- a/lib/CodeGen/CGExprAgg.cpp
+++ b/lib/CodeGen/CGExprAgg.cpp
@@ -293,15 +293,9 @@
     if (E->getSubExpr()->getType()->isNullPtrType())
       Visit(E->getSubExpr());
 
-    const llvm::Type *PtrDiffTy = 
-      CGF.ConvertType(CGF.getContext().getPointerDiffType());
-
-    llvm::Value *NullValue = llvm::Constant::getNullValue(PtrDiffTy);
-    llvm::Value *Ptr = Builder.CreateStructGEP(DestPtr, 0, "ptr");
-    Builder.CreateStore(NullValue, Ptr, VolatileDest);
-    
-    llvm::Value *Adj = Builder.CreateStructGEP(DestPtr, 1, "adj");
-    Builder.CreateStore(NullValue, Adj, VolatileDest);
+    CGF.CGM.getCXXABI().EmitNullMemberFunctionPointer(CGF,
+                                    E->getType()->getAs<MemberPointerType>(),
+                                                      DestPtr, VolatileDest);
 
     break;
   }
@@ -329,8 +323,8 @@
     // ABIs where an actual null check is thus required; fortunately,
     // the Itanium and ARM ABIs ignore the adjustment value when
     // considering null-ness.
-    CGF.CGM.getCXXABI().EmitMemberPointerConversion(CGF, E, Src,
-                                                    DestPtr, VolatileDest);
+    CGF.CGM.getCXXABI().EmitMemberFunctionPointerConversion(CGF, E, Src,
+                                                   DestPtr, VolatileDest);
     break;
   }
   }