(let* ((x (random most-positive-fixnum))
(x2 (* x 2))
(x3 (* x 3)))
- (let ((fn (handler-bind ((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))
((89 125 16) (ASH A (MIN 18 -706)))
(T (DPB -3 (BYTE 30 30) -1)))))))
(assert (= (funcall fn 1227072 -529823 -18 -792831) -2147483649)))
+
+;;; 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))