[llvm] [CoroSplit] Fix infinite loop in CoroSplit (PR #185599)

via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 10 02:07:14 PDT 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-llvm-transforms

Author: Felipe de Azevedo Piovezan (felipepiovezan)

<details>
<summary>Changes</summary>

Optimized code may generate an uncoditional branch to the same BB.

---
Full diff: https://github.com/llvm/llvm-project/pull/185599.diff


1 Files Affected:

- (modified) llvm/lib/Transforms/Coroutines/CoroSplit.cpp (+2-1) 


``````````diff
diff --git a/llvm/lib/Transforms/Coroutines/CoroSplit.cpp b/llvm/lib/Transforms/Coroutines/CoroSplit.cpp
index 587f581ded8d5..0430d50f642f5 100644
--- a/llvm/lib/Transforms/Coroutines/CoroSplit.cpp
+++ b/llvm/lib/Transforms/Coroutines/CoroSplit.cpp
@@ -819,7 +819,8 @@ static void updateScopeLine(Instruction *ActiveSuspend,
   // Corosplit splits the BB around ActiveSuspend, so the meaningful
   // instructions are not in the same BB.
   while (auto *Branch = dyn_cast_or_null<BranchInst>(Successor)) {
-    if (!Branch->isUnconditional())
+    if (!Branch->isUnconditional() ||
+        Branch->getSuccessor(0) == Branch->getParent())
       break;
     Successor = Branch->getSuccessor(0)->getFirstNonPHIOrDbg();
   }

``````````

</details>


https://github.com/llvm/llvm-project/pull/185599


More information about the llvm-commits mailing list