I think that it is a problem with SBCL (I've contacted devs on IRC about that), but it won't hurt to mention the issue here, especially that it directly affects CLOSER-MOP.
;; By returning a single call-method `form' here we enable
;; an important implementation-specific optimization; that
;; is, we can use the fast method function directly as the
;; effective method function.
;;
;; However, the requirement by ANSI (CLHS 7.6.5) on generic
;; function argument checking inhibits this, as we don't
;; perform this checking in fast-method-functions given
;; that they are not solely used for effective method
;; functions, but also in combination, when they should not
;; perform argument checks.
(let ((call-method
`(call-method ,(first (primary)) ,(rest (primary)))))
(if (gf-requires-emf-keyword-checks generic-function)
(multiple-value-bind (valid-keys keyargs-start)
(compute-applicable-keywords generic-function applicable-methods)
`(let ((.valid-keys. ',valid-keys)
(.keyargs-start. ',keyargs-start))
(check-applicable-keywords)
,call-method))
call-method))
... see the function sb-pcl::standard-compute-effective-method
for details.
(in-package #:cl-user)
(eval-when (:compile-toplevel :load-toplevel :execute)
(ql:quickload "closer-mop"))
(defclass pfft (c2mop:standard-generic-function)
()
(:metaclass c2mop:funcallable-standard-class))
(defmethod c2mop:make-method-lambda
((gf pfft) method lambda-expression environment)
(declare (ignorable method lambda-expression environment))
(call-next-method))
(defgeneric foobar (a &key b)
(:generic-function-class pfft)
(:method (a &key b)
(print (cons a b))))
(defun runtime-error ()
(foobar 3))