From de5c81b1d14e29799e7ba957f5db1db1231207e2 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Wed, 3 Jan 2018 18:54:55 +0100 Subject: [PATCH] Fix add-prompt-control-flow-edges for terms with no continuation * module/language/cps/slot-allocation.scm (add-prompt-control-flow-edges): Allow for terms that don't continue, and add them to the minimal prompt control flow edges set. --- module/language/cps/slot-allocation.scm | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/module/language/cps/slot-allocation.scm b/module/language/cps/slot-allocation.scm index 106496a1a..76cb48d76 100644 --- a/module/language/cps/slot-allocation.scm +++ b/module/language/cps/slot-allocation.scm @@ -249,10 +249,9 @@ body continuation in the prompt." ;; continuations that postdominate the rest of the body. Unless ;; you pass #:complete? #t, we only invoke F on continuations ;; that can leave the body, or on back-edges in loops. - (intset-any (lambda (succ) - (or (not (intset-ref body succ)) - (<= succ label))) - (intmap-ref succs label))) + (not (intset-any (lambda (succ) + (and (intset-ref body succ) (< label succ))) + (intmap-ref succs label)))) (intset-fold (lambda (pred succs) (intmap-replace succs pred handler intset-add)) (if complete? body (intset-filter out-or-back-edge? body))