diff --git a/compiler/ir2tran.lisp b/compiler/ir2tran.lisp index fc9c72dc616a5259276fb49552119686a5ea98d1..a600acfb24a16f27df7c333dc4c290a574e53772 100644 --- a/compiler/ir2tran.lisp +++ b/compiler/ir2tran.lisp @@ -7,7 +7,7 @@ ;;; Scott Fahlman (FAHLMAN@CMUC). ;;; ********************************************************************** ;;; -;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/ir2tran.lisp,v 1.21 1990/09/06 17:40:53 wlott Exp $ +;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/ir2tran.lisp,v 1.22 1990/09/07 15:20:58 ram Exp $ ;;; ;;; This file contains the virtual machine independent parts of the code ;;; which does the actual translation of nodes to VOPs. @@ -841,7 +841,9 @@ ;;; IR2-Convert-Local-Call -- Internal ;;; ;;; Dispatch to the appropriate function, depending on whether we have a -;;; let, tail or normal call. +;;; let, tail or normal call. If the function doesn't return, call it using +;;; the unknown-value convention. We could compile it as a tail call, but that +;;; might seem confusing in the debugger. ;;; (defun ir2-convert-local-call (node block) (declare (type combination node) (type ir2-block block)) @@ -852,9 +854,12 @@ (ir2-convert-tail-local-call node block fun)) (t (let* ((start (block-label (node-block (lambda-bind fun)))) - (returns (tail-set-info (lambda-tail-set fun))) + (tails (lambda-tail-set fun)) + (returns (when tails (tail-set-info tails))) (cont (node-cont node))) - (ecase (return-info-kind returns) + (ecase (if returns + (return-info-kind returns) + :unknown) (:unknown (ir2-convert-local-unknown-call node block fun cont start)) (:fixed