From 2ad51f7553081cce0924ace6b215c01ff9f075eb Mon Sep 17 00:00:00 2001 From: Alexey Dejneka Date: Sun, 26 Oct 2003 15:34:38 +0000 Subject: [PATCH] 0.8.5.8: * Fix bugs MISC.101 and MISC.103 found by Paul Dietz: FLUSH-DEST: set BLOCK-TYPE-CHECK attribute for USEs' blocks. --- NEWS | 1 + src/compiler/ir1util.lisp | 3 ++- tests/compiler.pure.lisp | 30 ++++++++++++++++++++++++++++++ version.lisp-expr | 2 +- 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index bb0555b..278a163 100644 --- a/NEWS +++ b/NEWS @@ -2180,6 +2180,7 @@ changes in sbcl-0.8.6 relative to sbcl-0.8.5: constant 0. ** implementation of ASH-MOD32 on X86 did not work for the shift greater than 32. + ** FLUSH-DEST did not mark blocks for type check regeneration. planned incompatible changes in 0.8.x: * (not done yet, but planned:) When the profiling interface settles diff --git a/src/compiler/ir1util.lisp b/src/compiler/ir1util.lisp index e41c094..5929a32 100644 --- a/src/compiler/ir1util.lisp +++ b/src/compiler/ir1util.lisp @@ -956,7 +956,8 @@ (let ((prev (node-prev use))) (let ((block (ctran-block prev))) (setf (component-reoptimize (block-component block)) t) - (setf (block-attributep (block-flags block) flush-p type-asserted) + (setf (block-attributep (block-flags block) + flush-p type-asserted type-check) t))) (setf (node-lvar use) nil)) (setf (lvar-uses lvar) nil)) diff --git a/tests/compiler.pure.lisp b/tests/compiler.pure.lisp index bd999b7..1d17955 100644 --- a/tests/compiler.pure.lisp +++ b/tests/compiler.pure.lisp @@ -704,3 +704,33 @@ (declare (type (integer 4303063 101130078) a)) (mask-field (byte 18 2) (ash a 77)))) 57132532))) + +;;; MISC.101 and MISC.103: FLUSH-DEST did not mark the USE's block for +;;; type check regeneration +(assert (eql (funcall + (compile nil '(lambda (a c) + (declare (type (integer 185501219873 303014665162) a)) + (declare (type (integer -160758 255724) c)) + (declare (optimize (speed 3))) + (let ((v8 + (- -554046873252388011622614991634432 + (ignore-errors c) + (unwind-protect 2791485)))) + (max (ignore-errors a) + (let ((v6 (- v8 (restart-case 980)))) + (min v8 v6)))))) + 259448422916 173715) + 259448422916)) +(assert (eql (funcall + (compile nil '(lambda (a b) + (min -80 + (abs + (ignore-errors + (+ + (logeqv b + (block b6 + (return-from b6 + (load-time-value -6876935)))) + (if (logbitp 1 a) b (setq a -1522022182249)))))))) + -1802767029877 -12374959963) + -80)) diff --git a/version.lisp-expr b/version.lisp-expr index 55ab16b..7b73185 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.5.7" +"0.8.5.8" -- 1.7.10.4