X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fcompiler.impure.lisp;h=586f57b03e1fc82c5ed66e14c5cade7a79ac2eba;hb=422b88abf96f4842a3d0999cd3b80d96f5a153d6;hp=55f003a974ae4c519ef8adeb00e1028a86a0a84e;hpb=11b8fcf55c80cb2686fb49663fa4d96f9b152ce4;p=sbcl.git diff --git a/tests/compiler.impure.lisp b/tests/compiler.impure.lisp index 55f003a..586f57b 100644 --- a/tests/compiler.impure.lisp +++ b/tests/compiler.impure.lisp @@ -113,6 +113,36 @@ (defun stupid-input-to-smart-array-deftransforms-0-7-5-12 (v) (declare (type (and simple-vector fwd-type-ref) v)) (aref v 0)) + +;;; Ca. sbcl-0.7.5.15 the compiler would fail an internal consistency +;;; check on this code because it expected all calls to %INSTANCE-REF +;;; to be transformed away, but its expectations were dashed by perverse +;;; code containing app programmer errors like this. +(defstruct something-known-to-be-a-struct x y) +(multiple-value-bind (fun warnings-p failure-p) + (compile nil + '(lambda () + (labels ((a1 (a2 a3) + (cond (t (a4 a2 a3)))) + (a4 (a2 a3 a5 a6) + (declare (type (or simple-vector null) a5 a6)) + (something-known-to-be-a-struct-x a5)) + (a8 (a2 a3) + (a9 #'a1 a10 a2 a3)) + (a11 (a2 a3) + (cond ((and (funcall a12 a2) + (funcall a12 a3)) + (funcall a13 a2 a3)) + (t + (when a14 + (let ((a15 (a1 a2 a3))) + )) + a16)))) + (values #'a17 #'a11)))) + ;; Python sees the structure accessor on the known-not-to-be-a-struct + ;; A5 value and is very, very disappointed in you. (But it doesn't + ;; signal BUG any more.) + (assert failure-p)) ;;;; tests not in the problem domain, but of the consistency of the ;;;; compiler machinery itself