summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGExprConstant.cpp
diff options
context:
space:
mode:
authorJohn McCall <rjmccall@apple.com>2010-08-22 06:43:33 +0000
committerJohn McCall <rjmccall@apple.com>2010-08-22 06:43:33 +0000
commit1c456c89dc9792e5dc50ccdfc0b738c888de8ca4 (patch)
tree57609fbd3ebf83ce657ede53bbbd2a0476d8041e /clang/lib/CodeGen/CGExprConstant.cpp
parent84fa510aa9ee3ee97ded906fe4635c2952596fe9 (diff)
downloadbcm5719-llvm-1c456c89dc9792e5dc50ccdfc0b738c888de8ca4.tar.gz
bcm5719-llvm-1c456c89dc9792e5dc50ccdfc0b738c888de8ca4.zip
Abstract out member-pointer creation. I'm really unhappy about the current
duplication between the constant and non-constant paths in all of this. Implement ARM ABI semantics for member pointer constants and conversion. llvm-svn: 111772
Diffstat (limited to 'clang/lib/CodeGen/CGExprConstant.cpp')
-rw-r--r--clang/lib/CodeGen/CGExprConstant.cpp17
1 files changed, 1 insertions, 16 deletions
diff --git a/clang/lib/CodeGen/CGExprConstant.cpp b/clang/lib/CodeGen/CGExprConstant.cpp
index e72e7fd1d1c..e0335b6559b 100644
--- a/clang/lib/CodeGen/CGExprConstant.cpp
+++ b/clang/lib/CodeGen/CGExprConstant.cpp
@@ -455,22 +455,7 @@ public:
}
llvm::Constant *EmitMemberFunctionPointer(CXXMethodDecl *MD) {
- assert(MD->isInstance() && "Member function must not be static!");
-
- MD = MD->getCanonicalDecl();
-
- const llvm::Type *PtrDiffTy =
- CGM.getTypes().ConvertType(CGM.getContext().getPointerDiffType());
-
- llvm::Constant *Values[2];
-
- Values[0] = CGM.GetCXXMemberFunctionPointerValue(MD);
-
- // The adjustment will always be 0.
- Values[1] = llvm::ConstantInt::get(PtrDiffTy, 0);
-
- return llvm::ConstantStruct::get(CGM.getLLVMContext(),
- Values, 2, /*Packed=*/false);
+ return CGM.getCXXABI().EmitMemberFunctionPointer(MD);
}
llvm::Constant *VisitUnaryAddrOf(UnaryOperator *E) {
OpenPOWER on IntegriCloud