From: Nikodemus S. <de...@us...> - 2008-06-30 09:00:43
|
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" |