From ae80e4f7caa6be31f83ae6a94a26ab3b60a5b064 Mon Sep 17 00:00:00 2001 From: Quentin Carbonneaux Date: Thu, 17 Aug 2017 04:47:10 -0400 Subject: 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. --- cfg.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'cfg.c') diff --git a/cfg.c b/cfg.c index ea1ae12..b1c80c7 100644 --- 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) -- cgit 1.4.1