From 53f576d7d796e37a9c51c3c3296341458f046c44 Mon Sep 17 00:00:00 2001 From: Nikodemus Siivola Date: Fri, 19 Dec 2008 13:46:34 +0000 Subject: [PATCH] 1.0.23.55: three stale bugs * 332, 369, 380: added test-cases which pass. --- BUGS | 56 ------------------------------------------------ tests/clos.impure.lisp | 8 +++++++ tests/load.impure.lisp | 17 +++++++++++++++ tests/type.pure.lisp | 20 +++++++++++++++++ version.lisp-expr | 2 +- 5 files changed, 46 insertions(+), 57 deletions(-) diff --git a/BUGS b/BUGS index 2ca448f..d7ecde8 100644 --- a/BUGS +++ b/BUGS @@ -1133,25 +1133,6 @@ WORKAROUND: in the wrapper, and then to update the instance just run through all the old wrappers in order from oldest to newest. -332: "fasl stack inconsistency in structure redefinition" - (reported by Tim Daly Jr sbcl-devel 2004-05-06) - Even though structure redefinition is undefined by the standard, the - following behaviour is suboptimal: running - (defun stimulate-sbcl () - (let ((filename (format nil "/tmp/~A.lisp" (gensym)))) - ;;create a file which redefines a structure incompatibly - (with-open-file (f filename :direction :output :if-exists :supersede) - (print '(defstruct astruct foo) f) - (print '(defstruct astruct foo bar) f)) - ;;compile and load the file, then invoke the continue restart on - ;;the structure redefinition error - (handler-bind ((error (lambda (c) (continue c)))) - (load (compile-file filename))))) - (stimulate-sbcl) - and choosing the CONTINUE restart yields the message - debugger invoked on a SB-INT:BUG in thread 27726: - fasl stack not empty when it should be - 336: "slot-definitions must retain the generic functions of accessors" reported by Tony Martinez: (defclass foo () ((bar :reader foo-bar))) @@ -1396,30 +1377,6 @@ WORKAROUND: Expected: ERROR Got: # -369: unlike-an-intersection behavior of VALUES-TYPE-INTERSECTION - In sbcl-0.8.18.2, the identity $(x \cap y \cap y)=(x \cap y)$ - does not hold for VALUES-TYPE-INTERSECTION, even for types which - can be intersected exactly, so that ASSERTs fail in this test case: - (in-package :cl-user) - (let ((types (mapcar #'sb-c::values-specifier-type - '((values (vector package) &optional) - (values (vector package) &rest t) - (values (vector hash-table) &rest t) - (values (vector hash-table) &optional) - (values t &optional) - (values t &rest t) - (values nil &optional) - (values nil &rest t) - (values sequence &optional) - (values sequence &rest t) - (values list &optional) - (values list &rest t))))) - (dolist (x types) - (dolist (y types) - (let ((i (sb-c::values-type-intersection x y))) - (assert (sb-c::type= i (sb-c::values-type-intersection i x))) - (assert (sb-c::type= i (sb-c::values-type-intersection i y))))))) - 370: reader misbehaviour on large-exponent floats (read-from-string "1.0s1000000000000000000000000000000000000000") causes the reader to attempt to create a very large bignum (which it @@ -1457,19 +1414,6 @@ WORKAROUND: 379: TRACE :ENCAPSULATE NIL broken on ppc/darwin See commented-out test-case in debug.impure.lisp. -380: Accessor redefinition fails because of old accessor name - When redefining an accessor, SB-PCL::FIX-SLOT-ACCESSORS may try to - find the generic function named by the old accessor name using - ENSURE-GENERIC-FUNCTION and then remove the old accessor's method in - the GF. If the old name does not name a function, or if the old name - does not name a generic function, no attempt to find the GF or remove - any methods is made. - - However, if an unrelated GF with an incompatible lambda list exists, - the class redefinition will fail when SB-PCL::REMOVE-READER-METHOD - tries to find and remove a method with an incompatible lambda list - from the unrelated generic function. - 382: externalization unexpectedly changes array simplicity COMPILE-FILE and LOAD (defun foo () diff --git a/tests/clos.impure.lisp b/tests/clos.impure.lisp index d548cff..34d38bd 100644 --- a/tests/clos.impure.lisp +++ b/tests/clos.impure.lisp @@ -1639,5 +1639,13 @@ (handler-bind ((compiler-note #'error)) (stream-fd sb-sys:*stdin* :output) (stream-fd sb-sys:*stdin* :output))) + +(with-test (:name :bug-380) + (defclass bug-380 () + ((slot :accessor bug380-slot))) + (fmakunbound 'foo-slot) + (defgeneric foo-slot (x y z)) + (defclass foo () + ((slot :accessor foo-slot-value)))) ;;;; success diff --git a/tests/load.impure.lisp b/tests/load.impure.lisp index 461c238..7466edb 100644 --- a/tests/load.impure.lisp +++ b/tests/load.impure.lisp @@ -271,3 +271,20 @@ (when (find-restart 'sb-fasl::object) (invoke-restart 'sb-fasl::object))))) (load-and-assert spec fasl fasl)))) + +(with-test (:name :bug-332) + (flet ((stimulate-sbcl () + (let ((filename (format nil "/tmp/~A.lisp" (gensym)))) + ;; create a file which redefines a structure incompatibly + (with-open-file (f filename :direction :output :if-exists :supersede) + (print '(defstruct bug-332 foo) f) + (print '(defstruct bug-332 foo bar) f)) + ;; compile and load the file, then invoke the continue restart on + ;; the structure redefinition error + (handler-bind ((error (lambda (c) (continue c)))) + (load (compile-file filename)))))) + (stimulate-sbcl) + (stimulate-sbcl) + (stimulate-sbcl))) + + diff --git a/tests/type.pure.lisp b/tests/type.pure.lisp index 36019b2..4e3ca06 100644 --- a/tests/type.pure.lisp +++ b/tests/type.pure.lisp @@ -400,3 +400,23 @@ ACTUAL ~D DERIVED ~D~%" (with-test (:name :opt+rest+key-canonicalization) (let ((type '(function (&optional t &rest t &key (:x t) (:y t)) *))) (assert (equal type (sb-kernel:type-specifier (sb-kernel:specifier-type type)))))) + +(with-test (:name :bug-369) + (let ((types (mapcar #'sb-c::values-specifier-type + '((values (vector package) &optional) + (values (vector package) &rest t) + (values (vector hash-table) &rest t) + (values (vector hash-table) &optional) + (values t &optional) + (values t &rest t) + (values nil &optional) + (values nil &rest t) + (values sequence &optional) + (values sequence &rest t) + (values list &optional) + (values list &rest t))))) + (dolist (x types) + (dolist (y types) + (let ((i (sb-c::values-type-intersection x y))) + (assert (sb-c::type= i (sb-c::values-type-intersection i x))) + (assert (sb-c::type= i (sb-c::values-type-intersection i y)))))))) diff --git a/version.lisp-expr b/version.lisp-expr index be05f36..c806284 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".) -"1.0.23.54" +"1.0.23.55" -- 1.7.10.4