X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fcompiler.impure.lisp;h=87c22657c767e0ad4f878a6e6b4f854fe5dc48a9;hb=007bcd5aac2f3a1e714563bd39f7a2db2d0bf7c2;hp=3a2ce24ba38b04883a12ef6b74722d499b4c7c4e;hpb=7522f7615389fd4e6b24d34d38ff8b4b96bb6812;p=sbcl.git diff --git a/tests/compiler.impure.lisp b/tests/compiler.impure.lisp index 3a2ce24..87c2265 100644 --- a/tests/compiler.impure.lisp +++ b/tests/compiler.impure.lisp @@ -1035,6 +1035,40 @@ (flet ((i (x) (frob x (bug-405-foo-bar foo)))) (i :five)))))) +;;; bug 235a +(declaim (ftype (function (cons) number) bug-235a-aux)) +(declaim (inline bug-235a-aux)) +(defun bug-235a-aux (c) + (the number (car c))) +(with-test (:name :bug-235a) + (let ((fun (compile nil + `(lambda (x y) + (values (locally (declare (optimize (safety 0))) + (bug-235a-aux x)) + (locally (declare (optimize (safety 3))) + (bug-235a-aux y))))))) + (assert + (eq :error + (handler-case + (funcall fun '(:one) '(:two)) + (type-error (e) + (assert (eq :two (type-error-datum e))) + (assert (eq 'number (type-error-expected-type e))) + :error)))))) + +(with-test (:name :compiled-debug-funs-leak) + (sb-ext:gc :full t) + (let ((usage-before (sb-kernel::dynamic-usage))) + (dotimes (x 10000) + (let ((f (compile nil '(lambda () + (error "X"))))) + (handler-case + (funcall f) + (error () nil)))) + (sb-ext:gc :full t) + (let ((usage-after (sb-kernel::dynamic-usage))) + (when (< (+ usage-before 2000000) usage-after) + (error "Leak"))))) ;;;; tests not in the problem domain, but of the consistency of the ;;;; compiler machinery itself