diff options
| author | Reid Kleckner <reid@kleckner.net> | 2013-12-05 22:44:07 +0000 |
|---|---|---|
| committer | Reid Kleckner <reid@kleckner.net> | 2013-12-05 22:44:07 +0000 |
| commit | ae9451218f27a997a3c2724b6cd575be7cf47304 (patch) | |
| tree | 02474aac459cacdc767c929bcd95204c71f3ff18 /clang/lib | |
| parent | 01cfa94212a1e352145319554047aea3a637d709 (diff) | |
| download | bcm5719-llvm-ae9451218f27a997a3c2724b6cd575be7cf47304.tar.gz bcm5719-llvm-ae9451218f27a997a3c2724b6cd575be7cf47304.zip | |
[ms-cxxabi] bitcast to i8* to deref a data member pointer
This was causing us to miscompile
llvm::SymbolTableListTraits::getListOwner(), which uses data member
pointers.
llvm-svn: 196545
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/CodeGen/MicrosoftCXXABI.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/MicrosoftCXXABI.cpp b/clang/lib/CodeGen/MicrosoftCXXABI.cpp index 6a45dba9975..044e572ed4a 100644 --- a/clang/lib/CodeGen/MicrosoftCXXABI.cpp +++ b/clang/lib/CodeGen/MicrosoftCXXABI.cpp @@ -1691,6 +1691,11 @@ MicrosoftCXXABI::EmitMemberDataPointerAddress(CodeGenFunction &CGF, Base = AdjustVirtualBase(CGF, RD, Base, VirtualBaseAdjustmentOffset, VBPtrOffset); } + + // Cast to char*. + Base = Builder.CreateBitCast(Base, Builder.getInt8Ty()->getPointerTo(AS)); + + // Apply the offset, which we assume is non-null. llvm::Value *Addr = Builder.CreateInBoundsGEP(Base, FieldOffset, "memptr.offset"); |

