mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-25 03:30:37 +00:00
[PPC] Correct iterator bug in PPCTLSDynamicCall
Unfortunately, I can't reduce a small test case for this (although compiling mpfr-3.1.2 with -O2 -mcpu=a2 would fairly reliably trigger a crash), but the problem is fairly clear (at least once you know you're looking for one). If the TLS instruction being replaced was at the end of the block, we'd increment the iterator past it (so it would then point to MBB.end()), and then we'd increment it again as part of the for statement, thus overrunning the end of the list. Don't do that. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237974 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
66811d9817
commit
afcd3e68a8
@ -55,14 +55,16 @@ protected:
|
||||
bool Is64Bit = MBB.getParent()->getSubtarget<PPCSubtarget>().isPPC64();
|
||||
|
||||
for (MachineBasicBlock::iterator I = MBB.begin(), IE = MBB.end();
|
||||
I != IE; ++I) {
|
||||
I != IE;) {
|
||||
MachineInstr *MI = I;
|
||||
|
||||
if (MI->getOpcode() != PPC::ADDItlsgdLADDR &&
|
||||
MI->getOpcode() != PPC::ADDItlsldLADDR &&
|
||||
MI->getOpcode() != PPC::ADDItlsgdLADDR32 &&
|
||||
MI->getOpcode() != PPC::ADDItlsldLADDR32)
|
||||
MI->getOpcode() != PPC::ADDItlsldLADDR32) {
|
||||
++I;
|
||||
continue;
|
||||
}
|
||||
|
||||
DEBUG(dbgs() << "TLS Dynamic Call Fixup:\n " << *MI;);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user