[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] GNU Guile branch, master, updated. v2.1.0-77-gebca3af

From: Andy Wingo
Subject: [Guile-commits] GNU Guile branch, master, updated. v2.1.0-77-gebca3af
Date: Mon, 21 Jul 2014 09:56:29 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Guile".

The branch, master has been updated
       via  ebca3afedb716087b5cd5d64e9ba4e5d94491367 (commit)
      from  6d7b6a171e2eafd1dd48424f39f5796a67e73ad4 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit ebca3afedb716087b5cd5d64e9ba4e5d94491367
Author: Andy Wingo <address@hidden>
Date:   Mon Jul 21 11:47:43 2014 +0200

    Fix allocate-slots for $kreceive with multiple predecessors
    * module/language/cps/slot-allocation.scm (allocate-slots): For
      continuations of $call, $callk, and $values with multiple
      predecessors, recalculate the set of live slots.  Fixes miscompilation
      of ice-9/futures.scm:process-future!, broken since the previous patch,
      now that $kreceive continuations can have multiple predecessors.


Summary of changes:
 module/language/cps/slot-allocation.scm |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/module/language/cps/slot-allocation.scm 
index 92b6e02..d9d53f5 100644
--- a/module/language/cps/slot-allocation.scm
+++ b/module/language/cps/slot-allocation.scm
@@ -635,13 +635,17 @@ are comparable with eqv?.  A tmp slot may be used."
               (match (lookup-cont (idx->label n) dfg)
                 (($ $kclause) n)
                 (($ $kargs names syms body)
+                 (define (compute-k-live k)
+                   (match (lookup-predecessors k dfg)
+                     ((_) post-live)
+                     (_ (recompute-live-slots k nargs))))
                  (let ((uses (vector-ref usev n)))
                    (match (find-call body)
                      (($ $continue k src (or ($ $call) ($ $callk)))
-                      (allocate-call label k uses live post-live))
+                      (allocate-call label k uses live (compute-k-live k)))
                      (($ $continue k src ($ $primcall)) #t)
                      (($ $continue k src ($ $values))
-                      (allocate-values label k uses live post-live))
+                      (allocate-values label k uses live (compute-k-live k)))
                      (($ $continue k src ($ $prompt escape? tag handler))
                       (allocate-prompt label k handler nargs))
                      (_ #f)))

GNU Guile

reply via email to

[Prev in Thread] Current Thread [Next in Thread]