X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fcompiler.impure.lisp;h=3a2ce24ba38b04883a12ef6b74722d499b4c7c4e;hb=bf77540f53dbb693d87b9ff4fbfd09d3de7fb2d9;hp=1a0f385c68002251be091a5b0896d6119b64e261;hpb=ed72064bbc8203d70526388e90d6858c28a6db25;p=sbcl.git diff --git a/tests/compiler.impure.lisp b/tests/compiler.impure.lisp index 1a0f385..3a2ce24 100644 --- a/tests/compiler.impure.lisp +++ b/tests/compiler.impure.lisp @@ -1002,6 +1002,39 @@ (assert (= 0 (count-full-calls "FOO-MAYBE-INLINE" fun))) (assert (= 1 (count-full-calls "QUUX-MARKER" fun))))) +(defun file-compile (toplevel-forms &key load) + (let* ((lisp "compile-impure-tmp.lisp") + (fasl (compile-file-pathname lisp))) + (unwind-protect + (progn + (with-open-file (f lisp :direction :output) + (dolist (form toplevel-forms) + (prin1 form f))) + (multiple-value-bind (fasl warn fail) (compile-file lisp) + (when load + (load fasl)) + (values warn fail))) + (ignore-errors (delete-file lisp)) + (ignore-errors (delete-file fasl))))) + +(with-test (:name :bug-405) + ;; These used to break with a TYPE-ERROR + ;; The value NIL is not of type SB-C::PHYSENV. + ;; in MERGE-LETS. + (file-compile + '((LET (outer-let-var) + (lambda () + (print outer-let-var) + (MULTIPLE-VALUE-CALL 'some-function + (MULTIPLE-VALUE-CALL (LAMBDA (a) 'foo) + 1)))))) + (file-compile + '((declaim (optimize (debug 3))) + (defstruct bug-405-foo bar) + (let () + (flet ((i (x) (frob x (bug-405-foo-bar foo)))) + (i :five)))))) + ;;;; tests not in the problem domain, but of the consistency of the ;;;; compiler machinery itself