0.7.11.13:
authorAlexey Dejneka <adejneka@comail.ru>
Wed, 22 Jan 2003 07:37:48 +0000 (07:37 +0000)
committerAlexey Dejneka <adejneka@comail.ru>
Wed, 22 Jan 2003 07:37:48 +0000 (07:37 +0000)
        Bugs.

BUGS
OPTIMIZATIONS
version.lisp-expr

diff --git a/BUGS b/BUGS
index 030c8e9..f4f8464 100644 (file)
--- a/BUGS
+++ b/BUGS
@@ -1209,6 +1209,32 @@ WORKAROUND:
 234:
   (fixed in sbcl-0.7.10.36)
 
+235: "type system and inline expansion"
+  a.
+  (declaim (ftype (function (cons) number) acc))
+  (declaim (inline acc))
+  (defun acc (c)
+    (the number (car c)))
+
+  (defun foo (x y)
+    (values (locally (declare (optimize (safety 0)))
+              (acc x))
+            (locally (declare (optimize (safety 3)))
+              (acc y))))
+
+  (foo '(nil) '(t)) => NIL, T.
+
+  b. (reported by brown on #lisp 2003-01-21)
+
+    (defun find-it (x)
+      (declare (optimize (speed 3) (safety 0)))
+      (declare (notinline mapcar))
+      (let ((z (mapcar #'car x)))
+        (find 'foobar z)))
+
+  Without (DECLARE (NOTINLINE MAPCAR)), Python cannot derive that Z is
+  LIST.
+
 DEFUNCT CATEGORIES OF BUGS
   IR1-#:
     These labels were used for bugs related to the old IR1 interpreter.
index c3c07e8..2b2d63b 100644 (file)
@@ -1,3 +1,4 @@
+#1
 (defun mysl (s)
     (declare (simple-string s))
     (declare (optimize (speed 3) (safety 0) (debug 0)))
@@ -18,6 +19,7 @@
   4: MOVE t23[EAX] => t24[EBX]
 
 --------------------------------------------------------------------------------
+#2
 (defun quux (v)
   (declare (optimize (speed 3) (safety 0) (space 2) (debug 0)))
   (declare (type (simple-array double-float 1) v))
@@ -34,6 +36,7 @@
   and emits costy MOVE ... => FR1.
 
 --------------------------------------------------------------------------------
+#3
 (defun bar (n)
   (declare (optimize (speed 3) (safety 0) (space 2))
            (type fixnum n))
@@ -43,6 +46,7 @@
 
 * IR1 does not optimize away (MAKE-LIST N).
 --------------------------------------------------------------------------------
+#4
 (defun bar (v1 v2)
   (declare (optimize (speed 3) (safety 0) (space 2))
            (type (simple-array base-char 1) v1 v2))
@@ -61,10 +65,12 @@ VOP DATA-VECTOR-SET/SIMPLE-STRING V2!14[EDI] t32[EAX] t30[S2]>t33[CL]
 
 * And why two moves?
 --------------------------------------------------------------------------------
+#5
 (loop repeat 1.5)
 
 uses generic arithmetic
 --------------------------------------------------------------------------------
+#6
 09:49:05 <jtra> I have found a case in those where suboptimal code is
   generate with nested loops, it might be moderately easy to fix that
 09:49:28 <jtra> see
@@ -93,12 +99,14 @@ uses generic arithmetic
                 (incf x)))))))
    (format t "~A~%" x)))
 --------------------------------------------------------------------------------
+#7
 (defun foo (x)
   (declare (optimize speed (debug 0)))
   (if (< x 0) x (foo (1- x))))
 
 SBCL generates a full call of FOO (but CMUCL does not).
 --------------------------------------------------------------------------------
+#8
 (defun foo (d)
   (declare (optimize (speed 3) (safety 0) (debug 0)))
   (declare (type (double-float 0d0 1d0) d))
@@ -120,6 +128,7 @@ The initial binding is effectless, and without it X is of type
 DOUBLE-FLOAT. Unhopefully, IR1 does not optimize away effectless
 SETs/bindings, and IR2 does not perform type inference.
 --------------------------------------------------------------------------------
+#9
 (defun foo (x)
   (if (= (cond ((irgh x) 0)
                ((buh x) 1)
@@ -135,3 +144,28 @@ This code could be optimized to
         ((buh x) :no)
         (t :no)))
 --------------------------------------------------------------------------------
+#10
+Reported by Robert E. Brown on sbcl-devel 2003-01-21:
+
+(defstruct trace-info
+  (foo nil :type (or null function)))
+
+(defun bad (x)
+  (declare (optimize (speed 3) (safety 0)))
+  (let ((wow (trace-info-foo x)))
+    (or (not wow) (funcall wow 1 2 3))))
+
+Python does not derive that FUNCALL is applied to FUNCTION.
+
+(OR ...) is equivalent to
+
+(LET ((G2407 (NOT WOW)))
+  (IF G2407 G2407 (FUNCALL WOW 1 2 3)))
+
+or to
+
+(LET ((G2407 (IF WOW NIL T)))
+  (IF G2407 G2407 (FUNCALL WOW 1 2 3)))
+
+so this is similar to #9.
+--------------------------------------------------------------------------------
index e538e1c..2ba3a60 100644 (file)
@@ -18,4 +18,4 @@
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
 
-"0.7.11.12"
+"0.7.11.13"