(multiple-value-bind (types count) (values-types (tail-set-type tails))
(let ((ptypes (mapcar #'primitive-type types))
(use-standard (use-standard-returns tails)))
- (when (and (eq count :unknown) (not use-standard))
+ (when (and (eq count :unknown) (not use-standard)
+ (not (eq (tail-set-type tails) *empty-type*)))
(return-value-efficiency-note tails))
(if (or (eq count :unknown) use-standard)
(make-return-info :kind :unknown
(remove-from-dfo block)
(values))
-;;; Do stuff to indicate that the return node Node is being deleted.
-;;; We set the RETURN to NIL.
+;;; Do stuff to indicate that the return node NODE is being deleted.
(defun delete-return (node)
(declare (type creturn node))
- (let ((fun (return-lambda node)))
+ (let* ((fun (return-lambda node))
+ (tail-set (lambda-tail-set fun)))
(aver (lambda-return fun))
- (setf (lambda-return fun) nil))
+ (setf (lambda-return fun) nil)
+ (when (and tail-set (not (find-if #'lambda-return (tail-set-funs tail-set))))
+ (setf (tail-set-type tail-set) *empty-type*)))
(values))
;;; If any of the VARS in FUN was never referenced and was not
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"0.8alpha.0.11"
+"0.8alpha.0.12"