summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStas Boukarev <stassats@gmail.com>2024-09-29 13:25:29 +0300
committerStas Boukarev <stassats@gmail.com>2024-09-29 23:11:51 +0300
commit5cbd0e1d9c394fd7e120aa161067db4eeb6fd28c (patch)
tree7803a9d5ecb79637070cf35e6bb6a6d84b75a25e
parenta2586b5d3daa12a0d51e7ebe55d0fb5ff71c4572 (diff)
Don't tail call BREAK.
-rw-r--r--src/compiler/envanal.lisp4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/compiler/envanal.lisp b/src/compiler/envanal.lisp
index 03cb1a314..df07bd09f 100644
--- a/src/compiler/envanal.lisp
+++ b/src/compiler/envanal.lisp
@@ -579,6 +579,8 @@
(let ((result (return-result ret)))
(do-uses (use result)
(when (and (immediately-used-p result use)
+ (not (and (combination-p use)
+ (lvar-fun-is (combination-fun use) '(break))))
(or (not (eq (node-derived-type use) *empty-type*))
(not (basic-combination-p use))
;; This prevents external entry points from
@@ -587,7 +589,7 @@
;; functions they are the entry point for.
(eq (basic-combination-kind use) :local)))
(setf (node-tail-p use) t)))))))
- ;; Tail call non returning functions if no debugging is wanted.
+ ;; Tail call non-returning functions if no debugging is wanted.
(dolist (block (block-pred (component-tail component)))
(let ((last (block-last block)))
(when (and (combination-p last)