1.0.42.40: replace hardcoded FD-SETSIZE with a groveled one
[sbcl.git] / tests / compiler.pure.lisp
index 52187e5..ff5d41b 100644 (file)
                                                (* x -1.0d0)))
                                1))))
 
-(with-test (:name :data-vector-ref-with-offset-neg-index)
-  (let ((fun (compile nil
-                      `(lambda ()
-                         (let ((table (make-array 7
-                                                  :element-type 'fixnum
-                                                  :initial-contents '(0 1 2 3 4 5 6))))
-                           (loop for n from -3 upto 3
-                                 collect (aref table (+ 3 n))))))))
-    (assert (equal '(0 1 2 3 4 5 6) (funcall fun)))))
-
-(with-test (:name :aref-bignum-offset-and-index)
-  ;; These don't get the data-vector-ref-with-offset vop.
-  (let ((fun (compile nil
-                      `(lambda ()
-                         (let ((table (make-array 7
-                                                  :element-type 'fixnum
-                                                  :initial-contents '(0 1 2 3 4 5 6))))
-                           (loop for n from most-negative-fixnum upto (+ most-negative-fixnum 6)
-                                 collect (aref table (+ #.(1+ most-positive-fixnum) n))))))))
-    (assert (equal '(0 1 2 3 4 5 6) (funcall fun))))
-  (let ((fun (compile nil
-                      `(lambda ()
-                         (let ((table (make-array 7
-                                                  :element-type 'fixnum
-                                                  :initial-contents '(0 1 2 3 4 5 6))))
-                           (loop for n from (+ most-positive-fixnum 1) upto (+ most-positive-fixnum 7)
-                                 collect (aref table (- n (+ most-positive-fixnum 1)))))))))
-    (assert (equal '(0 1 2 3 4 5 6) (funcall fun)))))
-
 (with-test (:name :dotimes-non-integer-counter-value)
   (assert (raises-error? (dotimes (i 8.6)) type-error)))
+
+(with-test (:name :bug-454681)
+  ;; This used to break due to reference to a dead lambda-var during
+  ;; inline expansion.
+  (assert (compile nil
+                   `(lambda ()
+                      (multiple-value-bind (iterator+977 getter+978)
+                          (does-not-exist-but-does-not-matter)
+                        (flet ((iterator+976 ()
+                                 (funcall iterator+977)))
+                          (declare (inline iterator+976))
+                          (let ((iterator+976 #'iterator+976))
+                            (funcall iterator+976))))))))
+
+(with-test (:name :complex-float-local-fun-args)
+  ;; As of 1.0.27.14, the lambda below failed to compile due to the
+  ;; compiler attempting to pass unboxed complex floats to Z and the
+  ;; MOVE-ARG method not expecting the register being used as a
+  ;; temporary frame pointer.  Reported by sykopomp in #lispgames,
+  ;; reduced test case provided by _3b`.
+  (compile nil '(lambda (a)
+                  (labels ((z (b c)
+                              (declare ((complex double-float) b c))
+                              (* b (z b c))))
+                          (loop for i below 10 do
+                                (setf a (z a a)))))))