aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CodeGenTypes.cpp
diff options
context:
space:
mode:
authorJohn McCall <rjmccall@apple.com>2010-08-23 01:21:21 +0000
committerJohn McCall <rjmccall@apple.com>2010-08-23 01:21:21 +0000
commit0bab0cdab751248ca389a5592bcb70eac5d39260 (patch)
treec94ff2becd4c318148c7ece7e236a6482de526a7 /lib/CodeGen/CodeGenTypes.cpp
parent5172ed92b42f0bc6a022542a08f7b18af821bcb3 (diff)
Abstract out everything having to do with member pointers into the ABI
class; they should just be completely opaque throughout IR gen now, although I haven't really audited that. Fix a bug apparently inherited from gcc-4.2 where we failed to null-check member data pointers when performing derived-to-base or base-to-derived conversions on them. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@111789 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CodeGenTypes.cpp')
-rw-r--r--lib/CodeGen/CodeGenTypes.cpp12
1 files changed, 1 insertions, 11 deletions
diff --git a/lib/CodeGen/CodeGenTypes.cpp b/lib/CodeGen/CodeGenTypes.cpp
index 1402af14a5..5ab65c5779 100644
--- a/lib/CodeGen/CodeGenTypes.cpp
+++ b/lib/CodeGen/CodeGenTypes.cpp
@@ -402,17 +402,7 @@ const llvm::Type *CodeGenTypes::ConvertNewType(QualType T) {
}
case Type::MemberPointer: {
- // FIXME: This is ABI dependent. We use the Itanium C++ ABI.
- // http://www.codesourcery.com/public/cxx-abi/abi.html#member-pointers
- // If we ever want to support other ABIs this needs to be abstracted.
-
- QualType ETy = cast<MemberPointerType>(Ty).getPointeeType();
- const llvm::Type *PtrDiffTy =
- ConvertTypeRecursive(Context.getPointerDiffType());
- if (ETy->isFunctionType())
- return llvm::StructType::get(TheModule.getContext(), PtrDiffTy, PtrDiffTy,
- NULL);
- return PtrDiffTy;
+ return getCXXABI().ConvertMemberPointerType(cast<MemberPointerType>(&Ty));
}
}