0.7.11.13:

Bugs.
This commit is contained in:
Alexey Dejneka 2003-01-22 07:37:48 +00:00
parent aa8d6cc84c
commit c5c178ceac
3 changed files with 61 additions and 1 deletions

26
BUGS
View file

@ -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.

View 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.
--------------------------------------------------------------------------------

View 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"