commit ae80e4f7caa6be31f83ae6a94a26ab3b60a5b064
parent 2b64b75c845d0491c7a701e44485d2856eeb686d
Author: Quentin Carbonneaux <quentin@c9x.me>
Date: Thu, 17 Aug 2017 04:47:10 -0400
fix bug in jumps simplification
In presence of jump loops, the algorithm would
create cycles in the disjoint-set data structure.
This caused infinite recursion and stack overflows.
Diffstat:
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/cfg.c b/cfg.c
@@ -304,8 +304,11 @@ simpljmp(Fn *fn)
for (b=fn->start; b; b=b->link) {
assert(!b->phi);
if (b->nins == 0)
- if (b->jmp.type == Jjmp)
- uf[b->id] = b->s1;
+ if (b->jmp.type == Jjmp) {
+ uffind(&b->s1, uf);
+ if (b->s1 != b)
+ uf[b->id] = b->s1;
+ }
}
for (b=fn->start; b; b=b->link) {
if (b->s1)