X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fclos.impure.lisp;h=bff25d88bea45b3cd6ce8d6f4c951f8a7f0e60c4;hb=d7875c296a4988e9f27e2776237884deb1984c62;hp=2113f59fc33eeaa18066a1587402f03b78319cc9;hpb=1fa1730414b6c914e502d339945d0ad7a4a7f5d9;p=sbcl.git diff --git a/tests/clos.impure.lisp b/tests/clos.impure.lisp index 2113f59..bff25d8 100644 --- a/tests/clos.impure.lisp +++ b/tests/clos.impure.lisp @@ -2075,4 +2075,48 @@ (defmethod sb-mop:validate-superclass ((x bug-309076-class) (y standard-class)) t) (assert (typep (make-instance 'bug-309076-class) 'bug-309076-class))) + +(eval-when (:compile-toplevel :load-toplevel :execute) + (require 'sb-cltl2) + (defmethod b ())) + +(defmacro macro () + (let ((a 20)) + (declare (special a)) + (assert + (= + (funcall + (compile nil + (sb-mop:make-method-lambda + #'b + (find-method #'b () ()) + '(lambda () (declare (special a)) a) + nil)) + '(1) ()) + 20)))) + +(with-test (:name :make-method-lambda-leakage) + ;; lambda list of X leaks into the invocation of make-method-lambda + ;; during code-walking performed by make-method-lambda invoked by + ;; DEFMETHOD + (sb-cltl2:macroexpand-all '(defmethod x (a) (macro)))) + +(with-test (:name (:defmethod-undefined-function :bug-503095)) + (flet ((test-load (file) + (let (implicit-gf-warning) + (handler-bind + ((sb-ext:implicit-generic-function-warning + (lambda (x) + (setf implicit-gf-warning x) + (muffle-warning x))) + ((or warning error) #'error)) + (load file)) + (assert implicit-gf-warning)))) + (multiple-value-bind (fasl warnings errorsp) (compile-file "bug-503095.lisp") + (unwind-protect + (progn (assert (and fasl (not warnings) (not errorsp))) + (test-load fasl)) + (and fasl (delete-file fasl)))) + (test-load "bug-503095-2.lisp"))) + ;;;; success