Don't use potentially invalidated iterator
authorStephan Bergmann <sbergman@redhat.com>
Thu, 31 Mar 2016 15:42:01 +0000 (15:42 +0000)
committerStephan Bergmann <sbergman@redhat.com>
Thu, 31 Mar 2016 15:42:01 +0000 (15:42 +0000)
If the lhs is evaluated before the rhs, FuncletI's operator-> can trigger the

  assert(isHandleInSync() && "invalid iterator access!");

at include/llvm/ADT/DenseMap.h:1061.  (Happens e.g. when compiled with GCC 6.)

Differential Revision: http://reviews.llvm.org/D18440

llvm-svn: 265024

llvm/lib/CodeGen/BranchFolding.cpp

index 16d4e00..0a6e88e 100644 (file)
@@ -453,8 +453,10 @@ MachineBasicBlock *BranchFolder::SplitMBBAt(MachineBasicBlock &CurMBB,
 
   // Add the new block to the funclet.
   const auto &FuncletI = FuncletMembership.find(&CurMBB);
-  if (FuncletI != FuncletMembership.end())
-    FuncletMembership[NewMBB] = FuncletI->second;
+  if (FuncletI != FuncletMembership.end()) {
+    auto n = FuncletI->second;
+    FuncletMembership[NewMBB] = n;
+  }
 
   return NewMBB;
 }