0.8.13.25:
[sbcl.git] / tests / arith.pure.lisp
index 624abd3..8d1d12b 100644 (file)
   (let* ((x (random most-positive-fixnum))
         (x2 (* x 2))
         (x3 (* x 3)))
-    (let ((fn (handler-bind (;; broken by rearrangement of
-                            ;; multiplication strength reduction in
-                            ;; sbcl-0.8.4.12
-                            #+nil
-                            (sb-ext:compiler-note #'error))
+    (let ((fn (handler-bind ((sb-ext:compiler-note
+                              (lambda (c)
+                                (when (<= x3 most-positive-fixnum)
+                                  (error c)))))
                (compile nil
                         `(lambda (y)
                            (declare (optimize speed) (type (integer 0 3) y))
 ;;; ASH of a negative bignum by a bignum count would erroneously
 ;;; return 0 prior to sbcl-0.8.4.4
 (assert (= (ash (1- most-negative-fixnum) (1- most-negative-fixnum)) -1))
+
+;;; Whoops.  Too much optimization in division operators for 0
+;;; divisor.
+(macrolet ((frob (name)
+            `(let ((fn (compile nil '(lambda (x)
+                                      (declare (optimize speed) (fixnum x))
+                                      (,name x 0)))))
+              (assert (raises-error? (funcall fn 1) division-by-zero)))))
+  (frob mod)
+  (frob truncate)
+  (frob rem)
+  (frob /)
+  (frob floor)
+  (frob ceiling))