From c0595e94aab165f59454a3a97f06a8bdc22f5bd3 Mon Sep 17 00:00:00 2001 From: Alexey Dejneka Date: Sat, 17 Jan 2004 05:52:21 +0000 Subject: [PATCH] 0.8.7.16: * Fix PFD's MISC.275: in IR1-OPTIMIZE-CAST DEST of an multi-use LVAR may be not a block start. --- CREDITS | 11 ++++++----- NEWS | 2 ++ src/compiler/ir1opt.lisp | 3 ++- tests/compiler.pure.lisp | 23 +++++++++++++++++++++++ version.lisp-expr | 2 +- 5 files changed, 34 insertions(+), 7 deletions(-) diff --git a/CREDITS b/CREDITS index d2a45a1..fe88f80 100644 --- a/CREDITS +++ b/CREDITS @@ -540,11 +540,12 @@ Alexey Dejneka: tremendous amount of work on the compiler in particular, fixing bugs and refactoring. -Paul Dietz - He is in the process of writing a comprehensive test suite for the - requirements of the ANSI Common Lisp standard. Already, at the - halfway stage, it has caught hundreds of bugs in SBCL, and provided - simple test cases for them. +Paul Dietz He is in the process of writing a comprehensive test suite + for the requirements of the ANSI Common Lisp standard. Already, at + the halfway stage, it has caught hundreds of bugs in SBCL, and + provided simple test cases for them. His random crash tester has + caught an old deep problem in the implementation of the stack + analysis phase in the compiler. Miles Egan He creates binary packages of SBCL releases for Red Hat and other diff --git a/NEWS b/NEWS index 984410d..f522482 100644 --- a/NEWS +++ b/NEWS @@ -2246,6 +2246,8 @@ changes in sbcl-0.8.8 relative to sbcl-0.8.7: * fixed some bugs revealed by Paul Dietz' test suite: ** in stack analysys liveness information is propagated from non-local entry points. + ** pathwise CAST removing failed when the CAST node did not start + a block. planned incompatible changes in 0.8.x: * (not done yet, but planned:) When the profiling interface settles diff --git a/src/compiler/ir1opt.lisp b/src/compiler/ir1opt.lisp index 61aea84..46ab1ba 100644 --- a/src/compiler/ir1opt.lisp +++ b/src/compiler/ir1opt.lisp @@ -1722,7 +1722,8 @@ (immediately-used-p value use)) (unless next-block (when ctran (ensure-block-start ctran)) - (setq next-block (first (block-succ (node-block cast))))) + (setq next-block (first (block-succ (node-block cast)))) + (ensure-block-start (node-prev cast))) (%delete-lvar-use use) (add-lvar-use use lvar) (unlink-blocks (node-block use) (node-block cast)) diff --git a/tests/compiler.pure.lisp b/tests/compiler.pure.lisp index 0e493f5..eefc810 100644 --- a/tests/compiler.pure.lisp +++ b/tests/compiler.pure.lisp @@ -1094,3 +1094,26 @@ :good (values result1 result2)))) :good)) +;;; MISC.275 +(assert + (zerop + (funcall + (compile + nil + '(lambda (b) + (declare (notinline funcall min coerce)) + (declare + (optimize (speed 1) + (space 2) + (safety 2) + (debug 1) + (compilation-speed 1))) + (flet ((%f12 (f12-1) + (coerce + (min + (if f12-1 (multiple-value-prog1 + b (return-from %f12 0)) + 0)) + 'integer))) + (funcall #'%f12 0)))) + -33))) diff --git a/version.lisp-expr b/version.lisp-expr index 566f174..745e2aa 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; 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.8.7.15" +"0.8.7.16" -- 1.7.10.4