X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fcompiler.impure.lisp;h=57e96361961725860ed11dd9f0d17ed3805bb0a3;hb=d04b59670ab69405c4115ea3caac99fd62a4b7ab;hp=5baf7d1f9b1f517820c4141cf9333031391626cb;hpb=96a139f451963981fc2419410f468bae1a5d25d2;p=sbcl.git diff --git a/tests/compiler.impure.lisp b/tests/compiler.impure.lisp index 5baf7d1..57e9636 100644 --- a/tests/compiler.impure.lisp +++ b/tests/compiler.impure.lisp @@ -1032,9 +1032,40 @@ ;;; bug 211e: bogus style warning from duplicated keyword argument to ;;; a local function. (handler-bind ((style-warning #'error)) - (let ((f (compile nil '(lambda () (flet ((foo (&key y) (list y))) - (list (foo :y 1 :y 2))))))) + (let ((f (compile nil '(lambda () + (flet ((foo (&key y) (list y))) + (list (foo :y 1 :y 2))))))) (assert (equal '((1)) (funcall f))))) +;;; check that EQL is optimized when other argument is (OR SYMBOL FIXNUM). +(handler-bind ((compiler-note #'error)) + (let ((f1 (compile nil '(lambda (x1 y1) + (declare (type (or symbol fixnum) x1) + (optimize speed)) + (eql x1 y1)))) + (f2 (compile nil '(lambda (x2 y2) + (declare (type (or symbol fixnum) y2) + (optimize speed)) + (eql x2 y2))))) + (let ((fix (random most-positive-fixnum)) + (sym (gensym)) + (e-count 0)) + (assert (funcall f1 fix fix)) + (assert (funcall f2 fix fix)) + (assert (funcall f1 sym sym)) + (assert (funcall f2 sym sym)) + (handler-bind ((type-error (lambda (c) + (incf e-count) + (continue c)))) + (flet ((test (f x y) + (with-simple-restart (continue "continue with next test") + (funcall f x y) + (error "fell through with (~S ~S ~S)" f x y)))) + (test f1 "oops" 42) + (test f1 (1+ most-positive-fixnum) 42) + (test f2 42 "oops") + (test f2 42 (1+ most-positive-fixnum)))) + (assert (= e-count 4))))) + ;;; success (quit :unix-status 104)