diff options
author | John McCall <rjmccall@apple.com> | 2010-08-22 00:05:51 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2010-08-22 00:05:51 +0000 |
commit | 93d557bc1867b7d7b102f87290194b4be7932c92 (patch) | |
tree | 4963b0e57fabfe78fa13c8b230b510bd28d65fa4 /lib/CodeGen/CGCXX.cpp | |
parent | ee79a4c30e5d1c5285551c9a25b8ec6d45d46aa7 (diff) |
Extract calls to method pointers out as an ABI routine.
No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@111752 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGCXX.cpp')
-rw-r--r-- | lib/CodeGen/CGCXX.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/CodeGen/CGCXX.cpp b/lib/CodeGen/CGCXX.cpp index edfbe0e72e..7ae83f44b4 100644 --- a/lib/CodeGen/CGCXX.cpp +++ b/lib/CodeGen/CGCXX.cpp @@ -357,3 +357,25 @@ CodeGenFunction::BuildVirtualCall(const CXXDestructorDecl *DD, CXXDtorType Type, } CGCXXABI::~CGCXXABI() {} + +llvm::Value *CGCXXABI::EmitLoadOfMemberFunctionPointer(CodeGenFunction &CGF, + llvm::Value *&This, + llvm::Value *MemPtr, + const MemberPointerType *MPT) { + Diagnostic &Diags = CGF.CGM.getDiags(); + unsigned DiagID = + Diags.getCustomDiagID(Diagnostic::Error, + "cannot yet compile member pointer calls in this ABI"); + Diags.Report(CGF.getContext().getFullLoc(CGF.CurCodeDecl->getLocation()), + DiagID); + + const FunctionProtoType *FPT = + MPT->getPointeeType()->getAs<FunctionProtoType>(); + const CXXRecordDecl *RD = + cast<CXXRecordDecl>(MPT->getClass()->getAs<RecordType>()->getDecl()); + const llvm::FunctionType *FTy = + CGF.CGM.getTypes().GetFunctionType( + CGF.CGM.getTypes().getFunctionInfo(RD, FPT), + FPT->isVariadic()); + return llvm::Constant::getNullValue(FTy->getPointerTo()); +} |