X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fcompiler.impure.lisp;h=99ba834b375739c932477a0540ea6fa960d86975;hb=f16e93459cd73b1884e3d576c95e422f8e8a000e;hp=70b7bc795ca297ed87bd4ca237ff8badcccba385;hpb=a28478f4f22bf6753eb18c44d5205726f87a0ead;p=sbcl.git diff --git a/tests/compiler.impure.lisp b/tests/compiler.impure.lisp index 70b7bc7..99ba834 100644 --- a/tests/compiler.impure.lisp +++ b/tests/compiler.impure.lisp @@ -1183,6 +1183,16 @@ (apply #'sb-sequence:make-sequence-like sequence length keys)) (with-test (:name :bug-458354) (assert (equalp #((a b) (a b)) (bug-458354 #(1 2) 2 :initial-element '(a b))))) + +(with-test (:name :bug-542807) + (handler-bind ((style-warning #'error)) + (eval '(defstruct bug-542807 slot))) + (let (conds) + (handler-bind ((style-warning (lambda (c) + (push c conds)))) + (eval '(defstruct bug-542807 slot))) + (assert (= 1 (length conds))) + (assert (typep (car conds) 'sb-kernel::redefinition-with-defun)))) ;;;; tests not in the problem domain, but of the consistency of the ;;;; compiler machinery itself @@ -1934,4 +1944,21 @@ (setf *mystery* :mystery) (assert (eq :ok (test-mystery (make-thing :slot :mystery)))) +;;; Singleton types can also be constant. +(test-util:with-test (:name :propagate-singleton-types-to-eql) + (macrolet ((test (type value &aux (fun (gensym "FUN"))) + `(progn + (declaim (ftype (function () (values ,type &optional)) ,fun)) + (defun ,fun () + ',value) + (lambda (x) + (if (eql x (,fun)) + nil + (eql x (,fun))))))) + (values + (test (eql foo) foo) + (test (integer 0 0) 0) + (test (double-float 0d0 0d0) 0d0) + (test (eql #\c) #\c)))) + ;;; success