X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fcompiler.pure-cload.lisp;h=e1cba004ef00c442cfbda05431ff29c0375e9c85;hb=c58795f37078f5900aff5dc4a3712fbadd2d432e;hp=3f913cf274e01f881e996cf1fb2782df02e4a91c;hpb=cf6f2e4b33475c59d999e53d3d5c290726fe0a7c;p=sbcl.git diff --git a/tests/compiler.pure-cload.lisp b/tests/compiler.pure-cload.lisp index 3f913cf..e1cba00 100644 --- a/tests/compiler.pure-cload.lisp +++ b/tests/compiler.pure-cload.lisp @@ -59,3 +59,28 @@ (symbol-value 'a)) a b) '(1 2 :a 1 2)))) + +;;; bug 282 +;;; +;;; Verify type checking policy in full calls: the callee is supposed +;;; to perform check, but the results should not be used before the +;;; check will be actually performed. +#+nil +(locally + (declare (optimize (safety 3))) + (flet ((bar (f a) + (declare (type (simple-array (unsigned-byte 32) (*)) a)) + (declare (type (function (fixnum)) f)) + (funcall f (aref a 0)))) + (assert + (eval `(let ((n (1+ most-positive-fixnum))) + (if (not (typep n '(unsigned-byte 32))) + (warn 'style-warning + "~@.~:@>") + (block nil + (funcall ,#'bar + (lambda (x) (when (eql x n) (return t))) + (make-array 1 :element-type '(unsigned-byte 32) + :initial-element n)) + nil)))))))