mirror of
https://github.com/RPCS3/llvm.git
synced 2025-04-17 05:20:32 +00:00
PrologEpilogInserter: Avoid an infinite loop when MinCSFrameIndex == 0
Before r269750 we did the comparisons in this loop in signed ints so that it DTRT when MinCSFrameIndex was 0. This was changed because it's now possible for MinCSFrameIndex to be UINT_MAX, but that introduced a bug when we were comparing `>= 0` - this is tautological in unsigned. Rework the comparisons here to avoid issues with unsigned wrapping. No test. I couldn't find a way to get any of the StackGrowsUp in-tree targets to reach the code that sets MinCSFrameIndex. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270492 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
866cdd590d
commit
b10244d092
@ -654,9 +654,9 @@ void PEI::calculateFrameObjectOffsets(MachineFunction &Fn) {
|
||||
DEBUG(dbgs() << "alloc FI(" << i << ") at SP[" << -Offset << "]\n");
|
||||
MFI->setObjectOffset(i, -Offset); // Set the computed offset
|
||||
}
|
||||
} else {
|
||||
unsigned MaxCSFI = MaxCSFrameIndex, MinCSFI = MinCSFrameIndex;
|
||||
for (unsigned i = MaxCSFI; i >= MinCSFI; --i) {
|
||||
} else if (MaxCSFrameIndex >= MinCSFrameIndex) {
|
||||
// Be careful about underflow in comparisons agains MinCSFrameIndex.
|
||||
for (unsigned i = MaxCSFrameIndex; i != MinCSFrameIndex - 1; --i) {
|
||||
unsigned Align = MFI->getObjectAlignment(i);
|
||||
// Adjust to alignment boundary
|
||||
Offset = alignTo(Offset, Align, Skew);
|
||||
|
Loading…
x
Reference in New Issue
Block a user