1.0.21.10: DEFINE-COMPILER-MACRO and destructuring lambda-lists
[sbcl.git] / tests / alien.impure.lisp
index 288b7da..74da45a 100644 (file)
 #+win32
 (progn
   (load-shared-object "USER32")
-  (assert 
+  (assert
    (eq :ok
        (handler-case
            (tagbody
                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