X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fcompiler.impure.lisp;h=e63e2d65413a5ed08ed38f4c7c09a9dd111363f0;hb=HEAD;hp=29eb6c36668cb8ae62cb95dbe996145963f6c1a8;hpb=46602bb31b943b1793da732781586c032333c907;p=sbcl.git diff --git a/tests/compiler.impure.lisp b/tests/compiler.impure.lisp index 29eb6c3..e63e2d6 100644 --- a/tests/compiler.impure.lisp +++ b/tests/compiler.impure.lisp @@ -1409,6 +1409,54 @@ (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))) + ;;;; tests not in the problem domain, but of the consistency of the ;;;; compiler machinery itself @@ -2418,4 +2466,15 @@ (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