summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Utils/LoopSimplify.cpp
diff options
context:
space:
mode:
authorDavid Greene <greened@obbligato.org>2007-06-29 02:53:16 +0000
committerDavid Greene <greened@obbligato.org>2007-06-29 02:53:16 +0000
commit1e2a12019fa858a304fcebe0a8db1181e8d8d890 (patch)
tree66773c6eb4275fa231e2fcd1c0790eaae618860b /llvm/lib/Transforms/Utils/LoopSimplify.cpp
parent9468bfd9323df5ffc2f3e64cb95c726567474b5e (diff)
downloadbcm5719-llvm-1e2a12019fa858a304fcebe0a8db1181e8d8d890.tar.gz
bcm5719-llvm-1e2a12019fa858a304fcebe0a8db1181e8d8d890.zip
Fix reference to iterator invalidated by an erase operation. Uncovered
by _GLIBCXX_DEBUG. llvm-svn: 37796
Diffstat (limited to 'llvm/lib/Transforms/Utils/LoopSimplify.cpp')
-rw-r--r--llvm/lib/Transforms/Utils/LoopSimplify.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/llvm/lib/Transforms/Utils/LoopSimplify.cpp b/llvm/lib/Transforms/Utils/LoopSimplify.cpp
index 8a3e5251fd6..0a5de2b43ed 100644
--- a/llvm/lib/Transforms/Utils/LoopSimplify.cpp
+++ b/llvm/lib/Transforms/Utils/LoopSimplify.cpp
@@ -564,11 +564,12 @@ Loop *LoopSimplify::SeparateNestedLoop(Loop *L) {
// Scan all of the loop children of L, moving them to OuterLoop if they are
// not part of the inner loop.
- for (Loop::iterator I = L->begin(); I != L->end(); )
- if (BlocksInL.count((*I)->getHeader()))
+ const std::vector<Loop*> &SubLoops = L->getSubLoops();
+ for (size_t I = 0; I != SubLoops.size(); )
+ if (BlocksInL.count(SubLoops[I]->getHeader()))
++I; // Loop remains in L
else
- NewOuter->addChildLoop(L->removeChildLoop(I));
+ NewOuter->addChildLoop(L->removeChildLoop(SubLoops.begin() + I));
// Now that we know which blocks are in L and which need to be moved to
// OuterLoop, move any blocks that need it.
OpenPOWER on IntegriCloud