summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/MicrosoftCXXABI.cpp
diff options
context:
space:
mode:
authorReid Kleckner <reid@kleckner.net>2013-10-15 01:18:02 +0000
committerReid Kleckner <reid@kleckner.net>2013-10-15 01:18:02 +0000
commitaec4409174d8704caaa6fada75881ea482b1c2e1 (patch)
tree7306775141f6e2ce5976742a9360356fd6d9563b /clang/lib/CodeGen/MicrosoftCXXABI.cpp
parentd98c99fd0182174a0bea0a6b0d2b671c2e5f20a7 (diff)
downloadbcm5719-llvm-aec4409174d8704caaa6fada75881ea482b1c2e1.tar.gz
bcm5719-llvm-aec4409174d8704caaa6fada75881ea482b1c2e1.zip
[ms-cxxabi] Fix assert in unspecified inheritance memptr emission
If a class is using the unspecified inheritance model for member pointers and later we find the class is defined to use single inheritance, zero out the vbptr offset field of the member pointer when it is formed. llvm-svn: 192664
Diffstat (limited to 'clang/lib/CodeGen/MicrosoftCXXABI.cpp')
-rw-r--r--clang/lib/CodeGen/MicrosoftCXXABI.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/MicrosoftCXXABI.cpp b/clang/lib/CodeGen/MicrosoftCXXABI.cpp
index fd677712e78..9d59160cec8 100644
--- a/clang/lib/CodeGen/MicrosoftCXXABI.cpp
+++ b/clang/lib/CodeGen/MicrosoftCXXABI.cpp
@@ -1156,8 +1156,10 @@ MicrosoftCXXABI::EmitFullMemberPointer(llvm::Constant *FirstField,
CGM.IntTy, NonVirtualBaseAdjustment.getQuantity()));
if (hasVBPtrOffsetField(Inheritance)) {
- fields.push_back(llvm::ConstantInt::get(
- CGM.IntTy, GetVBPtrOffsetFromBases(RD).getQuantity()));
+ CharUnits Offs = CharUnits::Zero();
+ if (RD->getNumVBases())
+ Offs = GetVBPtrOffsetFromBases(RD);
+ fields.push_back(llvm::ConstantInt::get(CGM.IntTy, Offs.getQuantity()));
}
// The rest of the fields are adjusted by conversions to a more derived class.
OpenPOWER on IntegriCloud