From: Nikodemus S. <de...@us...> - 2010-08-30 10:45:09
|
Update of /cvsroot/sbcl/sbcl/tests In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv2082/tests Modified Files: compiler.pure.lisp Log Message: 1.0.42.2: correct defknown for data-vector-ref-with-offset * If the offset is positive, the index can be negative and still correct. * Fixes lp#622958 Index: compiler.pure.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/tests/compiler.pure.lisp,v retrieving revision 1.226 retrieving revision 1.227 diff -u -d -r1.226 -r1.227 --- compiler.pure.lisp 30 Mar 2010 10:09:05 -0000 1.226 +++ compiler.pure.lisp 30 Aug 2010 10:45:00 -0000 1.227 @@ -3502,3 +3502,32 @@ (declare (optimize (sb-c::float-accuracy 0))) (* x -1.0d0))) 1)))) + +(with-test (:name :data-vector-ref-with-offset-neg-index) + (let ((fun (compile nil + `(lambda () + (let ((table (make-array 7 + :element-type 'fixnum + :initial-contents '(0 1 2 3 4 5 6)))) + (loop for n from -3 upto 3 + collect (aref table (+ 3 n)))))))) + (assert (equal '(0 1 2 3 4 5 6) (funcall fun))))) + +(with-test (:name :aref-bignum-offset-and-index) + ;; These don't get the data-vector-ref-with-offset vop. + (let ((fun (compile nil + `(lambda () + (let ((table (make-array 7 + :element-type 'fixnum + :initial-contents '(0 1 2 3 4 5 6)))) + (loop for n from most-negative-fixnum upto (+ most-negative-fixnum 6) + collect (aref table (+ #.(1+ most-positive-fixnum) n)))))))) + (assert (equal '(0 1 2 3 4 5 6) (funcall fun)))) + (let ((fun (compile nil + `(lambda () + (let ((table (make-array 7 + :element-type 'fixnum + :initial-contents '(0 1 2 3 4 5 6)))) + (loop for n from (+ most-positive-fixnum 1) upto (+ most-positive-fixnum 7) + collect (aref table (- n (+ most-positive-fixnum 1))))))))) + (assert (equal '(0 1 2 3 4 5 6) (funcall fun))))) |