X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fcompiler.impure-cload.lisp;h=ade85555fec839e9178398846f63a11888b711e8;hb=8a19ff566e3a1a43cb3b2d11d2781a1c89981f43;hp=7d5e99d1d483260777411c95cd293868dcc18c66;hpb=4898ef32c639b1c7f4ee13a5ba566ce6debd03e6;p=sbcl.git diff --git a/tests/compiler.impure-cload.lisp b/tests/compiler.impure-cload.lisp index 7d5e99d..ade8555 100644 --- a/tests/compiler.impure-cload.lisp +++ b/tests/compiler.impure-cload.lisp @@ -1,5 +1,7 @@ (eval-when (:compile-toplevel :load-toplevel :execute) (load "assertoid.lisp") + (load "compiler-test-util.lisp") + (load "test-util.lisp") (use-package "ASSERTOID")) ;;; bug 254: compiler falure @@ -442,5 +444,117 @@ (compiled-res (funcall (compile nil form))) (real-res (- 1 (aref (funcall (eval #'bit-not) v) 0)))) (assert (equal compiled-res real-res))) - -(sb-ext:quit :unix-status 104) + +;; bug reported on sbcl-devel by Hannu Koivisto on 2005-08-10 +(defvar *hannu-trap* nil) +(progv '(*hannu-trap*) '() + (setq *hannu-trap* t)) +(assert (not *hannu-trap*)) + +;;; bug reported on sbcl-help by Vasile Rotaru +(let* ((initial-size (expt 2 16)) + (prime-table (make-array initial-size + :element-type 'integer)) + (first-primes #(5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 + 73 + 79 83 89 97 101 103 107 109 113 127 131 137 139 149 + 151 157 163 167 173 179 181 191 193 197 199 211 223 + 227 229 233 239 241 251 257 263 269 271 277 281)) + (count 0) + (increment 2)) + + (defun largest-prime-so-far () + (aref prime-table (1- count))) + (defun add-prime (prime) + (setf (aref prime-table count) prime) (incf count)) + (defun init-table () + (map 'nil #'add-prime first-primes)) + (defun next-candidate (candidate) + (prog1 (+ candidate increment) + (ecase increment + (2 (setf increment 4)) + (4 (setf increment 2))))) + (defun prime-p (n) + (let ((sqrt-n (truncate (sqrt n)))) + (dotimes (i count) + (let ((prime (aref prime-table i))) + (when (> prime sqrt-n) + (return-from prime-p t)) + (when (zerop (mod n prime)) + (return-from prime-p nil)))) + (error "~&prime-table too small: ~A ~A~%" n + (largest-prime-so-far)))) + (defun generate-primes (required) + (do ((candidate (next-candidate (largest-prime-so-far)) + (next-candidate candidate))) + ((> candidate required)) + (when (prime-p candidate) + (add-prime candidate)))) + ;; + (init-table)) + +;;; Bug in the fopcompiler's handling of LOCALLY pre-0.9.14.8 + +(defvar *a* 1) + +(setf *a* + (locally + (declare) + 2)) + +;;; Bug in the interaction of BIND-SENTINEL and UNBIND-TO-HERE, as +;;; used by PROGV. + +(defvar *foo-1* nil) +(defvar *foo-2* nil) + +(defun foo () + (declare (optimize (debug 2))) + (let ((*foo-1* nil)) + (progv + (list '*foo-2*) + (list nil) + (write-line "foo-2")) + (write-line "foo-1")) + (write-line "foo-0")) + +(foo) + +;;; LOAD-TIME-VALUE smartness +(defun load-time-value-type-derivation-test-1 () + (ctu:compiler-derived-type (load-time-value (cons 'foo 0)))) +(defun load-time-value-type-derivation-test-2 () + (ctu:compiler-derived-type (load-time-value (+ (or *print-length* 0) 10)))) +(defun load-time-value-auto-read-only-p () + (load-time-value (random most-positive-fixnum))) +(defun load-time-value-boring () + (load-time-value (cons t t))) +(test-util:with-test (:name (load-time-value :type-smartness/cload)) + (assert (eq 'cons (load-time-value-type-derivation-test-1))) + (assert (equal '(integer 10) (load-time-value-type-derivation-test-2))) + (assert (not (ctu:find-value-cell-values #'load-time-value-auto-read-only-p))) + (assert (ctu:find-value-cell-values #'load-time-value-boring))) + +(defun regression-1.0.29.54 () + (logior (1+ most-positive-fixnum) + (load-time-value (the fixnum (eval 1)) t))) + +(test-util:with-test (:name :regression-1.0.29.54) + (assert (= (+ most-positive-fixnum 2) (regression-1.0.29.54))) + (assert (eq 42 + (funcall (compile nil + `(lambda () + (load-time-value (values 42)))))))) + +(defun mv-call-regression-1.0.43.57-foo (a c d x y) + (values a c d x y)) +(defun mv-call-regression-1.0.43.57-bar (a b c d) + (declare (number a b c d)) + (values a b c d)) +(defun mv-call-regression-1.0.43.57-quux (a sxx sxy syy) + (multiple-value-call #'mv-call-regression-1.0.43.57-foo + (mv-call-regression-1.0.43.57-bar sxx sxy sxy syy) + a)) +(test-util:with-test (:name :mv-call-regression-1.0.43.57) + ;; This used to signal a bogus argument-count error. + (mv-call-regression-1.0.43.57-quux 1s0 10s0 1s0 10s0))