X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Falien.impure.lisp;h=74da45aa0bb104acf31166fd99a90fbb8a30706e;hb=14e646e1fe2525f3375a0fa2b3770473ebf97e93;hp=288b7da51de697968f126fdd249539d752a67e31;hpb=13deb21bc0d8e9d68b3f449ca971c3c7fd332f4b;p=sbcl.git diff --git a/tests/alien.impure.lisp b/tests/alien.impure.lisp index 288b7da..74da45a 100644 --- a/tests/alien.impure.lisp +++ b/tests/alien.impure.lisp @@ -185,7 +185,7 @@ #+win32 (progn (load-shared-object "USER32") - (assert + (assert (eq :ok (handler-case (tagbody @@ -200,7 +200,30 @@ 0 0 0 0) up (funcall 0)) - (error () + (error () :ok))))) +;;; Unused local alien caused a compiler error +(with-test (:name unused-local-alien) + (let ((fun `(lambda () + (sb-alien:with-alien ((alien1923 (array (sb-alien:unsigned 8) 72))) + (values))))) + (assert (not (funcall (compile nil fun)))))) + +;;; Non-local exit from WITH-ALIEN caused alien stack to be leaked. +(defvar *sap-int*) +(defun try-to-leak-alien-stack (x) + (with-alien ((alien (array (sb-alien:unsigned 8) 72))) + (let ((sap-int (sb-sys:sap-int (alien-sap alien)))) + (if *sap-int* + (assert (= *sap-int* sap-int)) + (setf *sap-int* sap-int))) + (when x + (return-from try-to-leak-alien-stack 'going)) + (never))) +(with-test (:name :nlx-causes-alien-stack-leak) + (let ((*sap-int* nil)) + (loop repeat 1024 + do (try-to-leak-alien-stack t)))) + ;;; success