Skip to content
Snippets Groups Projects
Commit e3c48cee authored by gerd's avatar gerd
Browse files

(compile nil '(lambda (c)

	   (labels ((%f15 ()
	              (* (unwind-protect c)
	              (max -5726369 (return-from %f15 3099206)))))
	     c)))
	 => assertion failure in unlink-blocks

	* src/compiler/ir1util.lisp (delete-lambda): Protect the deletion
	of the return block against already being marked for deletion.
	Mark the return block for deletion.  From SBCL.
parent b71200f3
No related branches found
No related tags found
No related merge requests found
......@@ -5,7 +5,7 @@
;;; Carnegie Mellon University, and has been placed in the public domain.
;;;
(ext:file-comment
"$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/ir1util.lisp,v 1.97 2003/10/11 10:49:51 gerd Exp $")
"$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/ir1util.lisp,v 1.98 2003/10/13 10:24:47 gerd Exp $")
;;;
;;; **********************************************************************
;;;
......@@ -769,7 +769,14 @@
(unless (block-delete-p bind-block)
(unlink-blocks (component-head component) bind-block))
(when return
(unlink-blocks (node-block return) (component-tail component)))
(let ((return-block (node-block return)))
(when (and return-block
(not (block-delete-p return-block)))
(unless *converting-for-interpreter*
;; FIXME: Can't do this if converting for interpretation;
;; it leads to strange errors. Go figure.
(mark-for-deletion return-block))
(unlink-blocks return-block (component-tail component)))))
(setf (component-reanalyze component) t)
(let ((tails (lambda-tail-set leaf)))
(setf (tail-set-functions tails)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment