@@ -689,10 +689,10 @@ class MicrosoftCXXABI : public CGCXXABI {
689689 llvm::Value *MemPtr,
690690 const MemberPointerType *MPT) override ;
691691
692- llvm::Value *
693- EmitMemberDataPointerAddress (CodeGenFunction &CGF, const Expr *E ,
694- Address Base, llvm::Value *MemPtr ,
695- const MemberPointerType *MPT ) override ;
692+ llvm::Value *EmitMemberDataPointerAddress (CodeGenFunction &CGF, const Expr *E,
693+ Address Base, llvm::Value *MemPtr ,
694+ const MemberPointerType *MPT ,
695+ bool IsInBounds ) override ;
696696
697697 llvm::Value *EmitNonNullMemberPointerConversion (
698698 const MemberPointerType *SrcTy, const MemberPointerType *DstTy,
@@ -3240,7 +3240,7 @@ llvm::Value *MicrosoftCXXABI::AdjustVirtualBase(
32403240
32413241llvm::Value *MicrosoftCXXABI::EmitMemberDataPointerAddress (
32423242 CodeGenFunction &CGF, const Expr *E, Address Base, llvm::Value *MemPtr,
3243- const MemberPointerType *MPT) {
3243+ const MemberPointerType *MPT, bool IsInBounds ) {
32443244 assert (MPT->isMemberDataPointer ());
32453245 CGBuilderTy &Builder = CGF.Builder ;
32463246 const CXXRecordDecl *RD = MPT->getMostRecentCXXRecordDecl ();
@@ -3270,12 +3270,9 @@ llvm::Value *MicrosoftCXXABI::EmitMemberDataPointerAddress(
32703270 }
32713271
32723272 // Apply the offset.
3273- // Specially, we don't add inbounds flags if the base pointer is a constant
3274- // null. This is a workaround for old-style container_of macros.
32753273 return Builder.CreateGEP (CGF.Int8Ty , Addr, FieldOffset, " memptr.offset" ,
3276- isa<llvm::ConstantPointerNull>(Addr)
3277- ? llvm::GEPNoWrapFlags::none ()
3278- : llvm::GEPNoWrapFlags::inBounds ());
3274+ IsInBounds ? llvm::GEPNoWrapFlags::inBounds ()
3275+ : llvm::GEPNoWrapFlags::none ());
32793276}
32803277
32813278llvm::Value *
0 commit comments