(compile nil `(lambda (x) (cmacro-with-tricky-key x 42)))
(assert (and (not warn) (not fail)))
(assert (string= "fun=42" (funcall fun 'tricky-key)))))
+
+(defun test-function-983 (x) x)
+(define-compiler-macro test-function-983 (x) x)
+
+(with-test (:name funcall-compiler-macro)
+ (assert
+ (handler-case
+ (and (compile nil
+ `(lambda ()
+ (funcall (function test-function-983 junk) 1)))
+ nil)
+ (sb-c:compiler-error () t))))
+
+(defsetf test-984 %test-984)
+
+(with-test (:name :setf-function-with-setf-expander)
+ (assert
+ (handler-case
+ (and
+ (defun (setf test-984) ())
+ nil)
+ (style-warning () t))))
\f
;;;; tests not in the problem domain, but of the consistency of the
;;;; compiler machinery itself
(compile nil `(lambda (x)
(norm-1177703 (vec-1177703 x)))))
+(declaim (inline call-1035721))
+(defun call-1035721 (function)
+ (lambda (x)
+ (funcall function x)))
+
+(declaim (inline identity-1035721))
+(defun identity-1035721 (x)
+ x)
+
+(test-util:with-test (:name :bug-1035721)
+ (compile nil `(lambda ()
+ (list
+ (call-1035721 #'identity-1035721)
+ (lambda (x)
+ (identity-1035721 x))))))
+
+(test-util:with-test (:name :expt-type-derivation-and-method-redefinition)
+ (defmethod expt-type-derivation ((x list) &optional (y 0.0))
+ (declare (type float y))
+ (expt 2 y))
+ ;; the redefinition triggers a type lookup of the old
+ ;; fast-method-function's type, which had a bogus type specifier of
+ ;; the form (double-float 0) from EXPT type derivation
+ (defmethod expt-type-derivation ((x list) &optional (y 0.0))
+ (declare (type float y))
+ (expt 2 y)))
;;; success