1
0
mirror of https://github.com/c64scene-ar/llvm-6502.git synced 2025-03-19 19:31:50 +00:00

Collapsing node if variable length struct with final field of length zero

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24621 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Sumant Kowshik 2005-12-06 18:04:30 +00:00
parent 14d1d22f37
commit 8a3802d5b2

@ -434,7 +434,24 @@ void GraphBuilder::visitGetElementPtrInst(User &GEP) {
// Add in the offset calculated...
Value.setOffset(Value.getOffset()+Offset);
// Value is now the pointer we want to GEP to be...
// Check the offset
DSNode *N = Value.getNode();
if (N &&
!N->isNodeCompletelyFolded() &&
(N->getSize() != 0 || Offset != 0) &&
!N->isForwarding()) {
if ((Offset >= N->getSize()) || int(Offset) < 0) {
// Accessing offsets out of node size range
// This is seen in the "magic" struct in named (from bind), where the
// fourth field is an array of length 0, presumably used to create struct
// instances of different sizes
// Collapse the node since its size is now variable
N->foldNodeCompletely();
}
}
// Value is now the pointer we want to GEP to be...
setDestTo(GEP, Value);
}