Skip to content

Commit fd79e33

Browse files
committed
1.0.29.1: fix FILL
* Imaginary parts were messed up on 64 bit platforms when filling arrays of (COMPLEX SINGLE-FLOAT). Thanks to Paul Khuong. * Also delay the transform of FILL till constraint propagation has run, to get the constant argument form MAKE-ARRAY in properly. * ...and eradicate remaining references to the SUPPORT file.
1 parent e834360 commit fd79e33

8 files changed

+56
-34
lines changed

INSTALL

+6-2
Original file line numberDiff line numberDiff line change
@@ -259,5 +259,9 @@ INSTALLING SBCL
259259
by e.g. testing during the monthly freeze periods, and most
260260
importantly by reporting any problems.
261261

262-
If you need support beyond what is available on the mailing lists,
263-
see "Consultants" in the "SUPPORT" file.
262+
For further support, see Getting Support and Reporting Bugs
263+
in the manual, or
264+
265+
http://www.sbcl.org/manual/Getting-Support-and-Reporting-Bugs.html
266+
267+
if you do not have the manual for some reason.

NEWS

+5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
;;;; -*- coding: utf-8; fill-column: 78 -*-
2+
* bug fix: on 64 bit platforms FILL worked incorrectly on arrays with
3+
upgraded element type (COMPLEX SINGLE-FLOAT), regression from 1.0.28.55.
4+
(thanks to Paul Khuong)
5+
6+
changes in sbcl-1.0.29 relative to 1.0.28:
27
* IMPORTANT: bug database has moved from the BUGS file to Launchpad
38
https://bugs.launchpad.net/sbcl
49
Bugs can be reported directly there, or by sending email to

binary-distribution.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ set -e
1212
b=${1:?"missing base directory name argument"}
1313
tar -cf $b-binary.tar \
1414
$b/output/sbcl.core $b/src/runtime/sbcl \
15-
$b/BUGS $b/COPYING $b/CREDITS $b/INSTALL $b/NEWS $b/README $b/SUPPORT \
15+
$b/BUGS $b/COPYING $b/CREDITS $b/INSTALL $b/NEWS $b/README \
1616
$b/install.sh $b/find-gnumake.sh $b/sbcl-pwd.sh $b/run-sbcl.sh \
1717
$b/doc/sbcl.1 \
1818
$b/pubring.pgp \

html-distribution.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ set -e
88
b=${1:?missing base directory name argument}
99
tar cf $b-documentation-html.tar \
1010
`find $b -name '*.htm*'` \
11-
$b/COPYING $b/CREDITS $b/README $b/SUPPORT \
11+
$b/COPYING $b/CREDITS $b/README \
1212
$b/pubring.pgp

install.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ do
138138
&& echo " html $BUILD_ROOT$DOC_DIR/html/`basename $html`/index.html"
139139
done
140140

141-
for f in BUGS SUPPORT CREDITS COPYING NEWS
141+
for f in BUGS CREDITS COPYING NEWS
142142
do
143143
cp $f "$BUILD_ROOT$DOC_DIR"/
144144
done

src/compiler/seqtran.lisp

+32-28
Original file line numberDiff line numberDiff line change
@@ -569,40 +569,44 @@
569569
#!+#.(cl:if (cl:= 64 sb!vm:n-word-bits) '(and) '(or))
570570
(:complex-single-float
571571
(logior (ash (single-float-bits (imagpart tmp)) 32)
572-
(single-float-bits (realpart tmp)))))))
572+
(ldb (byte 32 0)
573+
(single-float-bits (realpart tmp))))))))
573574
(res bits))
574575
(loop for i of-type sb!vm:word from n-bits by n-bits
575576
until (= i sb!vm:n-word-bits)
576577
do (setf res (ldb (byte sb!vm:n-word-bits 0)
577578
(logior res (ash bits i)))))
578579
res))
579-
`(let* ((bits (ldb (byte ,n-bits 0)
580-
,(ecase kind
581-
(:tagged
582-
`(ash item ,sb!vm:n-fixnum-tag-bits))
583-
(:char
584-
`(char-code item))
585-
(:bits
586-
`item)
587-
(:single-float
588-
`(single-float-bits item))
589-
#!+#.(cl:if (cl:= 64 sb!vm:n-word-bits) '(and) '(or))
590-
(:double-float
591-
`(logior (ash (double-float-high-bits item) 32)
592-
(double-float-low-bits item)))
593-
#!+#.(cl:if (cl:= 64 sb!vm:n-word-bits) '(and) '(or))
594-
(:complex-single-float
595-
`(logior (ash (single-float-bits (imagpart item)) 32)
596-
(single-float-bits (realpart item)))))))
597-
(res bits))
598-
(declare (type sb!vm:word res))
599-
,@(unless (= sb!vm:n-word-bits n-bits)
600-
`((loop for i of-type sb!vm:word from ,n-bits by ,n-bits
601-
until (= i sb!vm:n-word-bits)
602-
do (setf res
603-
(ldb (byte ,sb!vm:n-word-bits 0)
604-
(logior res (ash bits (truly-the (integer 0 ,(- sb!vm:n-word-bits n-bits)) i))))))))
605-
res))))
580+
(progn
581+
(delay-ir1-transform node :constraint)
582+
`(let* ((bits (ldb (byte ,n-bits 0)
583+
,(ecase kind
584+
(:tagged
585+
`(ash item ,sb!vm:n-fixnum-tag-bits))
586+
(:char
587+
`(char-code item))
588+
(:bits
589+
`item)
590+
(:single-float
591+
`(single-float-bits item))
592+
#!+#.(cl:if (cl:= 64 sb!vm:n-word-bits) '(and) '(or))
593+
(:double-float
594+
`(logior (ash (double-float-high-bits item) 32)
595+
(double-float-low-bits item)))
596+
#!+#.(cl:if (cl:= 64 sb!vm:n-word-bits) '(and) '(or))
597+
(:complex-single-float
598+
`(logior (ash (single-float-bits (imagpart item)) 32)
599+
(ldb (byte 32 0)
600+
(single-float-bits (realpart item))))))))
601+
(res bits))
602+
(declare (type sb!vm:word res))
603+
,@(unless (= sb!vm:n-word-bits n-bits)
604+
`((loop for i of-type sb!vm:word from ,n-bits by ,n-bits
605+
until (= i sb!vm:n-word-bits)
606+
do (setf res
607+
(ldb (byte ,sb!vm:n-word-bits 0)
608+
(logior res (ash bits (truly-the (integer 0 ,(- sb!vm:n-word-bits n-bits)) i))))))))
609+
res)))))
606610
(values
607611
`(with-array-data ((data seq)
608612
(start start)

tests/compiler.impure.lisp

+9
Original file line numberDiff line numberDiff line change
@@ -1084,6 +1084,15 @@
10841084
(assert (equal "GOOD!"
10851085
(progv '(*hairy-progv-var*) (list (eval "GOOD!"))
10861086
*hairy-progv-var*))))
1087+
1088+
(with-test (:name :fill-complex-single-float)
1089+
(assert (eql #c(-1.0 2.0)
1090+
(aref (funcall
1091+
(lambda ()
1092+
(make-array 2
1093+
:element-type '(complex single-float)
1094+
:initial-element #c(-1.0 2.0))))
1095+
0))))
10871096

10881097
;;;; tests not in the problem domain, but of the consistency of the
10891098
;;;; compiler machinery itself

version.lisp-expr

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,4 @@
1717
;;; checkins which aren't released. (And occasionally for internal
1818
;;; versions, especially for internal versions off the main CVS
1919
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
20-
"1.0.29"
20+
"1.0.29.1"

0 commit comments

Comments
 (0)