X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Falien.impure.lisp;h=c235b630206b47f00402c6681ffe27fba8eea2db;hb=d27eb12b08a7eb445729bc339c9bedf0aeeaa4fa;hp=096e82aee50a3fcc7829c4bfb7e29da6623ce3ee;hpb=ede2e5847ce21481920198c6de86da4d18999d52;p=sbcl.git diff --git a/tests/alien.impure.lisp b/tests/alien.impure.lisp index 096e82a..c235b63 100644 --- a/tests/alien.impure.lisp +++ b/tests/alien.impure.lisp @@ -264,8 +264,7 @@ ((foo (unsigned 32))) foo) -#+(or x86-64 x86) -(with-test (:name bug-316325) +(with-test (:name bug-316325 :skipped-on '(not (or :x86-64 :x86))) ;; This test works by defining a callback function that provides an ;; identity transform over a full-width machine word, then calling ;; it as if it returned a narrower type and checking to see if any @@ -294,4 +293,35 @@ (verify (signed 16) #x003f8042 #x-7fbe) (verify (signed 16) #x003f7042 #x7042))) +(with-test (:name :bug-654485) + ;; DEBUG 2 used to prevent let-conversion of the open-coded ALIEN-FUNCALL body, + ;; which in turn led the dreaded %SAP-ALIEN note. + (handler-case + (compile nil + `(lambda (program argv) + (declare (optimize (debug 2))) + (with-alien ((sys-execv1 (function int c-string (* c-string)) :extern + "execv")) + (values (alien-funcall sys-execv1 program argv))))) + (compiler-note (n) + (error n)))) + +(with-test (:name :bug-721087) + (assert (typep nil '(alien c-string))) + (assert (not (typep nil '(alien (c-string :not-null t))))) + (assert (eq :ok + (handler-case + (posix-getenv nil) + (type-error (e) + (when (and (null (type-error-datum e)) + (equal (type-error-expected-type e) + '(alien (c-string :not-null t)))) + :ok)))))) + +(with-test (:name :make-alien-string) + (let ((alien (sb-alien::make-alien-string "This comes from lisp!"))) + (gc :full t) + (assert (equal "This comes from lisp!" (cast alien c-string))) + (free-alien alien))) + ;;; success