X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fcompiler.impure.lisp;h=71cce351e3f0c64b90d420c2ee845e292a016c83;hb=05525d3a5906d7a89fcb689c26177732493c40ce;hp=a43a80f6c2866402a7d9a8a944740fefd5c7dc40;hpb=2bdf5a3484eda55b0d4b9313aa6b3505b6d7cbd8;p=sbcl.git diff --git a/tests/compiler.impure.lisp b/tests/compiler.impure.lisp index a43a80f..71cce35 100644 --- a/tests/compiler.impure.lisp +++ b/tests/compiler.impure.lisp @@ -288,16 +288,22 @@ ;;; bug 194, fixed in part by APD "more strict type checking" patch ;;; (sbcl-devel 2002-08-07) (progn - #+nil ; FIXME: still broken in 0.7.7.19 (after patch) (multiple-value-bind (result error) (ignore-errors (multiple-value-prog1 (progn (the real '(1 2 3))))) (assert (null result)) (assert (typep error 'type-error))) - #+nil ; FIXME: still broken in 0.7.7.19 (after patch) (multiple-value-bind (result error) (ignore-errors (the real '(1 2 3))) (assert (null result)) (assert (typep error 'type-error)))) + +(defun bug194d () + (null (ignore-errors + (let ((arg1 1) + (arg2 (identity (the real #(1 2 3))))) + (if (< arg1 arg2) arg1 arg2))))) +(assert (eq (bug194d) t)) + ;;; BUG 48a. and b. (symbol-macrolet handling), fixed by Eric Marsden ;;; and Raymond Toy for CMUCL, fix ported for sbcl-0.7.6.18. @@ -312,13 +318,10 @@ *standard-input*))) (assert failure-p) (assert (raises-error? (funcall function) program-error))) -#|| -BUG 48c, not yet fixed: (multiple-value-bind (function warnings-p failure-p) (compile nil '(lambda () (symbol-macrolet ((s nil)) (declare (special s)) s))) (assert failure-p) (assert (raises-error? (funcall function) program-error))) -||# ;;; bug 120a: Turned out to be constraining code looking like (if foo ;;; ) where was optimized by the compiler to be the exact @@ -602,7 +605,6 @@ BUG 48c, not yet fixed: (assert (equal (check-embedded-thes 0 1 :a 3.5f0) '(:a 3.5f0))) (assert (typep (check-embedded-thes 0 1 2 2.5d0) 'type-error)) -#+nil (assert (equal (check-embedded-thes 3 0 2 :a) '(2 :a))) (assert (typep (check-embedded-thes 3 0 4 2.5f0) 'type-error)) @@ -613,7 +615,6 @@ BUG 48c, not yet fixed: (assert (equal (check-embedded-thes 3 3 2 2.5f0) '(2 2.5f0))) (assert (typep (check-embedded-thes 3 3 0 2.5f0) 'type-error)) (assert (typep (check-embedded-thes 3 3 2 3.5f0) 'type-error)) - ;;; INLINE inside MACROLET (declaim (inline to-be-inlined)) @@ -752,6 +753,82 @@ BUG 48c, not yet fixed: (declare (type (vector (unsigned-byte 8)) x)) (setq *y* (the (unsigned-byte 8) (aref x 4)))) +;;; FUNCTION-LAMBDA-EXPRESSION should return something that's COMPILE +;;; can understand. Here's a simple test for that on a function +;;; that's likely to return a hairier list than just a lambda: +(macrolet ((def (fn) `(progn + (declaim (inline ,fn)) + (defun ,fn (x) (1+ x))))) + (def bug228)) +(let ((x (function-lambda-expression #'bug228))) + (when x + (assert (= (funcall (compile nil x) 1) 2)))) + +;;; +(defun bug192b (i) + (dotimes (j i) + (declare (type (mod 4) i)) + (unless (< i 5) + (print j)))) +(assert (raises-error? (bug192b 6) type-error)) + +(defun bug192c (x y) + (locally (declare (type fixnum x y)) + (+ x (* 2 y)))) +(assert (raises-error? (bug192c 1.1 2) type-error)) + +(assert (raises-error? (progn (the real (list 1)) t) type-error)) + +(defun bug236 (a f) + (declare (optimize (speed 2) (safety 0))) + (+ 1d0 + (the double-float + (multiple-value-prog1 + (svref a 0) + (unless f (return-from bug236 0)))))) +(assert (eql (bug236 #(4) nil) 0)) + +;;; Bug reported by reported by rif on c.l.l 2003-03-05 +(defun test-type-of-special-1 (x) + (declare (special x) + (fixnum x) + (optimize (safety 3))) + (list x)) +(defun test-type-of-special-2 (x) + (declare (special x) + (fixnum x) + (optimize (safety 3))) + (list x (setq x (/ x 2)) x)) +(assert (raises-error? (test-type-of-special-1 3/2) type-error)) +(assert (raises-error? (test-type-of-special-2 3) type-error)) +(assert (equal (test-type-of-special-2 8) '(8 4 4))) + +;;; bug which existed in 0.8alpha.0.4 for several milliseconds before +;;; APD fixed it in 0.8alpha.0.5 +(defun frob8alpha04 (x y) + (+ x y)) +(defun baz8alpha04 (this kids) + (flet ((n-i (&rest rest) + ;; Removing the #+NIL here makes the bug go away. + #+nil (format t "~&in N-I REST=~S~%" rest) + (apply #'frob8alpha04 this rest))) + (n-i kids))) +;;; failed in 0.8alpha.0.4 with "The value 13 is not of type LIST." +(assert (= (baz8alpha04 12 13) 25)) + +;;; evaluation order in structure slot writers +(defstruct sswo + a b) +(let* ((i 0) + (s (make-sswo :a (incf i) :b (incf i))) + (l (list s :v))) + (assert (= (sswo-a s) 1)) + (assert (= (sswo-b s) 2)) + (setf (sswo-a (pop l)) (pop l)) + (assert (eq l nil)) + (assert (eq (sswo-a s) :v))) + + ;;;; tests not in the problem domain, but of the consistency of the ;;;; compiler machinery itself