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:
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);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user