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.

llvm-svn: 270492
This commit is contained in:
Justin Bogner 2016-05-23 21:40:52 +00:00
parent 9873e2c467
commit 4a57bb5a3b
1 changed files with 3 additions and 3 deletions

View File

@ -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);