From f8535c1984748199fef344f9ba64f1ccab86bd53 Mon Sep 17 00:00:00 2001 From: Nikodemus Siivola Date: Sun, 13 Jan 2008 18:08:01 +0000 Subject: [PATCH] 1.0.13.27: commentary on BUG #420 ...adapted from sbcl-devel. --- BUGS | 29 +++++++++++++++++++++++++++++ version.lisp-expr | 2 +- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/BUGS b/BUGS index 3dd6eec87..f28681945 100644 --- a/BUGS +++ b/BUGS @@ -1881,6 +1881,35 @@ 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 + + (+ ) ; uses double-precision + (+ (FLOAT )) ; 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 diff --git a/version.lisp-expr b/version.lisp-expr index 18880e0bc..77bbe2ad4 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -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.13.26" +"1.0.13.27" -- 2.11.4.GIT