X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fcompiler.impure.lisp;h=0bbcdf922d9442be14ff724ffc251069ab4c3e90;hb=6b2089086bf8e2bc377fe8ecba7d7284f654219f;hp=72013e8fdae6cf76eb0eb9683d82f3772cb3dda9;hpb=fb91e1987cc40f3f698f2972d0de50426ec3086f;p=sbcl.git diff --git a/tests/compiler.impure.lisp b/tests/compiler.impure.lisp index 72013e8..0bbcdf9 100644 --- a/tests/compiler.impure.lisp +++ b/tests/compiler.impure.lisp @@ -336,6 +336,46 @@ BUG 48c, not yet fixed: (if x t (if y t (dont-constrain-if-too-much x y)))) (assert (null (dont-constrain-if-too-much-aux nil nil))) + +;;; TYPE-ERROR confusion ca. sbcl-0.7.7.24, reported and fixed by +;;; APD sbcl-devel 2002-09-14 +(defun exercise-0-7-7-24-bug (x) + (declare (integer x)) + (let (y) + (setf y (the single-float (if (> x 0) x 3f0))) + (list y y))) +(multiple-value-bind (v e) (ignore-errors (exercise-0-7-7-24-bug 4)) + (assert (null v)) + (assert (typep e 'type-error))) +(assert (equal (exercise-0-7-7-24-bug -4) '(3f0 3f0))) + +;;; non-intersecting type declarations were DWIMing in a confusing +;;; fashion until sbcl-0.7.7.28, when APD reported and fixed the +;;; problem. +(defun non-intersecting-the (x) + (let (y) + (setf y (the single-float (the integer x))) + (list y y))) + +(raises-error? (foo 3) type-error) +(raises-error? (foo 3f0) type-error) + +;;; until 0.8.2 SBCL did not check THEs in arguments +(defun the-in-arguments-aux (x) + x) +(defun the-in-arguments-1 (x) + (list x (the-in-arguments-aux (the (single-float 0s0) x)))) +(defun the-in-arguments-2 (x) + (list x (the-in-arguments-aux (the single-float x)))) + +(multiple-value-bind (result condition) + (ignore-errors (the-in-arguments-1 1)) + (assert (null result)) + (assert (typep condition 'type-error))) +(multiple-value-bind (result condition) + (ignore-errors (the-in-arguments-2 1)) + (assert (null result)) + (assert (typep condition 'type-error))) ;;;; tests not in the problem domain, but of the consistency of the ;;;; compiler machinery itself