1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-24 20:30:28 +02:00

Re-mark "throw" et al as not having fallthrough

* module/system/vm/disassembler.scm (instruction-has-fallthrough?):
  Re-add throw, etc.
* module/system/vm/frame.scm (compute-frame-sizes, compute-killv): Allow
  for unreachable code.
This commit is contained in:
Andy Wingo 2017-12-05 16:53:04 +01:00
parent f84474ef39
commit dd8bf6a98c
2 changed files with 7 additions and 4 deletions

View file

@ -527,6 +527,7 @@ address of that offset."
;; the non-fallthrough-set currently to allow the
;; frame parser to be able to compute the stack
;; size for following code.
throw throw/value throw/value+data
tail-call tail-call-label tail-call/shuffle
return-values
subr-call foreign-call continuation-call

View file

@ -126,7 +126,7 @@
(else (error "bad target" target)))))))
(when (< n (vector-length parsed))
(let* ((in (vector-ref in-sizes n))
(out (instruction-stack-size-after code pos in)))
(out (and in (instruction-stack-size-after code pos in))))
(vector-set! out-sizes n out)
(when out
(when (instruction-has-fallthrough? code pos)
@ -205,9 +205,11 @@
(for-each (lambda (slot)
(when (< slot (vector-length defs-by-slot))
(kill-slot! n slot)))
(instruction-slot-clobbers code pos
(vector-ref in-sizes n)
(vector-ref out-sizes n)))
(let ((in (vector-ref in-sizes n))
(out (vector-ref out-sizes n)))
(if out
(instruction-slot-clobbers code pos in out)
(iota (or in 0)))))
(lp (1+ n) (+ pos (vector-ref parsed n)))))
killv))