From 3ff0bfcb86427ea33cd94fde1336dd6687fb5f99 Mon Sep 17 00:00:00 2001 From: lemon Date: Sat, 20 Dec 2025 20:22:12 +0100 Subject: rega: fix infinite loop when compiling infinite loop --- ir/regalloc.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'ir/regalloc.c') diff --git a/ir/regalloc.c b/ir/regalloc.c index e8eccfb..c1d925d 100644 --- a/ir/regalloc.c +++ b/ir/regalloc.c @@ -1218,11 +1218,14 @@ fini(struct rega *ra) bool delet = 1; for (int i = 0; i < blk->npred; ++i) { struct block *p = blkpred(blk, i); - if (p->s2 && !blk->s1) + if (p == blk || (p->s2 && !blk->s1)) delet = 0; } + startbbvisit(); for (int i = 0; i < blk->npred; ++i) { struct block *p = blkpred(blk, i); + if (wasvisited(p)) break; + markvisited(p); if (!p->s2 && !blk->s1) { /* simplify: * -- cgit v1.2.3