mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
Type sizes and fields offsets inside structs are unsigned. This is a highly
theoretical fix since it only matters for types with >= 2^63 bits (!) and also only matters if pointers have more than 64 bits, which is not supported anyway. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152831 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
45b5f88938
commit
f72e0ca715
@ -673,13 +673,11 @@ static bool accumulateGEPOffset(const TargetData &TD, GEPOperator *GEP,
|
||||
if (StructType *STy = dyn_cast<StructType>(*GTI)) {
|
||||
unsigned ElementIdx = OpC->getZExtValue();
|
||||
const StructLayout *SL = TD.getStructLayout(STy);
|
||||
Offset += APInt(IntPtrWidth, SL->getElementOffset(ElementIdx),
|
||||
/*isSigned=*/true);
|
||||
Offset += APInt(IntPtrWidth, SL->getElementOffset(ElementIdx));
|
||||
continue;
|
||||
}
|
||||
|
||||
APInt TypeSize(IntPtrWidth, TD.getTypeAllocSize(GTI.getIndexedType()),
|
||||
/*isSigned=*/true);
|
||||
APInt TypeSize(IntPtrWidth, TD.getTypeAllocSize(GTI.getIndexedType()));
|
||||
Offset += OpC->getValue().sextOrTrunc(IntPtrWidth) * TypeSize;
|
||||
}
|
||||
return true;
|
||||
|
Loading…
Reference in New Issue
Block a user