(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)))
+ (assert
+ (handler-case
+ (and
+ (compile nil `(lambda () #'(setf test-984)))
+ t)
+ (warning () nil))))
+
+(with-test (:name :compile-setf-function)
+ (defun (setf compile-setf) ())
+ (assert (equal (compile '(setf compile-setf))
+ '(setf compile-setf))))
+
+(declaim (inline cut-test))
+(defun cut-test (b)
+ (cond ((integerp b) b)
+ (b 469)
+ (t 2)))
+
+(with-test (:name :cut-to-width-bad-constant)
+ (assert (= (funcall (compile nil
+ `(lambda ()
+ (multiple-value-bind (a b) (values t t)
+ (declare (ignore b))
+ (mask-field (byte 10 0) (cut-test a))))))
+ 469)))
+
\f
;;;; tests not in the problem domain, but of the consistency of the
;;;; compiler machinery itself
(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