(if trusted
(derive-node-type call returns)
(let ((lvar (node-lvar call)))
- ;; If the value is used in a non-tail position, and
- ;; the lvar is a single-use, assert the type. Multiple use
- ;; sites need to be elided because the assertion has to apply
- ;; to all uses. Tail positions are elided because the assertion
- ;; would lose cause us not the be in a tail-position anymore.
+ ;; If the value is used in a non-tail position, and the lvar
+ ;; is a single-use, assert the type. Multiple use sites need
+ ;; to be elided because the assertion has to apply to all
+ ;; uses. Tail positions are elided because the assertion
+ ;; would cause us not the be in a tail-position anymore. MV
+ ;; calls are elided because not only are the assertions of
+ ;; less use there, but they can cause the MV call conversion
+ ;; to cause astray.
(when (and lvar
(not (return-p (lvar-dest lvar)))
+ (not (mv-combination-p (lvar-dest lvar)))
(lvar-has-single-use-p lvar))
(when (assert-lvar-type lvar returns policy)
(reoptimize-lvar lvar)))))