[LCG] Switch a weird do/while loop that actually couldn't fail its
authorChandler Carruth <chandlerc@gmail.com>
Thu, 24 Apr 2014 21:19:30 +0000 (21:19 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Thu, 24 Apr 2014 21:19:30 +0000 (21:19 +0000)
condition into an obviously infinite loop with an assert about the
degenerate condition. No functionality changed.

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

lib/Analysis/LazyCallGraph.cpp

index 3b727a5ee69d0dd7e027e8726ad9a84ced8ffd33..2e4fad3996e185c696872821612c66143fa1023f 100644 (file)
@@ -444,7 +444,7 @@ LazyCallGraph::SCC *LazyCallGraph::getNextSCCInPostOrder() {
     DFSStack.push_back(std::make_pair(&N, N.begin()));
   }
 
-  do {
+  for (;;) {
     Node *N = DFSStack.back().first;
     assert(N->DFSNumber != 0 && "We should always assign a DFS number "
                                 "before placing a node onto the stack.");
@@ -479,16 +479,15 @@ LazyCallGraph::SCC *LazyCallGraph::getNextSCCInPostOrder() {
       // Form the new SCC out of the top of the DFS stack.
       return formSCC(N, PendingSCCStack);
 
+    assert(!DFSStack.empty() && "We never found a viable root!");
+
     // At this point we know that N cannot ever be an SCC root. Its low-link
     // is not its dfs-number, and we've processed all of its children. It is
     // just sitting here waiting until some node further down the stack gets
     // low-link == dfs-number and pops it off as well. Move it to the pending
     // stack which is pulled into the next SCC to be formed.
     PendingSCCStack.push_back(N);
-  } while (!DFSStack.empty());
-
-  llvm_unreachable(
-      "We cannot reach the bottom of the stack without popping an SCC.");
+  }
 }
 
 char LazyCallGraphAnalysis::PassID;