From bb1a55788aee7c56c41726c7e6eb9f864807bf5c Mon Sep 17 00:00:00 2001 From: ram <ram> Date: Fri, 7 Sep 1990 15:20:58 +0000 Subject: [PATCH] Fixed IR2-CONVERT-LOCAL-CALL to work when we have a non-tail call to a function whose return has been deleted. --- compiler/ir2tran.lisp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/compiler/ir2tran.lisp b/compiler/ir2tran.lisp index fc9c72dc6..a600acfb2 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 -- GitLab