Commit 7ddc5e3c authored by ehuelsmann@1c010e3e-69d0-11dd-93a8-456734b0d56f's avatar ehuelsmann@1c010e3e-69d0-11dd-93a8-456734b0d56f
Browse files

Fix MULTIPLE-VALUE-PROG1.10 the right way.

parent da79ca7b
......@@ -3005,14 +3005,6 @@ given a specific common representation.")
(emit-push-current-thread)
(emit-getfield +lisp-thread+ "_values" +lisp-object-array+)
(astore values-register)
;; we need to clear the values again:
;; some parts will consider a non-null _values array
;; by itself a legitimate return value (multiple values)
;; however, if we have a non-local return after the previous form
;; set the values array, other code may pick up the values instead
;; of the actual return code. (Fixes MULTIPLE-VALUE-PROG1.10)
(emit-clear-values)
(compile-progn-body subforms nil nil)
;; Restore multiple values returned by first subform.
(emit-push-current-thread)
......@@ -3894,8 +3886,7 @@ given a specific common representation.")
;; Local case. Is the RETURN nested inside an UNWIND-PROTECT which is
;; inside the block we're returning from?
(unless (enclosed-by-protected-block-p block)
(unless (compiland-single-valued-p *current-compiland*)
(emit-clear-values))
(emit-clear-values)
(compile-form result-form (block-target block) nil)
(when (and (block-needs-environment-restoration block)
(enclosed-by-environment-setting-block-p block))
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment