mirror of
git://git.code.sf.net/p/sbcl/sbcl
synced 2026-09-10 07:26:40 -04:00
0.7.11.13:
Bugs.
This commit is contained in:
parent
aa8d6cc84c
commit
c5c178ceac
26
BUGS
26
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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
--------------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Reference in a new issue