0.8.20.21:
[sbcl.git] / tests / compiler.pure.lisp
index b9dacd9..cf08c46 100644 (file)
         (funcall f array1)
         (setf (aref array2 i) v)
         (assert (equal array1 array2))))))
+
+(let ((fn (compile nil '(lambda (x)
+                         (declare (type bit x))
+                         (declare (optimize speed))
+                         (let ((b (make-array 64 :element-type 'bit
+                                              :initial-element 0)))
+                           (count x b))))))
+  (assert (= (funcall fn 0) 64))
+  (assert (= (funcall fn 1) 0)))
+
+(let ((fn (compile nil '(lambda (x y)
+                         (declare (type simple-bit-vector x y))
+                         (declare (optimize speed))
+                         (equal x y)))))
+  (assert (funcall 
+          fn 
+          (make-array 64 :element-type 'bit :initial-element 0)
+          (make-array 64 :element-type 'bit :initial-element 0)))
+  (assert (not 
+          (funcall 
+           fn
+           (make-array 64 :element-type 'bit :initial-element 0)
+           (let ((b (make-array 64 :element-type 'bit :initial-element 0)))
+             (setf (sbit b 63) 1)
+             b)))))
+
+;;; MISC.535: compiler failure
+(let ((c0 #c(4196.088977268509d0 -15943.3603515625d0)))
+    (assert (not (funcall
+     (compile
+      nil
+      `(lambda (p1 p2)
+        (declare (optimize speed (safety 1))
+                 (type (eql ,c0) p1)
+                 (type number p2))
+        (eql (the (complex double-float) p1) p2)))
+     c0 #c(12 612/979)))))
+
+;;; reported by Lutz Euler: we shouldn't signal a compiler note for
+;;; simple-bit-vector functions.
+(handler-bind ((sb-ext:compiler-note #'error))
+  (compile nil '(lambda (x)
+                (declare (type simple-bit-vector x))
+                (count 1 x))))
+(handler-bind ((sb-ext:compiler-note #'error))
+  (compile nil '(lambda (x y)
+                (declare (type simple-bit-vector x y))
+                (equal x y))))