From: Christophe R. <cr...@us...> - 2009-08-23 22:03:59
|
Update of /cvsroot/sbcl/sbcl/tests In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv9012/tests Modified Files: compiler.pure.lisp Log Message: 1.0.30.51: fix for COERCE compilation regression Code of the form (defun foo (x) (declare (type simple-vector x)) (coerce x '(vector (unsigned-byte 8)))) should not cause a full WARNING, but with the new COERCE transforms, expanded into one of those IFs where one branch is dead, but the compiler couldn't prove it. Define a whole heap of new backend type predicates for all specialized vectors, generalizing VECTOR-T-P. (Some specialized vectors are implemented using widetags, and so are excluded from these new definitions). Index: compiler.pure.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/tests/compiler.pure.lisp,v retrieving revision 1.210 retrieving revision 1.211 diff -u -d -r1.210 -r1.211 --- compiler.pure.lisp 22 Aug 2009 15:43:20 -0000 1.210 +++ compiler.pure.lisp 23 Aug 2009 21:36:14 -0000 1.211 @@ -3300,3 +3300,14 @@ (ret (funcall fun sap 0))) ;; test for either endianness (assert (or (= ret (+ (* 5 256) 4)) (= ret (+ (* 4 256) 5)))))) + +(with-test (:name :coerce-type-warning) + (dolist (type '(t (unsigned-byte 8) (unsigned-byte 16) (unsigned-byte 32) + (signed-byte 8) (signed-byte 16) (signed-byte 32))) + (multiple-value-bind (fun warningsp failurep) + (compile nil `(lambda (x) + (declare (type simple-vector x)) + (coerce x '(vector ,type)))) + (assert (null warningsp)) + (assert (null failurep)) + (assert (typep (funcall fun #(1)) `(simple-array ,type (*))))))) |