Update of /cvsroot/sbcl/sbcl
In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv4741
Modified Files:
BUGS NEWS package-data-list.lisp-expr version.lisp-expr
Log Message:
1.0.18.2: more conservative interval artihmetic
* In SAFELY-BINOP, when the other argument must be coerced to single
float, punt if it is an integer that cannot be exactly represented
as a single float.
* Fixes bug 420, and a whole slew of MISC failures in ansi-tests --
including the ones that used to cause a hard crash or a hang: cvs
up -dPC your ansi-test trees, and should huzzah!
Index: BUGS
===================================================================
RCS file: /cvsroot/sbcl/sbcl/BUGS,v
retrieving revision 1.538
retrieving revision 1.539
diff -u -d -r1.538 -r1.539
--- BUGS 17 May 2008 20:05:09 -0000 1.538
+++ BUGS 30 Jun 2008 09:00:37 -0000 1.539
@@ -1827,53 +1827,6 @@
storing the relevant LAMBDA-VARs in a :DYNAMIC-EXTENT cleanup, and
teaching stack analysis how to deal with them.
-420: The MISC.556 test from gcl/ansi-tests/misc.lsp fails hard.
-
-In sbcl-1.0.13 on Linux/x86, executing
- (FUNCALL
- (COMPILE NIL
- '(LAMBDA (P1 P2)
- (DECLARE
- (OPTIMIZE (SPEED 1) (SAFETY 0) (DEBUG 0) (SPACE 0))
- (TYPE (MEMBER 8174.8604) P1) (TYPE (MEMBER -95195347) P2))
- (FLOOR P1 P2)))
- 8174.8604 -95195347)
-interactively causes
- SB-SYS:MEMORY-FAULT-ERROR: Unhandled memory fault at #x8.
-The gcl/ansi-tests/doit.lisp program terminates prematurely shortly after
-MISC.556 by falling into gdb with
- fatal error encountered in SBCL pid 2827: Unhandled SIGILL
-unless the MISC.556 test is commented out.
-
-Analysis: + and a number of other arithmetic functions exhibit the
-same behaviour. Here's the underlying problem: On x86 we perform
-single-float + integer normally using double-precision, and then
-coerce the result back to single-float. (The FILD instruction always
-gives us a double-float, and unless we do MOVE-FROM-SINGLE it remains
-one. Or so it seems to me, and that would also explain the observed
-behaviour below.)
-
-During IR1 we derive the types for both
-
- (+ <single> <integer>) ; uses double-precision
- (+ <single> (FLOAT <integer> <single>)) ; uses single-precision
-
-and get a mismatch for a number of unlucky arguments. This leads to
-derived result type NIL, and ends up flushing the whole whole
-operation -- and finally we generate code without a return sequence,
-and fall through to whatever.
-
-The use of double-precision in the first case appears to be an
-(un)happy accident -- interval arithmetic gives us the
-double-precision result because that's what the backend does.
-
- (+ 8172.0 (coerce -95195347 'single-float)) ; => -9.518717e7
- (+ 8172.0 -95195347) ; => -9.5187176e7
- (coerce (+ 8172.0 (coerce -95195347 'double-float)) 'single-float)
- ; => -9.5187176e7
-
-Which should be fixed, the IR1, or the backend?
-
421: READ-CHAR-NO-HANG misbehaviour on Windows Console:
It seems that on Windows READ-CHAR-NO-HANG hangs if the user
Index: NEWS
===================================================================
RCS file: /cvsroot/sbcl/sbcl/NEWS,v
retrieving revision 1.1360
retrieving revision 1.1361
diff -u -d -r1.1360 -r1.1361
--- NEWS 30 Jun 2008 08:35:58 -0000 1.1360
+++ NEWS 30 Jun 2008 09:00:37 -0000 1.1361
@@ -2,6 +2,9 @@
changes in sbcl-1.0.19 relative to 1.0.18:
* bug fix: compiler no longer makes erronous assumptions in the
presense of non-foldable SATISFIES types.
+ * fixed some bugs revealed by Paul Dietz' test suite:
+ ** interval arithmetic during type derivation used inexact integer
+ to single-float coercions.
changes in sbcl-1.0.18 relative to 1.0.17:
* minor incompatible change: SB-SPROF:WITH-PROFILING now by default
Index: package-data-list.lisp-expr
===================================================================
RCS file: /cvsroot/sbcl/sbcl/package-data-list.lisp-expr,v
retrieving revision 1.454
retrieving revision 1.455
diff -u -d -r1.454 -r1.455
--- package-data-list.lisp-expr 6 Jun 2008 11:13:41 -0000 1.454
+++ package-data-list.lisp-expr 30 Jun 2008 09:00:37 -0000 1.455
@@ -1403,7 +1403,12 @@
"MAPC-MEMBER-TYPE-MEMBERS" "MAPCAR-MEMBER-TYPE-MEMBERS"
"MEMBER-TYPE" "MEMBER-TYPE-MEMBERS" "MEMBER-TYPE-P"
"MEMBER-TYPE-SIZE" "MERGE-BITS"
- "MODIFIED-NUMERIC-TYPE" "MUTATOR-SELF" "NAMED-TYPE"
+ "MODIFIED-NUMERIC-TYPE"
+ "MOST-NEGATIVE-EXACTLY-DOUBLE-FLOAT-FIXNUM"
+ "MOST-NEGATIVE-EXACTLY-SINGLE-FLOAT-FIXNUM"
+ "MOST-POSITIVE-EXACTLY-DOUBLE-FLOAT-FIXNUM"
+ "MOST-POSITIVE-EXACTLY-SINGLE-FLOAT-FIXNUM"
+ "MUTATOR-SELF" "NAMED-TYPE"
"NAMED-TYPE-NAME" "NAMED-TYPE-P" "NATIVE-BYTE-ORDER"
"NEGATE" "NEGATION-TYPE" "NEGATION-TYPE-TYPE"
"NEVER-SUBTYPEP" "NIL-ARRAY-ACCESSED-ERROR"
Index: version.lisp-expr
===================================================================
RCS file: /cvsroot/sbcl/sbcl/version.lisp-expr,v
retrieving revision 1.4004
retrieving revision 1.4005
diff -u -d -r1.4004 -r1.4005
--- version.lisp-expr 30 Jun 2008 08:35:58 -0000 1.4004
+++ version.lisp-expr 30 Jun 2008 09:00:38 -0000 1.4005
@@ -17,4 +17,4 @@
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"1.0.18.1"
+"1.0.18.2"
|