X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fcompiler.pure.lisp;h=433b520533f6fcf5364f9bd64771f0d6748a8bbe;hb=1b650be8b800cf96e2c268ae317fb26d0bf36827;hp=948d419bbc8d7b2d882a2efda56e893b4d0da6e4;hpb=c58795f37078f5900aff5dc4a3712fbadd2d432e;p=sbcl.git diff --git a/tests/compiler.pure.lisp b/tests/compiler.pure.lisp index 948d419..433b520 100644 --- a/tests/compiler.pure.lisp +++ b/tests/compiler.pure.lisp @@ -520,3 +520,45 @@ (+ i 2))) (sb-ext:compiler-note (c) (return :good)))) :good)) + +;;; bug 277: IGNORE/IGNORABLE declarations should be acceptable for +;;; symbol macros +(assert (not (nth-value 1 (compile nil '(lambda (u v) + (symbol-macrolet ((x u) + (y v)) + (declare (ignore x) + (ignorable y)) + (list u v))))))) + +;;; bug reported by Paul Dietz: wrong optimizer for (EXPT ... 0) +(loop for (x type) in + '((14 integer) + (14 rational) + (-14/3 (rational -8 11)) + (3s0 short-float) + (4f0 single-float) + (5d0 double-float) + (6l0 long-float) + (14 real) + (13/2 real) + (2s0 real) + (2d0 real) + (#c(-3 4) (complex fixnum)) + (#c(-3 4) (complex rational)) + (#c(-3/7 4) (complex rational)) + (#c(2s0 3s0) (complex short-float)) + (#c(2f0 3f0) (complex single-float)) + (#c(2d0 3d0) (complex double-float)) + (#c(2l0 3l0) (complex long-float)) + (#c(2d0 3s0) (complex float)) + (#c(2 3f0) (complex real)) + (#c(2 3d0) (complex real)) + (#c(-3/7 4) (complex real)) + (#c(-3/7 4) complex) + (#c(2 3l0) complex)) + do (dolist (zero '(0 0s0 0f0 0d0 0l0)) + (dolist (real-zero (list zero (- zero))) + (let* ((src `(lambda (x) (expt (the ,type x) ,real-zero))) + (fun (compile nil src)) + (result (1+ (funcall (eval #'*) x real-zero)))) + (assert (eql result (funcall fun x)))))))