X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fcompiler.impure.lisp;h=db2546253601002da06c4880443bc428377485d4;hb=e62a03c99097db9454d66f32b5edbd6af874a539;hp=63273bf115ba3fc05fdfab1305ecda7bf60764b5;hpb=c0380faa04d989735579753b12a8881f71112295;p=sbcl.git diff --git a/tests/compiler.impure.lisp b/tests/compiler.impure.lisp index 63273bf..db25462 100644 --- a/tests/compiler.impure.lisp +++ b/tests/compiler.impure.lisp @@ -269,6 +269,36 @@ ;; Uncomment and it works )) (eff))) + +;;; bug 192a, fixed by APD "more strict type checking" patch +;;; (sbcl-devel 2002-08-07) +(defun bug192a (x) + (declare (optimize (speed 0) (safety 3))) + ;; Even with bug 192a, this declaration was checked as an assertion. + (declare (real x)) + (+ x + (locally + ;; Because of bug 192a, this declaration was trusted without checking. + (declare (single-float x)) + (sin x)))) +(assert (null (ignore-errors (bug192a nil)))) +(multiple-value-bind (result error) (ignore-errors (bug192a 100)) + (assert (null result)) + (assert (equal (type-error-expected-type error) 'single-float))) + +;;; 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)))) ;;; BUG 48a. and b. (symbol-macrolet handling), fixed by Eric Marsden ;;; and Raymond Toy for CMUCL, fix ported for sbcl-0.7.6.18. @@ -276,9 +306,11 @@ (compile nil '(lambda () (symbol-macrolet ((t nil)) t))) (assert failure-p) (assert (raises-error? (funcall function) program-error))) - (multiple-value-bind (function warnings-p failure-p) - (compile nil '(lambda () (symbol-macrolet ((*standard-input* nil)) *standard-input*))) + (compile nil + '(lambda () + (symbol-macrolet ((*standard-input* nil)) + *standard-input*))) (assert failure-p) (assert (raises-error? (funcall function) program-error))) #|| @@ -304,6 +336,29 @@ 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) ;;;; tests not in the problem domain, but of the consistency of the ;;;; compiler machinery itself