AArch64: avoid deleting the current iterator in a loop.
authorTim Northover <tnorthover@apple.com>
Fri, 8 Aug 2014 17:31:52 +0000 (17:31 +0000)
committerTim Northover <tnorthover@apple.com>
Fri, 8 Aug 2014 17:31:52 +0000 (17:31 +0000)
std::map invalidates the iterator to any element that gets deleted, which means
we can't increment it correctly afterwards. This was causing Darwin test
failures.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215233 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/AArch64/AArch64A57FPLoadBalancing.cpp

index 705679b570e64d4fcd7f5109ea63ffa8c60d6986..dc8cb32d199e0c3008496f60cc0b828e859900af 100644 (file)
@@ -671,13 +671,14 @@ maybeKillChain(MachineOperand &MO, unsigned Idx,
   } else if (MO.isRegMask()) {
 
     for (auto I = ActiveChains.begin(), E = ActiveChains.end();
-         I != E; ++I) {
+         I != E;) {
       if (MO.clobbersPhysReg(I->first)) {
         DEBUG(dbgs() << "Kill (regmask) seen for chain "
               << TRI->getName(I->first) << "\n");
         I->second->setKill(MI, Idx, /*Immutable=*/true);
-        ActiveChains.erase(I);
-      }
+        ActiveChains.erase(I++);
+      } else
+        ++I;
     }
 
   }