Author: Nikita Popov Date: 2025-12-16T09:48:38+01:00 New Revision: 22f33f9fd5686228f9e20eed1da00b5cfd2d20c4
URL: https://github.com/llvm/llvm-project/commit/22f33f9fd5686228f9e20eed1da00b5cfd2d20c4 DIFF: https://github.com/llvm/llvm-project/commit/22f33f9fd5686228f9e20eed1da00b5cfd2d20c4.diff LOG: [MicrosoftCXXABI] Use getSigned() for signed vptr offset Added: Modified: clang/lib/CodeGen/MicrosoftCXXABI.cpp Removed: ################################################################################ diff --git a/clang/lib/CodeGen/MicrosoftCXXABI.cpp b/clang/lib/CodeGen/MicrosoftCXXABI.cpp index edefaff0ca1ac..484890062efa8 100644 --- a/clang/lib/CodeGen/MicrosoftCXXABI.cpp +++ b/clang/lib/CodeGen/MicrosoftCXXABI.cpp @@ -634,8 +634,9 @@ class MicrosoftCXXABI : public CGCXXABI { int32_t VBTableOffset, llvm::Value **VBPtr = nullptr) { assert(VBTableOffset % 4 == 0 && "should be byte offset into table of i32s"); - llvm::Value *VBPOffset = llvm::ConstantInt::get(CGM.IntTy, VBPtrOffset), - *VBTOffset = llvm::ConstantInt::get(CGM.IntTy, VBTableOffset); + llvm::Value *VBPOffset = + llvm::ConstantInt::getSigned(CGM.IntTy, VBPtrOffset); + llvm::Value *VBTOffset = llvm::ConstantInt::get(CGM.IntTy, VBTableOffset); return GetVBaseOffsetFromVBPtr(CGF, Base, VBPOffset, VBTOffset, VBPtr); } @@ -2237,7 +2238,8 @@ void MicrosoftCXXABI::emitVBTableDefinition(const VPtrInfo &VBT, // The offset from ObjectWithVPtr's vbptr to itself always leads. CharUnits VBPtrOffset = BaseLayout.getVBPtrOffset(); - Offsets[0] = llvm::ConstantInt::get(CGM.IntTy, -VBPtrOffset.getQuantity()); + Offsets[0] = + llvm::ConstantInt::getSigned(CGM.IntTy, -VBPtrOffset.getQuantity()); MicrosoftVTableContext &Context = CGM.getMicrosoftVTableContext(); for (const auto &I : ObjectWithVPtr->vbases()) { @@ -2254,7 +2256,8 @@ void MicrosoftCXXABI::emitVBTableDefinition(const VPtrInfo &VBT, unsigned VBIndex = Context.getVBTableIndex(ObjectWithVPtr, VBase); assert(Offsets[VBIndex] == nullptr && "The same vbindex seen twice?"); - Offsets[VBIndex] = llvm::ConstantInt::get(CGM.IntTy, Offset.getQuantity()); + Offsets[VBIndex] = + llvm::ConstantInt::getSigned(CGM.IntTy, Offset.getQuantity()); } assert(Offsets.size() == @@ -2912,8 +2915,8 @@ MicrosoftCXXABI::EmitFullMemberPointer(llvm::Constant *FirstField, fields.push_back(FirstField); if (inheritanceModelHasNVOffsetField(IsMemberFunction, Inheritance)) - fields.push_back(llvm::ConstantInt::get( - CGM.IntTy, NonVirtualBaseAdjustment.getQuantity())); + fields.push_back(llvm::ConstantInt::getSigned( + CGM.IntTy, NonVirtualBaseAdjustment.getQuantity())); if (inheritanceModelHasVBPtrOffsetField(Inheritance)) { CharUnits Offs = CharUnits::Zero(); @@ -3478,7 +3481,7 @@ llvm::Value *MicrosoftCXXABI::EmitNonNullMemberPointerConversion( // Set the VBPtrOffset to zero if the vbindex is zero. Otherwise, initialize // it to the offset of the vbptr. if (inheritanceModelHasVBPtrOffsetField(DstInheritance)) { - llvm::Value *DstVBPtrOffset = llvm::ConstantInt::get( + llvm::Value *DstVBPtrOffset = llvm::ConstantInt::getSigned( CGM.IntTy, getContext().getASTRecordLayout(DstRD).getVBPtrOffset().getQuantity()); VBPtrOffset = @@ -3912,7 +3915,7 @@ MSRTTIBuilder::getBaseClassDescriptor(const MSRTTIClass &Class) { ABI.getAddrOfRTTIDescriptor(Context.getCanonicalTagType(Class.RD))), llvm::ConstantInt::get(CGM.IntTy, Class.NumBases), llvm::ConstantInt::get(CGM.IntTy, Class.OffsetInVBase), - llvm::ConstantInt::get(CGM.IntTy, VBPtrOffset), + llvm::ConstantInt::getSigned(CGM.IntTy, VBPtrOffset), llvm::ConstantInt::get(CGM.IntTy, OffsetInVBTable), llvm::ConstantInt::get(CGM.IntTy, Class.Flags), ABI.getImageRelativeConstant( @@ -4302,13 +4305,13 @@ llvm::Constant *MicrosoftCXXABI::getCatchableType(QualType T, Flags |= 16; llvm::Constant *Fields[] = { - llvm::ConstantInt::get(CGM.IntTy, Flags), // Flags - TD, // TypeDescriptor - llvm::ConstantInt::get(CGM.IntTy, NVOffset), // NonVirtualAdjustment - llvm::ConstantInt::get(CGM.IntTy, VBPtrOffset), // OffsetToVBPtr - llvm::ConstantInt::get(CGM.IntTy, VBIndex), // VBTableIndex - llvm::ConstantInt::get(CGM.IntTy, Size), // Size - CopyCtor // CopyCtor + llvm::ConstantInt::get(CGM.IntTy, Flags), // Flags + TD, // TypeDescriptor + llvm::ConstantInt::get(CGM.IntTy, NVOffset), // NonVirtualAdjustment + llvm::ConstantInt::getSigned(CGM.IntTy, VBPtrOffset), // OffsetToVBPtr + llvm::ConstantInt::get(CGM.IntTy, VBIndex), // VBTableIndex + llvm::ConstantInt::get(CGM.IntTy, Size), // Size + CopyCtor // CopyCtor }; llvm::StructType *CTType = getCatchableTypeType(); auto *GV = new llvm::GlobalVariable( _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
