cmucl-cvs
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- 1 participants
- 3693 discussions
[Git][cmucl/cmucl][issue-456-more-accurate-complex-div] 6 commits: Fix #460: Exit with error if main unit-tests fail
by Raymond Toy (@rtoy) 07 Jan '26
by Raymond Toy (@rtoy) 07 Jan '26
07 Jan '26
Raymond Toy pushed to branch issue-456-more-accurate-complex-div at cmucl / cmucl
Commits:
99d8540a by Raymond Toy at 2026-01-02T10:05:16-08:00
Fix #460: Exit with error if main unit-tests fail
- - - - -
28de6c68 by Raymond Toy at 2026-01-02T10:05:17-08:00
Merge branch 'issue-460-ci-fails-if-unit-tests-do' into 'master'
Fix #460: Exit with error if main unit-tests fail
Closes #460
See merge request cmucl/cmucl!340
- - - - -
58358927 by Raymond Toy at 2026-01-02T14:27:25-08:00
Fix #454 and #138: Signal errors for bad components for make-pathname
- - - - -
97824b42 by Raymond Toy at 2026-01-02T14:27:25-08:00
Merge branch 'issue-454-signal-error-for-bad-pathname-parts' into 'master'
Fix #454 and #138: Signal errors for bad components for make-pathname
Closes #454 and #138
See merge request cmucl/cmucl!333
- - - - -
1f8eb92e by Raymond Toy at 2026-01-07T08:00:45-08:00
Merge branch 'master' into issue-456-more-accurate-complex-div
- - - - -
7457eadb by Raymond Toy at 2026-01-07T10:21:05-08:00
Block compile cdiv with two-arg-/
To reduce consing, block compile cdiv-double-float and friends with
two-arg-/. This allows two-arg-/ to use the local-call convention to
jump directly to the no-arg parsing section, skipping the parsing of
the args.
- - - - -
7 changed files:
- bin/run-unit-tests.sh
- src/code/numbers.lisp
- src/code/pathname.lisp
- src/i18n/locale/cmucl.pot
- tests/float-x86.lisp
- tests/os.lisp
- tests/pathname.lisp
Changes:
=====================================
bin/run-unit-tests.sh
=====================================
@@ -9,6 +9,8 @@ usage() {
echo "run-tests.sh [-?h] [-d test-dir] [-l lisp] [tests]"
echo " -d test-dir Directory containing the unit test files"
echo " -l lisp Lisp to use for the tests; defaults to lisp"
+ echo " -p Skip package-local-nicknames test"
+ echo " -u Skip lisp-unit tests"
echo " -? This help message"
echo " -h This help message"
echo ""
@@ -25,11 +27,13 @@ usage() {
}
LISP=lisp
-while getopts "h?l:d:" arg
+while getopts "puh?l:d:" arg
do
case $arg in
l) LISP=$OPTARG ;;
d) TESTDIR=$OPTARG ;;
+ p) SKIP_PLN=yes ;;
+ u) SKIP_UNIT=yes ;;
h|\?) usage ;;
esac
done
@@ -43,12 +47,19 @@ mkdir test-tmp
ln -s /bin/ls test-tmp/ls-link
# Set the timestamps on 64-bit-timestamp-2038.txt and
-# 64-bit-timestamp-2106.txt. The time for the first file is a
-# negative value for a 32-bit time_t. The second file won't fit in a
-# 32-bit time_t value. It's ok if this doesn't work in general, as
-# long as it works on Linux for the stat test in tests/os.lisp.
-touch -d "1 April 2038" tests/resources/64-bit-timestamp-2038.txt
-touch -d "1 April 2106" tests/resources/64-bit-timestamp-2106.txt
+# 64-bit-timestamp-2106.txt, but only for OSes where we know this
+# works. (This is so we don't an annoying error message from touch
+# that doesn't accept the -d option, like MacOS 10.13.) The time for
+# the first file is a negative value for a 32-bit time_t. The second
+# file won't fit in a 32-bit time_t value. It's ok if this doesn't
+# work in general, as long as it works on Linux for the stat test in
+# tests/os.lisp.
+case `uname -s` in
+ Linux)
+ touch -d "1 April 2038" tests/resources/64-bit-timestamp-2038.txt
+ touch -d "1 April 2106" tests/resources/64-bit-timestamp-2106.txt
+ ;;
+esac
# Cleanup temp files and directories that we created during testing.
function cleanup {
@@ -69,39 +80,47 @@ fi
# gcc since clang isn't always available.
(cd "$TESTDIR" || exit 1 ; gcc -m32 -O3 -c test-return.c)
-if [ $# -eq 0 ]; then
- # Test directory arg for run-all-tests if a non-default
- # No args so run all the tests
- $LISP -nositeinit -noinit -load "$TESTDIR"/run-tests.lisp -eval "(cmucl-test-runner:run-all-tests ${TESTDIRARG})"
-else
- # Run selected files. Convert each file name to uppercase and append "-TESTS"
- result=""
- for f in "$@"
- do
- new=$(echo "$f" | tr '[:lower:]' '[:upper:]')
- result="$result "\"$new-TESTS\"
- done
- $LISP -nositeinit -noinit -load "$TESTDIR"/run-tests.lisp -eval "(progn (cmucl-test-runner:load-test-files) (cmucl-test-runner:run-test $result))"
+if [ "$SKIP_UNIT" != "yes" ]; then
+ if [ $# -eq 0 ]; then
+ # Test directory arg for run-all-tests if a non-default
+ # No args so run all the tests
+ $LISP -nositeinit -noinit -load "$TESTDIR"/run-tests.lisp -eval "(cmucl-test-runner:run-all-tests ${TESTDIRARG})" ||
+ exit 1
+ else
+ # Run selected files. Convert each file name to uppercase and append "-TESTS"
+ result=""
+ for f in "$@"
+ do
+ new=$(echo "$f" | tr '[:lower:]' '[:upper:]')
+ result="$result "\"$new-TESTS\"
+ done
+ # Run unit tests. Exits with a non-zero code if there's a failure.
+
+ $LISP -nositeinit -noinit -load "$TESTDIR"/run-tests.lisp -eval "(progn (cmucl-test-runner:load-test-files) (cmucl-test-runner:run-test $result))" ||
+ exit 1
+ fi
fi
## Now run tests for trivial-package-local-nicknames
-REPO=trivial-package-local-nicknames
-BRANCH=cmucl-updates
+if [ "$SKIP_PLN" != "yes" ]; then
+ REPO=trivial-package-local-nicknames
+ BRANCH=cmucl-updates
-set -x
-if [ -d ../$REPO ]; then
- (cd ../$REPO || exit 1; git stash; git checkout $BRANCH; git pull --rebase)
-else
- (cd ..; git clone https://gitlab.common-lisp.net/cmucl/$REPO.git)
-fi
+ set -x
+ if [ -d ../$REPO ]; then
+ (cd ../$REPO || exit 1; git stash; git checkout $BRANCH; git pull --rebase)
+ else
+ (cd ..; git clone https://gitlab.common-lisp.net/cmucl/$REPO.git)
+ fi
-LISP=$PWD/$LISP
-cd ../$REPO || exit 1
-git checkout $BRANCH
+ LISP=$PWD/$LISP
+ cd ../$REPO || exit 1
+ git checkout $BRANCH
-# Run the tests. Exits with a non-zero code if there's a failure.
-$LISP -noinit -nositeinit -batch <<'EOF'
+ # Run the tests. Exits with a non-zero code if there's a failure.
+ $LISP -noinit -nositeinit -batch <<'EOF'
(require :asdf)
(push (default-directory) asdf:*central-registry*)
(asdf:test-system :trivial-package-local-nicknames)
EOF
+fi
=====================================
src/code/numbers.lisp
=====================================
@@ -602,154 +602,156 @@
;; In particular iteration 1 and 3 are added. Iteration 2 and 4 were
;; not added. The test examples from iteration 2 and 4 didn't change
;; with or without changes added.
-(let* ((+rmin+ least-positive-normalized-double-float)
- (+rbig+ (/ most-positive-double-float 2))
- (+rmin2+ (scale-float 1d0 -53))
- (+rminscal+ (scale-float 1d0 51))
- (+rmax2+ (* +rbig+ +rmin2+))
- ;; The value of %eps in Scilab
- (+eps+ (scale-float 1d0 -52))
- (+be+ (/ 2 (* +eps+ +eps+)))
- (+2/eps+ (/ 2 +eps+)))
- (declare (double-float +rmin+ +rbig+ +rmin2+ +rminscal+ +rmax2+
- +eps+ +be+ +2/eps+))
- (defun cdiv-double-float (x y)
- (declare (type (complex double-float) x y)
- (optimize (speed 3) (safety 0)))
- (labels
- ((internal-compreal (a b c d r tt)
- (declare (double-float a b c d r tt))
- ;; Compute the real part of the complex division
- ;; (a+ib)/(c+id), assuming |d| <= |c|. r = d/c and tt = 1/(c+d*r).
- ;;
- ;; The realpart is (a*c+b*d)/(c^2+d^2).
- ;;
- ;; c^2+d^2 = c*(c+d*(d/c)) = c*(c+d*r)
- ;;
- ;; Then
- ;;
- ;; (a*c+b*d)/(c^2+d^2) = (a*c+b*d)/(c*(c+d*r))
- ;; = (a + b*d/c)/(c+d*r)
- ;; = (a + b*r)/(c + d*r).
- ;;
- ;; Thus tt = (c + d*r).
- (cond ((>= (abs r) +rmin+)
- (let ((br (* b r)))
- (if (/= br 0d0)
- (/ (+ a br) tt)
- ;; b*r underflows. Instead, compute
- ;;
- ;; (a + b*r)*tt = a*tt + b*tt*r
- ;; = a*tt + (b*tt)*r
- ;; (a + b*r)/tt = a/tt + b/tt*r
- ;; = a*tt + (b*tt)*r
- (+ (/ a tt)
- (* (/ b tt)
- r)))))
- (t
- ;; r = 0 so d is very tiny compared to c.
- ;;
- (/ (+ a (* d (/ b c)))
- tt))))
- (robust-subinternal (a b c d)
- (declare (double-float a b c d))
- (let* ((r (/ d c))
- (tt (+ c (* d r))))
- ;; e is the real part and f is the imaginary part. We
- ;; can use internal-compreal for the imaginary part by
- ;; noticing that the imaginary part of (a+i*b)/(c+i*d) is
- ;; the same as the real part of (b-i*a)/(c+i*d).
- (let ((e (internal-compreal a b c d r tt))
- (f (internal-compreal b (- a) c d r tt)))
- (values e
- f))))
+(defconstant +cdiv-rmin+ least-positive-normalized-double-float)
+(defconstant +cdiv-rbig+ (/ most-positive-double-float 2))
+(defconstant +cdiv-rmin2+ (scale-float 1d0 -53))
+(defconstant +cdiv-rminscal+ (scale-float 1d0 51))
+(defconstant +cdiv-rmax2+ (* +cdiv-rbig+ +cdiv-rmin2+))
+;; This is the value of %eps from Scilab
+(defconstant +cdiv-eps+ (scale-float 1d0 -52))
+(defconstant +cdiv-be+ (/ 2 (* +cdiv-eps+ +cdiv-eps+)))
+(defconstant +cdiv-2/eps+ (/ 2 +cdiv-eps+))
+
+(declaim (ext:start-block cdiv-double-float cdiv-single-float two-arg-/))
+
+(defun cdiv-double-float (x y)
+ (declare (type (complex double-float) x y)
+ (optimize (speed 3) (safety 0)))
+ (labels
+ ((internal-compreal (a b c d r tt)
+ (declare (double-float a b c d r tt))
+ ;; Compute the real part of the complex division
+ ;; (a+ib)/(c+id), assuming |c| <= |d|. r = d/c and tt = 1/(c+d*r).
+ ;;
+ ;; The realpart is (a*c+b*d)/(c^2+d^2).
+ ;;
+ ;; c^2+d^2 = c*(c+d*(d/c)) = c*(c+d*r)
+ ;;
+ ;; Then
+ ;;
+ ;; (a*c+b*d)/(c^2+d^2) = (a*c+b*d)/(c*(c+d*r))
+ ;; = (a + b*d/c)/(c+d*r)
+ ;; = (a + b*r)/(c + d*r).
+ ;;
+ ;; Thus tt = (c + d*r).
+ (cond ((>= (abs r) +cdiv-rmin+)
+ (let ((br (* b r)))
+ (if (/= br 0)
+ (/ (+ a br) tt)
+ ;; b*r underflows. Instead, compute
+ ;;
+ ;; (a + b*r)*tt = a*tt + b*tt*r
+ ;; = a*tt + (b*tt)*r
+ ;; (a + b*r)/tt = a/tt + b/tt*r
+ ;; = a*tt + (b*tt)*r
+ (+ (/ a tt)
+ (* (/ b tt)
+ r)))))
+ (t
+ ;; r = 0 so d is very tiny compared to c.
+ ;;
+ (/ (+ a (* d (/ b c)))
+ tt))))
+ (robust-subinternal (a b c d)
+ (declare (double-float a b c d))
+ (let* ((r (/ d c))
+ (tt (+ c (* d r))))
+ ;; e is the real part and f is the imaginary part. We
+ ;; can use internal-compreal for the imaginary part by
+ ;; noticing that the imaginary part of (a+i*b)/(c+i*d) is
+ ;; the same as the real part of (b-i*a)/(c+i*d).
+ (let ((e (internal-compreal a b c d r tt))
+ (f (internal-compreal b (- a) c d r tt)))
+ (values e
+ f))))
- (robust-internal (x y)
- (declare (type (complex double-float) x y))
- (let ((a (realpart x))
- (b (imagpart x))
- (c (realpart y))
- (d (imagpart y)))
- (declare (double-float a b c d))
- (flet ((maybe-scale (abs-tst a b c d)
- (declare (double-float a b c d))
- ;; This implements McGehearty's iteration 3 to
- ;; handle the case when some values are too big
- ;; and should be scaled down. Also if some
- ;; values are too tiny, scale them up.
- (let ((abs-a (abs a))
- (abs-b (abs b)))
- (if (or (> abs-tst +rbig+)
- (> abs-a +rbig+)
- (> abs-b +rbig+))
- (setf a (* a 0.5d0)
- b (* b 0.5d0)
- c (* c 0.5d0)
- d (* d 0.5d0))
- (if (< abs-tst +rmin2+)
- (setf a (* a +rminscal+)
- b (* b +rminscal+)
- c (* c +rminscal+)
- d (* d +rminscal+))
- (if (or (and (< abs-a +rmin+)
- (< abs-b +rmax2+)
- (< abs-tst +rmax2+))
- (and (< abs-b +rmin+)
- (< abs-a +rmax2+)
- (< abs-tst +rmax2+)))
- (setf a (* a +rminscal+)
- b (* b +rminscal+)
- c (* c +rminscal+)
- d (* d +rminscal+)))))
- (values a b c d))))
- (cond
- ((<= (abs d) (abs c))
- ;; |d| <= |c|, so we can use robust-subinternal to
- ;; perform the division.
- (multiple-value-bind (a b c d)
- (maybe-scale (abs c) a b c d)
- (multiple-value-bind (e f)
- (robust-subinternal a b c d)
- (complex e f))))
- (t
- ;; |d| > |c|. So, instead compute
- ;;
- ;; (b + i*a)/(d + i*c)
- ;; = ((b*d+a*c) + (a*d-b*c)*i)/(d^2+c^2)
- ;;
- ;; Compare this to (a+i*b)/(c+i*d) and we see that
- ;; realpart of the former is the same, but the
- ;; imagpart of the former is the negative of the
- ;; desired division.
- (multiple-value-bind (a b c d)
- (maybe-scale (abs d) a b c d)
- (multiple-value-bind (e f)
- (robust-subinternal b a d c)
- (complex e (- f))))))))))
- (let* ((max-ab (max (abs (realpart x))
- (abs (imagpart x))))
- (max-cd (max (abs (realpart y))
- (abs (imagpart y))))
- (s 1d0))
- (declare (double-float s))
- ;; If a or b is big, scale down a and b.
- (when (>= max-ab +rbig+)
- (setf x (/ x 2d0)
- s (* s 2d0)))
- ;; If c or d is big, scale down c and d.
- (when (>= max-cd +rbig+)
- (setf y (/ y 2d0)
- s (/ s 2d0)))
- ;; If a or b is tiny, scale up a and b.
- (when (<= max-ab (* +rmin+ +2/eps+))
- (setf x (* x +be+)
- s (/ s +be+)))
- ;; If c or d is tiny, scale up c and d.
- (when (<= max-cd (* +rmin+ +2/eps+))
- (setf y (* y +be+)
- s (* s +be+)))
- (* s
- (robust-internal x y))))))
+ (robust-internal (x y)
+ (declare (type (complex double-float) x y))
+ (let ((a (realpart x))
+ (b (imagpart x))
+ (c (realpart y))
+ (d (imagpart y)))
+ (declare (double-float a b c d))
+ (flet ((maybe-scale (abs-tst a b c d)
+ (declare (double-float a b c d))
+ ;; This implements McGehearty's iteration 3 to
+ ;; handle the case when some values are too big
+ ;; and should be scaled down. Also if some
+ ;; values are too tiny, scale them up.
+ (let ((abs-a (abs a))
+ (abs-b (abs b)))
+ (if (or (> abs-tst +cdiv-rbig+)
+ (> abs-a +cdiv-rbig+)
+ (> abs-b +cdiv-rbig+))
+ (setf a (* a 0.5d0)
+ b (* b 0.5d0)
+ c (* c 0.5d0)
+ d (* d 0.5d0))
+ (if (< abs-tst +cdiv-rmin2+)
+ (setf a (* a +cdiv-rminscal+)
+ b (* b +cdiv-rminscal+)
+ c (* c +cdiv-rminscal+)
+ d (* d +cdiv-rminscal+))
+ (if (or (and (< abs-a +cdiv-rmin+)
+ (< abs-b +cdiv-rmax2+)
+ (< abs-tst +cdiv-rmax2+))
+ (and (< abs-b +cdiv-rmin+)
+ (< abs-a +cdiv-rmax2+)
+ (< abs-tst +cdiv-rmax2+)))
+ (setf a (* a +cdiv-rminscal+)
+ b (* b +cdiv-rminscal+)
+ c (* c +cdiv-rminscal+)
+ d (* d +cdiv-rminscal+)))))
+ (values a b c d))))
+ (cond
+ ((<= (abs d) (abs c))
+ ;; |d| <= |c|, so we can use robust-subinternal to
+ ;; perform the division.
+ (multiple-value-bind (a b c d)
+ (maybe-scale (abs c) a b c d)
+ (multiple-value-bind (e f)
+ (robust-subinternal a b c d)
+ (complex e f))))
+ (t
+ ;; |d| > |c|. So, instead compute
+ ;;
+ ;; (b + i*a)/(d + i*c) = ((b*d+a*c) + (a*d-b*c)*i)/(d^2+c^2)
+ ;;
+ ;; Compare this to (a+i*b)/(c+i*d) and we see that
+ ;; realpart of the former is the same, but the
+ ;; imagpart of the former is the negative of the
+ ;; desired division.
+ (multiple-value-bind (a b c d)
+ (maybe-scale (abs d) a b c d)
+ (multiple-value-bind (e f)
+ (robust-subinternal b a d c)
+ (complex e (- f))))))))))
+ (let* ((a (realpart x))
+ (b (imagpart x))
+ (c (realpart y))
+ (d (imagpart y))
+ (ab (max (abs a) (abs b)))
+ (cd (max (abs c) (abs d)))
+ (s 1d0))
+ (declare (double-float s))
+ ;; If a or b is big, scale down a and b.
+ (when (>= ab +cdiv-rbig+)
+ (setf x (/ x 2)
+ s (* s 2)))
+ ;; If c or d is big, scale down c and d.
+ (when (>= cd +cdiv-rbig+)
+ (setf y (/ y 2)
+ s (/ s 2)))
+ ;; If a or b is tiny, scale up a and b.
+ (when (<= ab (* +cdiv-rmin+ +cdiv-2/eps+))
+ (setf x (* x +cdiv-be+)
+ s (/ s +cdiv-be+)))
+ ;; If c or d is tiny, scale up c and d.
+ (when (<= cd (* +cdiv-rmin+ +cdiv-2/eps+))
+ (setf y (* y +cdiv-be+)
+ s (* s +cdiv-be+)))
+ (* s
+ (robust-internal x y)))))
;; Smith's algorithm for complex division for (complex single-float).
;; We convert the parts to double-floats before computing the result.
@@ -850,7 +852,7 @@
(((complex rational)
(complex rational))
;; We probably don't need to do Smith's algorithm for rationals.
- ;; A naive implementation of complex division has no issues.
+ ;; A naive implementation of coplex division has no issues.
(let ((a (realpart x))
(b (imagpart x))
(c (realpart y))
@@ -907,6 +909,7 @@
(build-ratio (maybe-truncate nx gcd)
(* (maybe-truncate y gcd) (denominator x)))))))
+(declaim (ext:end-block))
(defun %negate (n)
(number-dispatch ((n number))
=====================================
src/code/pathname.lisp
=====================================
@@ -838,14 +838,18 @@ a host-structure or string."
(%pathname-directory defaults)
diddle-defaults)))
- ;; A bit of sanity checking on user arguments.
+ ;; A bit of sanity checking on user arguments. We don't allow a
+ ;; "/" or NUL in any string that's part of a pathname object.
(flet ((check-component-validity (name name-or-type)
(when (stringp name)
- (let ((unix-directory-separator #\/))
- (when (eq host (%pathname-host *default-pathname-defaults*))
- (when (find unix-directory-separator name)
- (warn (intl:gettext "Silly argument for a unix ~A: ~S")
- name-or-type name)))))))
+ (when (eq host (%pathname-host *default-pathname-defaults*))
+ (when (some #'(lambda (c)
+ ;; Illegal characters are a slash or NUL.
+ (case c
+ ((#\/ #\null) t)))
+ name)
+ (error _"Pathname component ~A cannot contain a slash or nul character: ~S"
+ name-or-type name))))))
(check-component-validity name :pathname-name)
(check-component-validity type :pathname-type)
(mapc #'(lambda (d)
@@ -856,8 +860,9 @@ a host-structure or string."
(not type))
(and (string= name ".")
(not type))))
- ;;
- (warn (intl:gettext "Silly argument for a unix PATHNAME-NAME: ~S") name)))
+ ;;
+ (cerror _"Continue anyway"
+ _"PATHNAME-NAME cannot be \".\" or \"..\"")))
;; More sanity checking
(when dir
=====================================
src/i18n/locale/cmucl.pot
=====================================
@@ -7717,7 +7717,7 @@ msgstr ""
msgid ", type="
msgstr ""
-#: src/code/print.lisp
+#: src/code/pathname.lisp src/code/print.lisp
msgid "Continue anyway"
msgstr ""
@@ -9785,17 +9785,17 @@ msgid "~S is not allowed as a directory component."
msgstr ""
#: src/code/pathname.lisp
-msgid ""
-"Makes a new pathname from the component arguments. Note that host is\n"
-"a host-structure or string."
+msgid "Pathname component ~A cannot contain a slash or nul character: ~S"
msgstr ""
#: src/code/pathname.lisp
-msgid "Silly argument for a unix ~A: ~S"
+msgid "PATHNAME-NAME cannot be \".\" or \"..\""
msgstr ""
#: src/code/pathname.lisp
-msgid "Silly argument for a unix PATHNAME-NAME: ~S"
+msgid ""
+"Makes a new pathname from the component arguments. Note that host is\n"
+"a host-structure or string."
msgstr ""
#: src/code/pathname.lisp
=====================================
tests/float-x86.lisp
=====================================
@@ -5,6 +5,11 @@
(in-package "FLOAT-X86-TESTS")
+;; This tests the floating-point modes for x86. This works only if we
+;; have the feature :sse2 but not :darwin since darwin has always used
+;; sse2 and not x87. But see also how FLOATING-POINT-MODES is
+;; implemented in src/code/float-trap.lisp.
+#+(and sse2 (not darwin))
(define-test set-floating-point-modes
(let ((old-x87-modes (x86::x87-floating-point-modes))
(old-sse2-modes (x86::sse2-floating-point-modes))
=====================================
tests/os.lisp
=====================================
@@ -51,6 +51,7 @@
(assert-equal 2153718000 st-atime)
(assert-equal 2153718000 st-mtime))))
+#+linux
(define-test stat.64-bit-timestamp-2106
(:tag :issues)
(let ((test-file #.(merge-pathnames "resources/64-bit-timestamp-2106.txt"
=====================================
tests/pathname.lisp
=====================================
@@ -153,4 +153,30 @@
;; Now recursively delete the directory.
(assert-true (ext:delete-directory (merge-pathnames "tmp/" path)
:recursive t))
- (assert-false (directory "tmp/")))))
+ (assert-false (directory (merge-pathnames "tmp/" path))))))
+
+(define-test issue.454.illegal-pathname-chars
+ (:tag :issues)
+ ;; A slash (Unix directory separater) is not allowed.
+ (assert-error 'simple-error
+ (make-pathname :name "a/b"))
+ (assert-error 'simple-error
+ (make-pathname :type "a/b"))
+ (assert-error 'simple-error
+ (make-pathname :directory '(:relative "a/b")))
+ ;; ASCII NUL characters are not allowed in Unix pathnames.
+ (let ((string-with-nul (concatenate 'string "a" (string #\nul) "b")))
+ (assert-error 'simple-error
+ (make-pathname :name string-with-nul))
+ (assert-error 'simple-error
+ (make-pathname :type string-with-nul))
+ (assert-error 'simple-error
+ (make-pathname :directory (list :relative string-with-nul)))))
+
+(define-test issue.454.illegal-pathname-dot
+ (:tag :issues)
+ (assert-error 'simple-error
+ (make-pathname :name "."))
+ (assert-error 'simple-error
+ (make-pathname :name "..")))
+
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/compare/ef99f00954a34ece65ebdb…
--
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/compare/ef99f00954a34ece65ebdb…
You're receiving this email because of your account on gitlab.common-lisp.net.
1
0
[Git][cmucl/cmucl][issue-459-more-accurate-dd-complex-div] 9 commits: Add fixed issue #458 to release notes
by Raymond Toy (@rtoy) 03 Jan '26
by Raymond Toy (@rtoy) 03 Jan '26
03 Jan '26
Raymond Toy pushed to branch issue-459-more-accurate-dd-complex-div at cmucl / cmucl
Commits:
f146f87f by Raymond Toy at 2025-12-13T15:11:21-08:00
Add fixed issue #458 to release notes
Forgot to do that.
[skip-ci]
- - - - -
2c36bac8 by Raymond Toy at 2025-12-15T17:34:46-08:00
Use (new) Ubuntu VM to run CI instead of OpenSUSE
- - - - -
7ebc2654 by Raymond Toy at 2025-12-15T17:34:46-08:00
Merge branch 'rtoy-add-ubuntu-runner' into 'master'
Use (new) Ubuntu VM to run CI instead of OpenSUSE
See merge request cmucl/cmucl!339
- - - - -
e65f9f5c by Raymond Toy at 2025-12-17T07:04:10-08:00
Fix #457: delete-directory signals errors
- - - - -
6034f935 by Raymond Toy at 2025-12-17T07:04:10-08:00
Merge branch 'issue-457-delete-directory-signals-errors' into 'master'
Fix #457: delete-directory signals errors
Closes #457
See merge request cmucl/cmucl!336
- - - - -
10efd37c by Raymond Toy at 2025-12-17T07:12:47-08:00
Remove extra blank lines
Addresses comment from !337:
https://gitlab.common-lisp.net/cmucl/cmucl/-/merge_requests/337#note_18529
Don't need to run CI for this.
[skip-ci]
- - - - -
99d8540a by Raymond Toy at 2026-01-02T10:05:16-08:00
Fix #460: Exit with error if main unit-tests fail
- - - - -
28de6c68 by Raymond Toy at 2026-01-02T10:05:17-08:00
Merge branch 'issue-460-ci-fails-if-unit-tests-do' into 'master'
Fix #460: Exit with error if main unit-tests fail
Closes #460
See merge request cmucl/cmucl!340
- - - - -
e6f0f57e by Raymond Toy at 2026-01-03T08:07:42-08:00
Merge branch 'master' into issue-459-more-accurate-dd-complex-div
- - - - -
9 changed files:
- .gitlab-ci.yml
- bin/run-unit-tests.sh
- src/code/exports.lisp
- src/code/extensions.lisp
- src/general-info/release-22a.md
- src/i18n/locale/cmucl.pot
- tests/float-x86.lisp
- tests/os.lisp
- tests/pathname.lisp
Changes:
=====================================
.gitlab-ci.yml
=====================================
@@ -19,6 +19,8 @@ variables:
script:
- echo PATH = $PATH
- ls -F /usr/local/bin
+ # Make sure gitlab-runner is available because it's needed by the
+ # VM to upload artifacts.
- type -all gitlab-runner
# Download binaries. (Do we really need the extras tarball?)
- $CURL -o cmucl-$version-$osname.tar.$tar_ext $download_url/cmucl-$version-$osname.tar.$tar_ext
@@ -318,38 +320,38 @@ linux:static-analyzer:
- make -C build-4/lisp ANALYZER=-fanalyzer > analyzer.log 2>&1
#### OpenSUSE jobs ####
-opensuse:install:
+ubuntu:install:
<<: *install_configuration
tags:
- - opensuse
+ - ubuntu
variables:
osname: "linux"
CURL: "curl"
-opensuse:build:
+ubuntu:build:
<<: *build_configuration
tags:
- - opensuse
+ - ubuntu
needs:
- - job: opensuse:install
+ - job: ubuntu:install
artifacts: true
-opensuse:test:
+ubuntu:test:
<<: *unit_test_configuration
tags:
- - opensuse
+ - ubuntu
needs:
# Needs artifacts from build (dist/)
- - job: opensuse:build
+ - job: ubuntu:build
artifacts: true
-opensuse:ansi-test:
+ubuntu:ansi-test:
<<: *ansi_test_configuration
tags:
- - opensuse
+ - ubuntu
needs:
# Needs artifacts from build (dist/)
- - job: opensuse:build
+ - job: ubuntu:build
artifacts: true
# Optional job that runs the markdown link checker. This is optional
=====================================
bin/run-unit-tests.sh
=====================================
@@ -9,6 +9,8 @@ usage() {
echo "run-tests.sh [-?h] [-d test-dir] [-l lisp] [tests]"
echo " -d test-dir Directory containing the unit test files"
echo " -l lisp Lisp to use for the tests; defaults to lisp"
+ echo " -p Skip package-local-nicknames test"
+ echo " -u Skip lisp-unit tests"
echo " -? This help message"
echo " -h This help message"
echo ""
@@ -25,11 +27,13 @@ usage() {
}
LISP=lisp
-while getopts "h?l:d:" arg
+while getopts "puh?l:d:" arg
do
case $arg in
l) LISP=$OPTARG ;;
d) TESTDIR=$OPTARG ;;
+ p) SKIP_PLN=yes ;;
+ u) SKIP_UNIT=yes ;;
h|\?) usage ;;
esac
done
@@ -43,12 +47,19 @@ mkdir test-tmp
ln -s /bin/ls test-tmp/ls-link
# Set the timestamps on 64-bit-timestamp-2038.txt and
-# 64-bit-timestamp-2106.txt. The time for the first file is a
-# negative value for a 32-bit time_t. The second file won't fit in a
-# 32-bit time_t value. It's ok if this doesn't work in general, as
-# long as it works on Linux for the stat test in tests/os.lisp.
-touch -d "1 April 2038" tests/resources/64-bit-timestamp-2038.txt
-touch -d "1 April 2106" tests/resources/64-bit-timestamp-2106.txt
+# 64-bit-timestamp-2106.txt, but only for OSes where we know this
+# works. (This is so we don't an annoying error message from touch
+# that doesn't accept the -d option, like MacOS 10.13.) The time for
+# the first file is a negative value for a 32-bit time_t. The second
+# file won't fit in a 32-bit time_t value. It's ok if this doesn't
+# work in general, as long as it works on Linux for the stat test in
+# tests/os.lisp.
+case `uname -s` in
+ Linux)
+ touch -d "1 April 2038" tests/resources/64-bit-timestamp-2038.txt
+ touch -d "1 April 2106" tests/resources/64-bit-timestamp-2106.txt
+ ;;
+esac
# Cleanup temp files and directories that we created during testing.
function cleanup {
@@ -69,39 +80,47 @@ fi
# gcc since clang isn't always available.
(cd "$TESTDIR" || exit 1 ; gcc -m32 -O3 -c test-return.c)
-if [ $# -eq 0 ]; then
- # Test directory arg for run-all-tests if a non-default
- # No args so run all the tests
- $LISP -nositeinit -noinit -load "$TESTDIR"/run-tests.lisp -eval "(cmucl-test-runner:run-all-tests ${TESTDIRARG})"
-else
- # Run selected files. Convert each file name to uppercase and append "-TESTS"
- result=""
- for f in "$@"
- do
- new=$(echo "$f" | tr '[:lower:]' '[:upper:]')
- result="$result "\"$new-TESTS\"
- done
- $LISP -nositeinit -noinit -load "$TESTDIR"/run-tests.lisp -eval "(progn (cmucl-test-runner:load-test-files) (cmucl-test-runner:run-test $result))"
+if [ "$SKIP_UNIT" != "yes" ]; then
+ if [ $# -eq 0 ]; then
+ # Test directory arg for run-all-tests if a non-default
+ # No args so run all the tests
+ $LISP -nositeinit -noinit -load "$TESTDIR"/run-tests.lisp -eval "(cmucl-test-runner:run-all-tests ${TESTDIRARG})" ||
+ exit 1
+ else
+ # Run selected files. Convert each file name to uppercase and append "-TESTS"
+ result=""
+ for f in "$@"
+ do
+ new=$(echo "$f" | tr '[:lower:]' '[:upper:]')
+ result="$result "\"$new-TESTS\"
+ done
+ # Run unit tests. Exits with a non-zero code if there's a failure.
+
+ $LISP -nositeinit -noinit -load "$TESTDIR"/run-tests.lisp -eval "(progn (cmucl-test-runner:load-test-files) (cmucl-test-runner:run-test $result))" ||
+ exit 1
+ fi
fi
## Now run tests for trivial-package-local-nicknames
-REPO=trivial-package-local-nicknames
-BRANCH=cmucl-updates
+if [ "$SKIP_PLN" != "yes" ]; then
+ REPO=trivial-package-local-nicknames
+ BRANCH=cmucl-updates
-set -x
-if [ -d ../$REPO ]; then
- (cd ../$REPO || exit 1; git stash; git checkout $BRANCH; git pull --rebase)
-else
- (cd ..; git clone https://gitlab.common-lisp.net/cmucl/$REPO.git)
-fi
+ set -x
+ if [ -d ../$REPO ]; then
+ (cd ../$REPO || exit 1; git stash; git checkout $BRANCH; git pull --rebase)
+ else
+ (cd ..; git clone https://gitlab.common-lisp.net/cmucl/$REPO.git)
+ fi
-LISP=$PWD/$LISP
-cd ../$REPO || exit 1
-git checkout $BRANCH
+ LISP=$PWD/$LISP
+ cd ../$REPO || exit 1
+ git checkout $BRANCH
-# Run the tests. Exits with a non-zero code if there's a failure.
-$LISP -noinit -nositeinit -batch <<'EOF'
+ # Run the tests. Exits with a non-zero code if there's a failure.
+ $LISP -noinit -nositeinit -batch <<'EOF'
(require :asdf)
(push (default-directory) asdf:*central-registry*)
(asdf:test-system :trivial-package-local-nicknames)
EOF
+fi
=====================================
src/code/exports.lisp
=====================================
@@ -1213,7 +1213,8 @@
"INVALID-FASL"
"WITH-TEMPORARY-DIRECTORY"
- "WITH-TEMPORARY-FILE")
+ "WITH-TEMPORARY-FILE"
+ "DELETE-DIRECTORY")
;; gencgc features
#+gencgc
(:export "GET-GC-ASSERTIONS"
=====================================
src/code/extensions.lisp
=====================================
@@ -673,9 +673,9 @@
(defun delete-directory (dirname &key recursive)
_N"Delete the directory Dirname. If the Recursive is non-NIL,
recursively delete the directory Dirname including all files and
- subdirectories. Dirname must be a pathname to a directory. Any NAME
- or TYPE components in Dirname are ignored."
- (declare (type pathname dirname))
+ subdirectories. Dirname must name a directory. Any NAME or TYPE
+ components in Dirname are ignored. A FILE-ERROR is signaled if any
+ directory cannot be deleted."
(when recursive
;; Find all the files or directories in DIRNAME.
(dolist (path (directory (merge-pathnames "*.*" dirname)))
@@ -685,8 +685,15 @@
(delete-directory path :recursive t)
(delete-file path))))
;; Finally delete the directory.
- (unix:unix-rmdir (namestring dirname))
- (values))
+ (multiple-value-bind (ok errno)
+ (unix:unix-rmdir (namestring dirname))
+ (unless ok
+ (error 'kernel:simple-file-error
+ :pathname dirname
+ :format-control (intl:gettext "Could not remove directory \"~A\": ~A.")
+ :format-arguments (list dirname
+ (unix:get-unix-error-msg errno))))
+ ok))
;;; WITH-TEMPORARY-DIRECTORY -- Public
=====================================
src/general-info/release-22a.md
=====================================
@@ -34,6 +34,7 @@ public domain.
* #446: Use C compiler to get errno values to update UNIX
defpackage with errno symbols
* #453: Use correct flags for analyzer and always save logs.
+ * #458: Spurious overflow in double-double-float multiply
* Other changes:
* Improvements to the PCL implementation of CLOS:
* Changes to building procedure:
=====================================
src/i18n/locale/cmucl.pot
=====================================
@@ -6011,8 +6011,13 @@ msgstr ""
msgid ""
"Delete the directory Dirname. If the Recursive is non-NIL,\n"
" recursively delete the directory Dirname including all files and\n"
-" subdirectories. Dirname must be a pathname to a directory. Any NAME\n"
-" or TYPE components in Dirname are ignored."
+" subdirectories. Dirname must name a directory. Any NAME or TYPE\n"
+" components in Dirname are ignored. A FILE-ERROR is signaled if any\n"
+" directory cannot be deleted."
+msgstr ""
+
+#: src/code/extensions.lisp
+msgid "Could not remove directory \"~A\": ~A."
msgstr ""
#: src/code/extensions.lisp
=====================================
tests/float-x86.lisp
=====================================
@@ -5,6 +5,11 @@
(in-package "FLOAT-X86-TESTS")
+;; This tests the floating-point modes for x86. This works only if we
+;; have the feature :sse2 but not :darwin since darwin has always used
+;; sse2 and not x87. But see also how FLOATING-POINT-MODES is
+;; implemented in src/code/float-trap.lisp.
+#+(and sse2 (not darwin))
(define-test set-floating-point-modes
(let ((old-x87-modes (x86::x87-floating-point-modes))
(old-sse2-modes (x86::sse2-floating-point-modes))
=====================================
tests/os.lisp
=====================================
@@ -51,6 +51,7 @@
(assert-equal 2153718000 st-atime)
(assert-equal 2153718000 st-mtime))))
+#+linux
(define-test stat.64-bit-timestamp-2106
(:tag :issues)
(let ((test-file #.(merge-pathnames "resources/64-bit-timestamp-2106.txt"
=====================================
tests/pathname.lisp
=====================================
@@ -144,14 +144,13 @@
(assert-equal dir-tilde dir-home))))
(define-test delete-directory
- (let ((dir (ensure-directories-exist "tmp/a/b/c/")))
- ;; Verify that the directories were created.
- (assert-equal "tmp/a/b/c/"
- dir)
- ;; Try to delete the directory. It should fail, which we verify
- ;; by noting the directory listing is not empty.
- (ext::delete-directory (pathname "tmp/"))
- (assert-true (directory "tmp/"))
- ;; Now recursively delete the directory.
- (ext::delete-directory (pathname "tmp/") :recursive t)
- (assert-false (directory "tmp/"))))
+ (:tag :issues)
+ (ext:with-temporary-directory (path)
+ (let ((dir (ensure-directories-exist (merge-pathnames "tmp/a/b/c/" path))))
+ ;; Try to delete the directory. It should fail..
+ (assert-error 'kernel:simple-file-error
+ (ext:delete-directory (merge-pathnames "tmp/" path)))
+ ;; Now recursively delete the directory.
+ (assert-true (ext:delete-directory (merge-pathnames "tmp/" path)
+ :recursive t))
+ (assert-false (directory "tmp/")))))
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/compare/9f881b527331169feb61a5…
--
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/compare/9f881b527331169feb61a5…
You're receiving this email because of your account on gitlab.common-lisp.net.
1
0
[Git][cmucl/cmucl][master] 2 commits: Fix #454 and #138: Signal errors for bad components for make-pathname
by Raymond Toy (@rtoy) 02 Jan '26
by Raymond Toy (@rtoy) 02 Jan '26
02 Jan '26
Raymond Toy pushed to branch master at cmucl / cmucl
Commits:
58358927 by Raymond Toy at 2026-01-02T14:27:25-08:00
Fix #454 and #138: Signal errors for bad components for make-pathname
- - - - -
97824b42 by Raymond Toy at 2026-01-02T14:27:25-08:00
Merge branch 'issue-454-signal-error-for-bad-pathname-parts' into 'master'
Fix #454 and #138: Signal errors for bad components for make-pathname
Closes #454 and #138
See merge request cmucl/cmucl!333
- - - - -
3 changed files:
- src/code/pathname.lisp
- src/i18n/locale/cmucl.pot
- tests/pathname.lisp
Changes:
=====================================
src/code/pathname.lisp
=====================================
@@ -838,14 +838,18 @@ a host-structure or string."
(%pathname-directory defaults)
diddle-defaults)))
- ;; A bit of sanity checking on user arguments.
+ ;; A bit of sanity checking on user arguments. We don't allow a
+ ;; "/" or NUL in any string that's part of a pathname object.
(flet ((check-component-validity (name name-or-type)
(when (stringp name)
- (let ((unix-directory-separator #\/))
- (when (eq host (%pathname-host *default-pathname-defaults*))
- (when (find unix-directory-separator name)
- (warn (intl:gettext "Silly argument for a unix ~A: ~S")
- name-or-type name)))))))
+ (when (eq host (%pathname-host *default-pathname-defaults*))
+ (when (some #'(lambda (c)
+ ;; Illegal characters are a slash or NUL.
+ (case c
+ ((#\/ #\null) t)))
+ name)
+ (error _"Pathname component ~A cannot contain a slash or nul character: ~S"
+ name-or-type name))))))
(check-component-validity name :pathname-name)
(check-component-validity type :pathname-type)
(mapc #'(lambda (d)
@@ -856,8 +860,9 @@ a host-structure or string."
(not type))
(and (string= name ".")
(not type))))
- ;;
- (warn (intl:gettext "Silly argument for a unix PATHNAME-NAME: ~S") name)))
+ ;;
+ (cerror _"Continue anyway"
+ _"PATHNAME-NAME cannot be \".\" or \"..\"")))
;; More sanity checking
(when dir
=====================================
src/i18n/locale/cmucl.pot
=====================================
@@ -7717,7 +7717,7 @@ msgstr ""
msgid ", type="
msgstr ""
-#: src/code/print.lisp
+#: src/code/pathname.lisp src/code/print.lisp
msgid "Continue anyway"
msgstr ""
@@ -9785,17 +9785,17 @@ msgid "~S is not allowed as a directory component."
msgstr ""
#: src/code/pathname.lisp
-msgid ""
-"Makes a new pathname from the component arguments. Note that host is\n"
-"a host-structure or string."
+msgid "Pathname component ~A cannot contain a slash or nul character: ~S"
msgstr ""
#: src/code/pathname.lisp
-msgid "Silly argument for a unix ~A: ~S"
+msgid "PATHNAME-NAME cannot be \".\" or \"..\""
msgstr ""
#: src/code/pathname.lisp
-msgid "Silly argument for a unix PATHNAME-NAME: ~S"
+msgid ""
+"Makes a new pathname from the component arguments. Note that host is\n"
+"a host-structure or string."
msgstr ""
#: src/code/pathname.lisp
=====================================
tests/pathname.lisp
=====================================
@@ -153,4 +153,30 @@
;; Now recursively delete the directory.
(assert-true (ext:delete-directory (merge-pathnames "tmp/" path)
:recursive t))
- (assert-false (directory "tmp/")))))
+ (assert-false (directory (merge-pathnames "tmp/" path))))))
+
+(define-test issue.454.illegal-pathname-chars
+ (:tag :issues)
+ ;; A slash (Unix directory separater) is not allowed.
+ (assert-error 'simple-error
+ (make-pathname :name "a/b"))
+ (assert-error 'simple-error
+ (make-pathname :type "a/b"))
+ (assert-error 'simple-error
+ (make-pathname :directory '(:relative "a/b")))
+ ;; ASCII NUL characters are not allowed in Unix pathnames.
+ (let ((string-with-nul (concatenate 'string "a" (string #\nul) "b")))
+ (assert-error 'simple-error
+ (make-pathname :name string-with-nul))
+ (assert-error 'simple-error
+ (make-pathname :type string-with-nul))
+ (assert-error 'simple-error
+ (make-pathname :directory (list :relative string-with-nul)))))
+
+(define-test issue.454.illegal-pathname-dot
+ (:tag :issues)
+ (assert-error 'simple-error
+ (make-pathname :name "."))
+ (assert-error 'simple-error
+ (make-pathname :name "..")))
+
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/compare/28de6c68defdaec3afac11…
--
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/compare/28de6c68defdaec3afac11…
You're receiving this email because of your account on gitlab.common-lisp.net.
1
0
[Git][cmucl/cmucl][issue-425-correctly-rounded-math-functions] 7 commits: Fix #457: delete-directory signals errors
by Raymond Toy (@rtoy) 02 Jan '26
by Raymond Toy (@rtoy) 02 Jan '26
02 Jan '26
Raymond Toy pushed to branch issue-425-correctly-rounded-math-functions at cmucl / cmucl
Commits:
e65f9f5c by Raymond Toy at 2025-12-17T07:04:10-08:00
Fix #457: delete-directory signals errors
- - - - -
6034f935 by Raymond Toy at 2025-12-17T07:04:10-08:00
Merge branch 'issue-457-delete-directory-signals-errors' into 'master'
Fix #457: delete-directory signals errors
Closes #457
See merge request cmucl/cmucl!336
- - - - -
10efd37c by Raymond Toy at 2025-12-17T07:12:47-08:00
Remove extra blank lines
Addresses comment from !337:
https://gitlab.common-lisp.net/cmucl/cmucl/-/merge_requests/337#note_18529
Don't need to run CI for this.
[skip-ci]
- - - - -
885baf0f by Raymond Toy at 2025-12-24T12:43:58-08:00
Merge branch 'master' into issue-425-correctly-rounded-math-functions
- - - - -
99d8540a by Raymond Toy at 2026-01-02T10:05:16-08:00
Fix #460: Exit with error if main unit-tests fail
- - - - -
28de6c68 by Raymond Toy at 2026-01-02T10:05:17-08:00
Merge branch 'issue-460-ci-fails-if-unit-tests-do' into 'master'
Fix #460: Exit with error if main unit-tests fail
Closes #460
See merge request cmucl/cmucl!340
- - - - -
c97ae992 by Raymond Toy at 2026-01-02T14:03:03-08:00
Merge branch 'master' into issue-425-correctly-rounded-math-functions
- - - - -
8 changed files:
- bin/run-unit-tests.sh
- src/code/exports.lisp
- src/code/extensions.lisp
- src/i18n/locale/cmucl.pot
- tests/float-x86.lisp
- tests/float.lisp
- tests/os.lisp
- tests/pathname.lisp
Changes:
=====================================
bin/run-unit-tests.sh
=====================================
@@ -9,8 +9,8 @@ usage() {
echo "run-tests.sh [-?h] [-d test-dir] [-l lisp] [tests]"
echo " -d test-dir Directory containing the unit test files"
echo " -l lisp Lisp to use for the tests; defaults to lisp"
- echo " -u Skip lisp-unit tests"
echo " -p Skip package-local-nicknames test"
+ echo " -u Skip lisp-unit tests"
echo " -? This help message"
echo " -h This help message"
echo ""
@@ -27,13 +27,13 @@ usage() {
}
LISP=lisp
-while getopts "uph?l:d:" arg
+while getopts "puh?l:d:" arg
do
case $arg in
l) LISP=$OPTARG ;;
d) TESTDIR=$OPTARG ;;
- u) SKIP_UNIT=yes ;;
p) SKIP_PLN=yes ;;
+ u) SKIP_UNIT=yes ;;
h|\?) usage ;;
esac
done
@@ -47,12 +47,19 @@ mkdir test-tmp
ln -s /bin/ls test-tmp/ls-link
# Set the timestamps on 64-bit-timestamp-2038.txt and
-# 64-bit-timestamp-2106.txt. The time for the first file is a
-# negative value for a 32-bit time_t. The second file won't fit in a
-# 32-bit time_t value. It's ok if this doesn't work in general, as
-# long as it works on Linux for the stat test in tests/os.lisp.
-touch -d "1 April 2038" tests/resources/64-bit-timestamp-2038.txt
-touch -d "1 April 2106" tests/resources/64-bit-timestamp-2106.txt
+# 64-bit-timestamp-2106.txt, but only for OSes where we know this
+# works. (This is so we don't an annoying error message from touch
+# that doesn't accept the -d option, like MacOS 10.13.) The time for
+# the first file is a negative value for a 32-bit time_t. The second
+# file won't fit in a 32-bit time_t value. It's ok if this doesn't
+# work in general, as long as it works on Linux for the stat test in
+# tests/os.lisp.
+case `uname -s` in
+ Linux)
+ touch -d "1 April 2038" tests/resources/64-bit-timestamp-2038.txt
+ touch -d "1 April 2106" tests/resources/64-bit-timestamp-2106.txt
+ ;;
+esac
# Cleanup temp files and directories that we created during testing.
function cleanup {
@@ -95,8 +102,6 @@ if [ "$SKIP_UNIT" != "yes" ]; then
fi
## Now run tests for trivial-package-local-nicknames
-echo SKIP_PLN = $SKIP_PLN
-
if [ "$SKIP_PLN" != "yes" ]; then
REPO=trivial-package-local-nicknames
BRANCH=cmucl-updates
=====================================
src/code/exports.lisp
=====================================
@@ -1213,7 +1213,8 @@
"INVALID-FASL"
"WITH-TEMPORARY-DIRECTORY"
- "WITH-TEMPORARY-FILE")
+ "WITH-TEMPORARY-FILE"
+ "DELETE-DIRECTORY")
;; gencgc features
#+gencgc
(:export "GET-GC-ASSERTIONS"
=====================================
src/code/extensions.lisp
=====================================
@@ -673,9 +673,9 @@
(defun delete-directory (dirname &key recursive)
_N"Delete the directory Dirname. If the Recursive is non-NIL,
recursively delete the directory Dirname including all files and
- subdirectories. Dirname must be a pathname to a directory. Any NAME
- or TYPE components in Dirname are ignored."
- (declare (type pathname dirname))
+ subdirectories. Dirname must name a directory. Any NAME or TYPE
+ components in Dirname are ignored. A FILE-ERROR is signaled if any
+ directory cannot be deleted."
(when recursive
;; Find all the files or directories in DIRNAME.
(dolist (path (directory (merge-pathnames "*.*" dirname)))
@@ -685,8 +685,15 @@
(delete-directory path :recursive t)
(delete-file path))))
;; Finally delete the directory.
- (unix:unix-rmdir (namestring dirname))
- (values))
+ (multiple-value-bind (ok errno)
+ (unix:unix-rmdir (namestring dirname))
+ (unless ok
+ (error 'kernel:simple-file-error
+ :pathname dirname
+ :format-control (intl:gettext "Could not remove directory \"~A\": ~A.")
+ :format-arguments (list dirname
+ (unix:get-unix-error-msg errno))))
+ ok))
;;; WITH-TEMPORARY-DIRECTORY -- Public
=====================================
src/i18n/locale/cmucl.pot
=====================================
@@ -6011,8 +6011,13 @@ msgstr ""
msgid ""
"Delete the directory Dirname. If the Recursive is non-NIL,\n"
" recursively delete the directory Dirname including all files and\n"
-" subdirectories. Dirname must be a pathname to a directory. Any NAME\n"
-" or TYPE components in Dirname are ignored."
+" subdirectories. Dirname must name a directory. Any NAME or TYPE\n"
+" components in Dirname are ignored. A FILE-ERROR is signaled if any\n"
+" directory cannot be deleted."
+msgstr ""
+
+#: src/code/extensions.lisp
+msgid "Could not remove directory \"~A\": ~A."
msgstr ""
#: src/code/extensions.lisp
=====================================
tests/float-x86.lisp
=====================================
@@ -5,6 +5,11 @@
(in-package "FLOAT-X86-TESTS")
+;; This tests the floating-point modes for x86. This works only if we
+;; have the feature :sse2 but not :darwin since darwin has always used
+;; sse2 and not x87. But see also how FLOATING-POINT-MODES is
+;; implemented in src/code/float-trap.lisp.
+#+(and sse2 (not darwin))
(define-test set-floating-point-modes
(let ((old-x87-modes (x86::x87-floating-point-modes))
(old-sse2-modes (x86::sse2-floating-point-modes))
=====================================
tests/float.lisp
=====================================
@@ -343,8 +343,6 @@
(assert-true (typep new-mode 'x86::float-modes))
(assert-equal new-mode (setf (x86::x87-floating-point-modes) new-mode))))
-
-
;; Issue #458
(define-test dd-mult-overflow
(:tag :issues)
=====================================
tests/os.lisp
=====================================
@@ -51,6 +51,7 @@
(assert-equal 2153718000 st-atime)
(assert-equal 2153718000 st-mtime))))
+#+linux
(define-test stat.64-bit-timestamp-2106
(:tag :issues)
(let ((test-file #.(merge-pathnames "resources/64-bit-timestamp-2106.txt"
=====================================
tests/pathname.lisp
=====================================
@@ -144,14 +144,13 @@
(assert-equal dir-tilde dir-home))))
(define-test delete-directory
- (let ((dir (ensure-directories-exist "tmp/a/b/c/")))
- ;; Verify that the directories were created.
- (assert-equal "tmp/a/b/c/"
- dir)
- ;; Try to delete the directory. It should fail, which we verify
- ;; by noting the directory listing is not empty.
- (ext::delete-directory (pathname "tmp/"))
- (assert-true (directory "tmp/"))
- ;; Now recursively delete the directory.
- (ext::delete-directory (pathname "tmp/") :recursive t)
- (assert-false (directory "tmp/"))))
+ (:tag :issues)
+ (ext:with-temporary-directory (path)
+ (let ((dir (ensure-directories-exist (merge-pathnames "tmp/a/b/c/" path))))
+ ;; Try to delete the directory. It should fail..
+ (assert-error 'kernel:simple-file-error
+ (ext:delete-directory (merge-pathnames "tmp/" path)))
+ ;; Now recursively delete the directory.
+ (assert-true (ext:delete-directory (merge-pathnames "tmp/" path)
+ :recursive t))
+ (assert-false (directory "tmp/")))))
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/compare/9c16379a168976b4d96b24…
--
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/compare/9c16379a168976b4d96b24…
You're receiving this email because of your account on gitlab.common-lisp.net.
1
0
[Git][cmucl/cmucl][issue-454-signal-error-for-bad-pathname-parts] 18 commits: Dummy commit to run pipeline
by Raymond Toy (@rtoy) 02 Jan '26
by Raymond Toy (@rtoy) 02 Jan '26
02 Jan '26
Raymond Toy pushed to branch issue-454-signal-error-for-bad-pathname-parts at cmucl / cmucl
Commits:
b04aaec6 by Raymond Toy at 2025-12-03T18:30:46-08:00
Dummy commit to run pipeline
Just removed an extra line at the end of the file.
- - - - -
16c334b0 by Raymond Toy at 2025-12-04T15:46:41-08:00
Undo previous change that deleted a blank line
Dummy commit to get CI to run to test out concurrent
builds. (concurrent=2).
- - - - -
25cd44a2 by Raymond Toy at 2025-12-04T17:57:49-08:00
Fix #455: Allow manual pipeline runs
- - - - -
ae1bdde7 by Raymond Toy at 2025-12-04T17:57:50-08:00
Merge branch 'issue-455-manual-pipeline-run' into 'master'
Fix #455: Allow manual pipeline runs
Closes #455
See merge request cmucl/cmucl!334
- - - - -
fd2e83a1 by Raymond Toy at 2025-12-12T15:38:35-08:00
Fix two important typos in unix-get-username and delete-directory
In `unix-get-username`, we were freeing `name` instead of `result`.
In `delete-directory`, we misspelled `recursive` as `recusive`.
Fix these typos.
- - - - -
b9494595 by Raymond Toy at 2025-12-12T15:54:05-08:00
Add some tests for unix-get-username and delete-directory
Add a simple test that unix-get-username returns something useful.
Add a test for delete-directory that tests it deletes directories as
specified, include recursively.
- - - - -
e2b4641a by Raymond Toy at 2025-12-13T14:24:22-08:00
Fix #458: Fix spurious overflow in double-double multiply
- - - - -
16097f45 by Raymond Toy at 2025-12-13T14:24:22-08:00
Merge branch 'issue-458-double-double-mult-overflow' into 'master'
Fix #458: Fix spurious overflow in double-double multiply
Closes #458
See merge request cmucl/cmucl!337
- - - - -
f146f87f by Raymond Toy at 2025-12-13T15:11:21-08:00
Add fixed issue #458 to release notes
Forgot to do that.
[skip-ci]
- - - - -
2c36bac8 by Raymond Toy at 2025-12-15T17:34:46-08:00
Use (new) Ubuntu VM to run CI instead of OpenSUSE
- - - - -
7ebc2654 by Raymond Toy at 2025-12-15T17:34:46-08:00
Merge branch 'rtoy-add-ubuntu-runner' into 'master'
Use (new) Ubuntu VM to run CI instead of OpenSUSE
See merge request cmucl/cmucl!339
- - - - -
e65f9f5c by Raymond Toy at 2025-12-17T07:04:10-08:00
Fix #457: delete-directory signals errors
- - - - -
6034f935 by Raymond Toy at 2025-12-17T07:04:10-08:00
Merge branch 'issue-457-delete-directory-signals-errors' into 'master'
Fix #457: delete-directory signals errors
Closes #457
See merge request cmucl/cmucl!336
- - - - -
10efd37c by Raymond Toy at 2025-12-17T07:12:47-08:00
Remove extra blank lines
Addresses comment from !337:
https://gitlab.common-lisp.net/cmucl/cmucl/-/merge_requests/337#note_18529
Don't need to run CI for this.
[skip-ci]
- - - - -
99d8540a by Raymond Toy at 2026-01-02T10:05:16-08:00
Fix #460: Exit with error if main unit-tests fail
- - - - -
28de6c68 by Raymond Toy at 2026-01-02T10:05:17-08:00
Merge branch 'issue-460-ci-fails-if-unit-tests-do' into 'master'
Fix #460: Exit with error if main unit-tests fail
Closes #460
See merge request cmucl/cmucl!340
- - - - -
66899cbc by Raymond Toy at 2026-01-02T12:59:03-08:00
Apply suggested change to use SOME and signal error not cerror
- - - - -
266283df by Raymond Toy at 2026-01-02T13:15:03-08:00
Merge branch 'master' into issue-454-signal-error-for-bad-pathname-parts
Fix merge conflict in tests/pathname.lisp
- - - - -
14 changed files:
- .gitlab-ci.yml
- bin/run-unit-tests.sh
- src/code/exports.lisp
- src/code/extensions.lisp
- src/code/pathname.lisp
- src/code/unix.lisp
- src/compiler/float-tran-dd.lisp
- src/general-info/release-22a.md
- src/i18n/locale/cmucl.pot
- tests/float-x86.lisp
- tests/float.lisp
- tests/os.lisp
- tests/pathname.lisp
- tests/unix.lisp
Changes:
=====================================
.gitlab-ci.yml
=====================================
@@ -19,6 +19,8 @@ variables:
script:
- echo PATH = $PATH
- ls -F /usr/local/bin
+ # Make sure gitlab-runner is available because it's needed by the
+ # VM to upload artifacts.
- type -all gitlab-runner
# Download binaries. (Do we really need the extras tarball?)
- $CURL -o cmucl-$version-$osname.tar.$tar_ext $download_url/cmucl-$version-$osname.tar.$tar_ext
@@ -133,6 +135,7 @@ linux:install:
- if: $CI_PIPELINE_SOURCE == "push"
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- if: $CI_PIPELINE_SOURCE == "branch"
+ - if: $CI_PIPELINE_SOURCE == "web"
linux:build:
<<: *build_configuration
@@ -148,6 +151,7 @@ linux:build:
- if: $CI_PIPELINE_SOURCE == "schedule"
- if: $CI_PIPELINE_SOURCE == "push"
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
+ - if: $CI_PIPELINE_SOURCE == "web"
linux:cross-build:
stage: build
@@ -316,38 +320,38 @@ linux:static-analyzer:
- make -C build-4/lisp ANALYZER=-fanalyzer > analyzer.log 2>&1
#### OpenSUSE jobs ####
-opensuse:install:
+ubuntu:install:
<<: *install_configuration
tags:
- - opensuse
+ - ubuntu
variables:
osname: "linux"
CURL: "curl"
-opensuse:build:
+ubuntu:build:
<<: *build_configuration
tags:
- - opensuse
+ - ubuntu
needs:
- - job: opensuse:install
+ - job: ubuntu:install
artifacts: true
-opensuse:test:
+ubuntu:test:
<<: *unit_test_configuration
tags:
- - opensuse
+ - ubuntu
needs:
# Needs artifacts from build (dist/)
- - job: opensuse:build
+ - job: ubuntu:build
artifacts: true
-opensuse:ansi-test:
+ubuntu:ansi-test:
<<: *ansi_test_configuration
tags:
- - opensuse
+ - ubuntu
needs:
# Needs artifacts from build (dist/)
- - job: opensuse:build
+ - job: ubuntu:build
artifacts: true
# Optional job that runs the markdown link checker. This is optional
=====================================
bin/run-unit-tests.sh
=====================================
@@ -9,6 +9,8 @@ usage() {
echo "run-tests.sh [-?h] [-d test-dir] [-l lisp] [tests]"
echo " -d test-dir Directory containing the unit test files"
echo " -l lisp Lisp to use for the tests; defaults to lisp"
+ echo " -p Skip package-local-nicknames test"
+ echo " -u Skip lisp-unit tests"
echo " -? This help message"
echo " -h This help message"
echo ""
@@ -25,11 +27,13 @@ usage() {
}
LISP=lisp
-while getopts "h?l:d:" arg
+while getopts "puh?l:d:" arg
do
case $arg in
l) LISP=$OPTARG ;;
d) TESTDIR=$OPTARG ;;
+ p) SKIP_PLN=yes ;;
+ u) SKIP_UNIT=yes ;;
h|\?) usage ;;
esac
done
@@ -43,12 +47,19 @@ mkdir test-tmp
ln -s /bin/ls test-tmp/ls-link
# Set the timestamps on 64-bit-timestamp-2038.txt and
-# 64-bit-timestamp-2106.txt. The time for the first file is a
-# negative value for a 32-bit time_t. The second file won't fit in a
-# 32-bit time_t value. It's ok if this doesn't work in general, as
-# long as it works on Linux for the stat test in tests/os.lisp.
-touch -d "1 April 2038" tests/resources/64-bit-timestamp-2038.txt
-touch -d "1 April 2106" tests/resources/64-bit-timestamp-2106.txt
+# 64-bit-timestamp-2106.txt, but only for OSes where we know this
+# works. (This is so we don't an annoying error message from touch
+# that doesn't accept the -d option, like MacOS 10.13.) The time for
+# the first file is a negative value for a 32-bit time_t. The second
+# file won't fit in a 32-bit time_t value. It's ok if this doesn't
+# work in general, as long as it works on Linux for the stat test in
+# tests/os.lisp.
+case `uname -s` in
+ Linux)
+ touch -d "1 April 2038" tests/resources/64-bit-timestamp-2038.txt
+ touch -d "1 April 2106" tests/resources/64-bit-timestamp-2106.txt
+ ;;
+esac
# Cleanup temp files and directories that we created during testing.
function cleanup {
@@ -69,39 +80,47 @@ fi
# gcc since clang isn't always available.
(cd "$TESTDIR" || exit 1 ; gcc -m32 -O3 -c test-return.c)
-if [ $# -eq 0 ]; then
- # Test directory arg for run-all-tests if a non-default
- # No args so run all the tests
- $LISP -nositeinit -noinit -load "$TESTDIR"/run-tests.lisp -eval "(cmucl-test-runner:run-all-tests ${TESTDIRARG})"
-else
- # Run selected files. Convert each file name to uppercase and append "-TESTS"
- result=""
- for f in "$@"
- do
- new=$(echo "$f" | tr '[:lower:]' '[:upper:]')
- result="$result "\"$new-TESTS\"
- done
- $LISP -nositeinit -noinit -load "$TESTDIR"/run-tests.lisp -eval "(progn (cmucl-test-runner:load-test-files) (cmucl-test-runner:run-test $result))"
+if [ "$SKIP_UNIT" != "yes" ]; then
+ if [ $# -eq 0 ]; then
+ # Test directory arg for run-all-tests if a non-default
+ # No args so run all the tests
+ $LISP -nositeinit -noinit -load "$TESTDIR"/run-tests.lisp -eval "(cmucl-test-runner:run-all-tests ${TESTDIRARG})" ||
+ exit 1
+ else
+ # Run selected files. Convert each file name to uppercase and append "-TESTS"
+ result=""
+ for f in "$@"
+ do
+ new=$(echo "$f" | tr '[:lower:]' '[:upper:]')
+ result="$result "\"$new-TESTS\"
+ done
+ # Run unit tests. Exits with a non-zero code if there's a failure.
+
+ $LISP -nositeinit -noinit -load "$TESTDIR"/run-tests.lisp -eval "(progn (cmucl-test-runner:load-test-files) (cmucl-test-runner:run-test $result))" ||
+ exit 1
+ fi
fi
## Now run tests for trivial-package-local-nicknames
-REPO=trivial-package-local-nicknames
-BRANCH=cmucl-updates
+if [ "$SKIP_PLN" != "yes" ]; then
+ REPO=trivial-package-local-nicknames
+ BRANCH=cmucl-updates
-set -x
-if [ -d ../$REPO ]; then
- (cd ../$REPO || exit 1; git stash; git checkout $BRANCH; git pull --rebase)
-else
- (cd ..; git clone https://gitlab.common-lisp.net/cmucl/$REPO.git)
-fi
+ set -x
+ if [ -d ../$REPO ]; then
+ (cd ../$REPO || exit 1; git stash; git checkout $BRANCH; git pull --rebase)
+ else
+ (cd ..; git clone https://gitlab.common-lisp.net/cmucl/$REPO.git)
+ fi
-LISP=$PWD/$LISP
-cd ../$REPO || exit 1
-git checkout $BRANCH
+ LISP=$PWD/$LISP
+ cd ../$REPO || exit 1
+ git checkout $BRANCH
-# Run the tests. Exits with a non-zero code if there's a failure.
-$LISP -noinit -nositeinit -batch <<'EOF'
+ # Run the tests. Exits with a non-zero code if there's a failure.
+ $LISP -noinit -nositeinit -batch <<'EOF'
(require :asdf)
(push (default-directory) asdf:*central-registry*)
(asdf:test-system :trivial-package-local-nicknames)
EOF
+fi
=====================================
src/code/exports.lisp
=====================================
@@ -1213,7 +1213,8 @@
"INVALID-FASL"
"WITH-TEMPORARY-DIRECTORY"
- "WITH-TEMPORARY-FILE")
+ "WITH-TEMPORARY-FILE"
+ "DELETE-DIRECTORY")
;; gencgc features
#+gencgc
(:export "GET-GC-ASSERTIONS"
=====================================
src/code/extensions.lisp
=====================================
@@ -673,10 +673,10 @@
(defun delete-directory (dirname &key recursive)
_N"Delete the directory Dirname. If the Recursive is non-NIL,
recursively delete the directory Dirname including all files and
- subdirectories. Dirname must be a pathname to a directory. Any NAME
- or TYPE components in Dirname are ignored."
- (declare (type pathname dirname))
- (when recusive
+ subdirectories. Dirname must name a directory. Any NAME or TYPE
+ components in Dirname are ignored. A FILE-ERROR is signaled if any
+ directory cannot be deleted."
+ (when recursive
;; Find all the files or directories in DIRNAME.
(dolist (path (directory (merge-pathnames "*.*" dirname)))
;; If the path is a directory, recursively delete the directory.
@@ -685,8 +685,15 @@
(delete-directory path :recursive t)
(delete-file path))))
;; Finally delete the directory.
- (unix:unix-rmdir (namestring dirname))
- (values))
+ (multiple-value-bind (ok errno)
+ (unix:unix-rmdir (namestring dirname))
+ (unless ok
+ (error 'kernel:simple-file-error
+ :pathname dirname
+ :format-control (intl:gettext "Could not remove directory \"~A\": ~A.")
+ :format-arguments (list dirname
+ (unix:get-unix-error-msg errno))))
+ ok))
;;; WITH-TEMPORARY-DIRECTORY -- Public
=====================================
src/code/pathname.lisp
=====================================
@@ -843,13 +843,12 @@ a host-structure or string."
(flet ((check-component-validity (name name-or-type)
(when (stringp name)
(when (eq host (%pathname-host *default-pathname-defaults*))
- (when (find-if #'(lambda (c)
- ;; Illegal characters are a slash or NUL.
- (or (char= c #\/)
- (char= c #\nul)))
+ (when (some #'(lambda (c)
+ ;; Illegal characters are a slash or NUL.
+ (case c
+ ((#\/ #\null) t)))
name)
- (cerror _"Continue anyway"
- _"Pathname component ~A cannot contain a slash or nul character: ~S"
+ (error _"Pathname component ~A cannot contain a slash or nul character: ~S"
name-or-type name))))))
(check-component-validity name :pathname-name)
(check-component-validity type :pathname-type)
=====================================
src/code/unix.lisp
=====================================
@@ -2564,5 +2564,5 @@
(cast result c-call:c-string)
nil)
status))
- (free-alien name)))))
+ (free-alien result)))))
=====================================
src/compiler/float-tran-dd.lisp
=====================================
@@ -290,10 +290,10 @@
(optimize (speed 3)))
;; If the numbers are too big, scale them done so SPLIT doesn't overflow.
(multiple-value-bind (aa bb)
- (values (if (> a +two970+)
+ (values (if (> (abs a) +two970+)
(* a +two-53+)
a)
- (if (> b +two970+)
+ (if (> (abs b) +two970+)
(* b +two-53+)
b))
(let ((p (* aa bb)))
@@ -314,10 +314,10 @@
(declare (optimize (inhibit-warnings 3)))
;; If the numbers was scaled down, we need to scale the
;; result back up.
- (when (> a +two970+)
+ (when (> (abs a) +two970+)
(setf p (* p +two53+)
e (* e +two53+)))
- (when (> b +two970+)
+ (when (> (abs b) +two970+)
(setf p (* p +two53+)
e (* e +two53+)))
(values p e))))))))
=====================================
src/general-info/release-22a.md
=====================================
@@ -34,6 +34,7 @@ public domain.
* #446: Use C compiler to get errno values to update UNIX
defpackage with errno symbols
* #453: Use correct flags for analyzer and always save logs.
+ * #458: Spurious overflow in double-double-float multiply
* Other changes:
* Improvements to the PCL implementation of CLOS:
* Changes to building procedure:
=====================================
src/i18n/locale/cmucl.pot
=====================================
@@ -6011,8 +6011,13 @@ msgstr ""
msgid ""
"Delete the directory Dirname. If the Recursive is non-NIL,\n"
" recursively delete the directory Dirname including all files and\n"
-" subdirectories. Dirname must be a pathname to a directory. Any NAME\n"
-" or TYPE components in Dirname are ignored."
+" subdirectories. Dirname must name a directory. Any NAME or TYPE\n"
+" components in Dirname are ignored. A FILE-ERROR is signaled if any\n"
+" directory cannot be deleted."
+msgstr ""
+
+#: src/code/extensions.lisp
+msgid "Could not remove directory \"~A\": ~A."
msgstr ""
#: src/code/extensions.lisp
=====================================
tests/float-x86.lisp
=====================================
@@ -5,6 +5,11 @@
(in-package "FLOAT-X86-TESTS")
+;; This tests the floating-point modes for x86. This works only if we
+;; have the feature :sse2 but not :darwin since darwin has always used
+;; sse2 and not x87. But see also how FLOATING-POINT-MODES is
+;; implemented in src/code/float-trap.lisp.
+#+(and sse2 (not darwin))
(define-test set-floating-point-modes
(let ((old-x87-modes (x86::x87-floating-point-modes))
(old-sse2-modes (x86::sse2-floating-point-modes))
=====================================
tests/float.lisp
=====================================
@@ -342,3 +342,9 @@
(x86::x87-floating-point-modes)))))
(assert-true (typep new-mode 'x86::float-modes))
(assert-equal new-mode (setf (x86::x87-floating-point-modes) new-mode))))
+
+;; Issue #458
+(define-test dd-mult-overflow
+ (:tag :issues)
+ (assert-equal -2w300
+ (* -2w300 1w0)))
=====================================
tests/os.lisp
=====================================
@@ -51,6 +51,7 @@
(assert-equal 2153718000 st-atime)
(assert-equal 2153718000 st-mtime))))
+#+linux
(define-test stat.64-bit-timestamp-2106
(:tag :issues)
(let ((test-file #.(merge-pathnames "resources/64-bit-timestamp-2106.txt"
=====================================
tests/pathname.lisp
=====================================
@@ -143,6 +143,18 @@
:truenamep nil :follow-links nil)))
(assert-equal dir-tilde dir-home))))
+(define-test delete-directory
+ (:tag :issues)
+ (ext:with-temporary-directory (path)
+ (let ((dir (ensure-directories-exist (merge-pathnames "tmp/a/b/c/" path))))
+ ;; Try to delete the directory. It should fail..
+ (assert-error 'kernel:simple-file-error
+ (ext:delete-directory (merge-pathnames "tmp/" path)))
+ ;; Now recursively delete the directory.
+ (assert-true (ext:delete-directory (merge-pathnames "tmp/" path)
+ :recursive t))
+ (assert-false (directory (merge-pathnames "tmp/" path))))))
+
(define-test issue.454.illegal-pathname-chars
(:tag :issues)
;; A slash (Unix directory separater) is not allowed.
@@ -167,3 +179,4 @@
(make-pathname :name "."))
(assert-error 'simple-error
(make-pathname :name "..")))
+
=====================================
tests/unix.lisp
=====================================
@@ -88,4 +88,7 @@
(assert-false result)
(assert-true (and (integerp errno) (plusp errno)))))
-
+(define-test unix-get-username
+ (let ((uid (unix:unix-getuid)))
+ (assert-true uid)
+ (assert-true (unix::unix-get-username uid))))
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/compare/b2c51c988f73c44824b5d9…
--
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/compare/b2c51c988f73c44824b5d9…
You're receiving this email because of your account on gitlab.common-lisp.net.
1
0
[Git][cmucl/cmucl][master] 2 commits: Fix #460: Exit with error if main unit-tests fail
by Raymond Toy (@rtoy) 02 Jan '26
by Raymond Toy (@rtoy) 02 Jan '26
02 Jan '26
Raymond Toy pushed to branch master at cmucl / cmucl
Commits:
99d8540a by Raymond Toy at 2026-01-02T10:05:16-08:00
Fix #460: Exit with error if main unit-tests fail
- - - - -
28de6c68 by Raymond Toy at 2026-01-02T10:05:17-08:00
Merge branch 'issue-460-ci-fails-if-unit-tests-do' into 'master'
Fix #460: Exit with error if main unit-tests fail
Closes #460
See merge request cmucl/cmucl!340
- - - - -
3 changed files:
- bin/run-unit-tests.sh
- tests/float-x86.lisp
- tests/os.lisp
Changes:
=====================================
bin/run-unit-tests.sh
=====================================
@@ -9,6 +9,8 @@ usage() {
echo "run-tests.sh [-?h] [-d test-dir] [-l lisp] [tests]"
echo " -d test-dir Directory containing the unit test files"
echo " -l lisp Lisp to use for the tests; defaults to lisp"
+ echo " -p Skip package-local-nicknames test"
+ echo " -u Skip lisp-unit tests"
echo " -? This help message"
echo " -h This help message"
echo ""
@@ -25,11 +27,13 @@ usage() {
}
LISP=lisp
-while getopts "h?l:d:" arg
+while getopts "puh?l:d:" arg
do
case $arg in
l) LISP=$OPTARG ;;
d) TESTDIR=$OPTARG ;;
+ p) SKIP_PLN=yes ;;
+ u) SKIP_UNIT=yes ;;
h|\?) usage ;;
esac
done
@@ -43,12 +47,19 @@ mkdir test-tmp
ln -s /bin/ls test-tmp/ls-link
# Set the timestamps on 64-bit-timestamp-2038.txt and
-# 64-bit-timestamp-2106.txt. The time for the first file is a
-# negative value for a 32-bit time_t. The second file won't fit in a
-# 32-bit time_t value. It's ok if this doesn't work in general, as
-# long as it works on Linux for the stat test in tests/os.lisp.
-touch -d "1 April 2038" tests/resources/64-bit-timestamp-2038.txt
-touch -d "1 April 2106" tests/resources/64-bit-timestamp-2106.txt
+# 64-bit-timestamp-2106.txt, but only for OSes where we know this
+# works. (This is so we don't an annoying error message from touch
+# that doesn't accept the -d option, like MacOS 10.13.) The time for
+# the first file is a negative value for a 32-bit time_t. The second
+# file won't fit in a 32-bit time_t value. It's ok if this doesn't
+# work in general, as long as it works on Linux for the stat test in
+# tests/os.lisp.
+case `uname -s` in
+ Linux)
+ touch -d "1 April 2038" tests/resources/64-bit-timestamp-2038.txt
+ touch -d "1 April 2106" tests/resources/64-bit-timestamp-2106.txt
+ ;;
+esac
# Cleanup temp files and directories that we created during testing.
function cleanup {
@@ -69,39 +80,47 @@ fi
# gcc since clang isn't always available.
(cd "$TESTDIR" || exit 1 ; gcc -m32 -O3 -c test-return.c)
-if [ $# -eq 0 ]; then
- # Test directory arg for run-all-tests if a non-default
- # No args so run all the tests
- $LISP -nositeinit -noinit -load "$TESTDIR"/run-tests.lisp -eval "(cmucl-test-runner:run-all-tests ${TESTDIRARG})"
-else
- # Run selected files. Convert each file name to uppercase and append "-TESTS"
- result=""
- for f in "$@"
- do
- new=$(echo "$f" | tr '[:lower:]' '[:upper:]')
- result="$result "\"$new-TESTS\"
- done
- $LISP -nositeinit -noinit -load "$TESTDIR"/run-tests.lisp -eval "(progn (cmucl-test-runner:load-test-files) (cmucl-test-runner:run-test $result))"
+if [ "$SKIP_UNIT" != "yes" ]; then
+ if [ $# -eq 0 ]; then
+ # Test directory arg for run-all-tests if a non-default
+ # No args so run all the tests
+ $LISP -nositeinit -noinit -load "$TESTDIR"/run-tests.lisp -eval "(cmucl-test-runner:run-all-tests ${TESTDIRARG})" ||
+ exit 1
+ else
+ # Run selected files. Convert each file name to uppercase and append "-TESTS"
+ result=""
+ for f in "$@"
+ do
+ new=$(echo "$f" | tr '[:lower:]' '[:upper:]')
+ result="$result "\"$new-TESTS\"
+ done
+ # Run unit tests. Exits with a non-zero code if there's a failure.
+
+ $LISP -nositeinit -noinit -load "$TESTDIR"/run-tests.lisp -eval "(progn (cmucl-test-runner:load-test-files) (cmucl-test-runner:run-test $result))" ||
+ exit 1
+ fi
fi
## Now run tests for trivial-package-local-nicknames
-REPO=trivial-package-local-nicknames
-BRANCH=cmucl-updates
+if [ "$SKIP_PLN" != "yes" ]; then
+ REPO=trivial-package-local-nicknames
+ BRANCH=cmucl-updates
-set -x
-if [ -d ../$REPO ]; then
- (cd ../$REPO || exit 1; git stash; git checkout $BRANCH; git pull --rebase)
-else
- (cd ..; git clone https://gitlab.common-lisp.net/cmucl/$REPO.git)
-fi
+ set -x
+ if [ -d ../$REPO ]; then
+ (cd ../$REPO || exit 1; git stash; git checkout $BRANCH; git pull --rebase)
+ else
+ (cd ..; git clone https://gitlab.common-lisp.net/cmucl/$REPO.git)
+ fi
-LISP=$PWD/$LISP
-cd ../$REPO || exit 1
-git checkout $BRANCH
+ LISP=$PWD/$LISP
+ cd ../$REPO || exit 1
+ git checkout $BRANCH
-# Run the tests. Exits with a non-zero code if there's a failure.
-$LISP -noinit -nositeinit -batch <<'EOF'
+ # Run the tests. Exits with a non-zero code if there's a failure.
+ $LISP -noinit -nositeinit -batch <<'EOF'
(require :asdf)
(push (default-directory) asdf:*central-registry*)
(asdf:test-system :trivial-package-local-nicknames)
EOF
+fi
=====================================
tests/float-x86.lisp
=====================================
@@ -5,6 +5,11 @@
(in-package "FLOAT-X86-TESTS")
+;; This tests the floating-point modes for x86. This works only if we
+;; have the feature :sse2 but not :darwin since darwin has always used
+;; sse2 and not x87. But see also how FLOATING-POINT-MODES is
+;; implemented in src/code/float-trap.lisp.
+#+(and sse2 (not darwin))
(define-test set-floating-point-modes
(let ((old-x87-modes (x86::x87-floating-point-modes))
(old-sse2-modes (x86::sse2-floating-point-modes))
=====================================
tests/os.lisp
=====================================
@@ -51,6 +51,7 @@
(assert-equal 2153718000 st-atime)
(assert-equal 2153718000 st-mtime))))
+#+linux
(define-test stat.64-bit-timestamp-2106
(:tag :issues)
(let ((test-file #.(merge-pathnames "resources/64-bit-timestamp-2106.txt"
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/compare/10efd37c019d624ebee6a2…
--
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/compare/10efd37c019d624ebee6a2…
You're receiving this email because of your account on gitlab.common-lisp.net.
1
0
[Git][cmucl/cmucl][issue-456-more-accurate-complex-div] Address (most) review comments
by Raymond Toy (@rtoy) 02 Jan '26
by Raymond Toy (@rtoy) 02 Jan '26
02 Jan '26
Raymond Toy pushed to branch issue-456-more-accurate-complex-div at cmucl / cmucl
Commits:
ef99f009 by Raymond Toy at 2026-01-02T09:40:54-08:00
Address (most) review comments
- - - - -
3 changed files:
- src/code/numbers.lisp
- src/general-info/release-22a.md
- tests/float.lisp
Changes:
=====================================
src/code/numbers.lisp
=====================================
@@ -635,7 +635,7 @@
;; Thus tt = (c + d*r).
(cond ((>= (abs r) +rmin+)
(let ((br (* b r)))
- (if (/= br 0)
+ (if (/= br 0d0)
(/ (+ a br) tt)
;; b*r underflows. Instead, compute
;;
@@ -726,28 +726,26 @@
(multiple-value-bind (e f)
(robust-subinternal b a d c)
(complex e (- f))))))))))
- (let* ((a (realpart x))
- (b (imagpart x))
- (c (realpart y))
- (d (imagpart y))
- (ab (max (abs a) (abs b)))
- (cd (max (abs c) (abs d)))
+ (let* ((max-ab (max (abs (realpart x))
+ (abs (imagpart x))))
+ (max-cd (max (abs (realpart y))
+ (abs (imagpart y))))
(s 1d0))
(declare (double-float s))
;; If a or b is big, scale down a and b.
- (when (>= ab +rbig+)
- (setf x (/ x 2)
- s (* s 2)))
+ (when (>= max-ab +rbig+)
+ (setf x (/ x 2d0)
+ s (* s 2d0)))
;; If c or d is big, scale down c and d.
- (when (>= cd +rbig+)
- (setf y (/ y 2)
- s (/ s 2)))
+ (when (>= max-cd +rbig+)
+ (setf y (/ y 2d0)
+ s (/ s 2d0)))
;; If a or b is tiny, scale up a and b.
- (when (<= ab (* +rmin+ +2/eps+))
+ (when (<= max-ab (* +rmin+ +2/eps+))
(setf x (* x +be+)
s (/ s +be+)))
;; If c or d is tiny, scale up c and d.
- (when (<= cd (* +rmin+ +2/eps+))
+ (when (<= max-cd (* +rmin+ +2/eps+))
(setf y (* y +be+)
s (* s +be+)))
(* s
@@ -909,6 +907,7 @@
(build-ratio (maybe-truncate nx gcd)
(* (maybe-truncate y gcd) (denominator x)))))))
+
(defun %negate (n)
(number-dispatch ((n number))
(((foreach fixnum single-float double-float #+long-float long-float))
=====================================
src/general-info/release-22a.md
=====================================
@@ -35,6 +35,8 @@ public domain.
defpackage with errno symbols
* #453: Use correct flags for analyzer and always save logs.
* #456: Improve accuracy for division of complex double-floats
+ using Baudin and Smith's robust complex division algorithm
+ with improvements by Patrick McGehearty.
* #458: Spurious overflow in double-double-float multiply
* Other changes:
* Improvements to the PCL implementation of CLOS:
=====================================
tests/float.lisp
=====================================
@@ -354,7 +354,7 @@
;; Rudimentary code to read C %a formatted numbers that look like
;; "-0x1.c4dba4ba1ee79p-620". We assume STRING is exactly in this
;; format. No error-checking is done.
-(defun parse-%a (string)
+(defun parse-hex-float (string)
(let* ((sign (if (char= (aref string 0) #\-)
-1
1))
@@ -445,30 +445,43 @@
;; 13
;; Iteration 1. Without this, we would instead return
;;
- ;; (complex (parse-%a "0x1.ba8df8075bceep+155") (parse-%a "-0x1.a4ad6329485f0p-895"))
+ ;; (complex (parse-hex-float "0x1.ba8df8075bceep+155")
+ ;; (parse-hex-float "-0x1.a4ad6329485f0p-895"))
;;
;; whose imaginary part is quite a bit off.
- (list (complex (parse-%a "0x1.73a3dac1d2f1fp+509") (parse-%a "-0x1.c4dba4ba1ee79p-620"))
- (complex (parse-%a "0x1.adf526c249cf0p+353") (parse-%a "0x1.98b3fbc1677bbp-697"))
- (complex (parse-%a "0x1.BA8DF8075BCEEp+155") (parse-%a "-0x1.A4AD628DA5B74p-895"))
+ (list (complex (parse-hex-float "0x1.73a3dac1d2f1fp+509")
+ (parse-hex-float "-0x1.c4dba4ba1ee79p-620"))
+ (complex (parse-hex-float "0x1.adf526c249cf0p+353")
+ (parse-hex-float "0x1.98b3fbc1677bbp-697"))
+ (complex (parse-hex-float "0x1.BA8DF8075BCEEp+155")
+ (parse-hex-float "-0x1.A4AD628DA5B74p-895"))
53)
;; 14
;; Iteration 2.
- (list (complex (parse-%a "-0x0.000000008e4f8p-1022") (parse-%a "0x0.0000060366ba7p-1022"))
- (complex (parse-%a "-0x1.605b467369526p-245") (parse-%a "0x1.417bd33105808p-256"))
- (complex (parse-%a "0x1.cde593daa4ffep-810") (parse-%a "-0x1.179b9a63df6d3p-799"))
+ (list (complex (parse-hex-float "-0x0.000000008e4f8p-1022")
+ (parse-hex-float "0x0.0000060366ba7p-1022"))
+ (complex (parse-hex-float "-0x1.605b467369526p-245")
+ (parse-hex-float "0x1.417bd33105808p-256"))
+ (complex (parse-hex-float "0x1.cde593daa4ffep-810")
+ (parse-hex-float "-0x1.179b9a63df6d3p-799"))
52)
;; 15
;; Iteration 3
- (list (complex (parse-%a "0x1.cb27eece7c585p-355 ") (parse-%a "0x0.000000223b8a8p-1022"))
- (complex (parse-%a "-0x1.74e7ed2b9189fp-22") (parse-%a "0x1.3d80439e9a119p-731"))
- (complex (parse-%a "-0x1.3b35ed806ae5ap-333") (parse-%a "-0x0.05e01bcbfd9f6p-1022"))
+ (list (complex (parse-hex-float "0x1.cb27eece7c585p-355 ")
+ (parse-hex-float "0x0.000000223b8a8p-1022"))
+ (complex (parse-hex-float "-0x1.74e7ed2b9189fp-22")
+ (parse-hex-float "0x1.3d80439e9a119p-731"))
+ (complex (parse-hex-float "-0x1.3b35ed806ae5ap-333")
+ (parse-hex-float "-0x0.05e01bcbfd9f6p-1022"))
53)
;; 16
;; Iteration 4
- (list (complex (parse-%a "-0x1.f5c75c69829f0p-530") (parse-%a "-0x1.e73b1fde6b909p+316"))
- (complex (parse-%a "-0x1.ff96c3957742bp+1023") (parse-%a "0x1.5bd78c9335899p+1021"))
- (complex (parse-%a "-0x1.423c6ce00c73bp-710") (parse-%a "0x1.d9edcf45bcb0ep-708"))
+ (list (complex (parse-hex-float "-0x1.f5c75c69829f0p-530")
+ (parse-hex-float "-0x1.e73b1fde6b909p+316"))
+ (complex (parse-hex-float "-0x1.ff96c3957742bp+1023")
+ (parse-hex-float "0x1.5bd78c9335899p+1021"))
+ (complex (parse-hex-float "-0x1.423c6ce00c73bp-710")
+ (parse-hex-float "0x1.d9edcf45bcb0ep-708"))
52)
))
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/commit/ef99f00954a34ece65ebdb8…
--
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/commit/ef99f00954a34ece65ebdb8…
You're receiving this email because of your account on gitlab.common-lisp.net.
1
0
[Git][cmucl/cmucl][issue-460-ci-fails-if-unit-tests-do] Address review comments.
by Raymond Toy (@rtoy) 02 Jan '26
by Raymond Toy (@rtoy) 02 Jan '26
02 Jan '26
Raymond Toy pushed to branch issue-460-ci-fails-if-unit-tests-do at cmucl / cmucl
Commits:
b0685947 by Raymond Toy at 2026-01-02T08:52:23-08:00
Address review comments.
- - - - -
1 changed file:
- bin/run-unit-tests.sh
Changes:
=====================================
bin/run-unit-tests.sh
=====================================
@@ -9,8 +9,8 @@ usage() {
echo "run-tests.sh [-?h] [-d test-dir] [-l lisp] [tests]"
echo " -d test-dir Directory containing the unit test files"
echo " -l lisp Lisp to use for the tests; defaults to lisp"
- echo " -u Skip lisp-unit tests"
echo " -p Skip package-local-nicknames test"
+ echo " -u Skip lisp-unit tests"
echo " -? This help message"
echo " -h This help message"
echo ""
@@ -27,13 +27,13 @@ usage() {
}
LISP=lisp
-while getopts "uph?l:d:" arg
+while getopts "puh?l:d:" arg
do
case $arg in
l) LISP=$OPTARG ;;
d) TESTDIR=$OPTARG ;;
- u) SKIP_UNIT=yes ;;
p) SKIP_PLN=yes ;;
+ u) SKIP_UNIT=yes ;;
h|\?) usage ;;
esac
done
@@ -102,8 +102,6 @@ if [ "$SKIP_UNIT" != "yes" ]; then
fi
## Now run tests for trivial-package-local-nicknames
-echo SKIP_PLN = $SKIP_PLN
-
if [ "$SKIP_PLN" != "yes" ]; then
REPO=trivial-package-local-nicknames
BRANCH=cmucl-updates
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/commit/b0685947297a6d5102e5205…
--
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/commit/b0685947297a6d5102e5205…
You're receiving this email because of your account on gitlab.common-lisp.net.
1
0
[Git][cmucl/cmucl][issue-425-correctly-rounded-math-functions-single-float] 49 commits: Merge branch 'master' into issue-425-correctly-rounded-math-functions
by Raymond Toy (@rtoy) 26 Dec '25
by Raymond Toy (@rtoy) 26 Dec '25
26 Dec '25
Raymond Toy pushed to branch issue-425-correctly-rounded-math-functions-single-float at cmucl / cmucl
Commits:
f5a811dc by Raymond Toy at 2025-10-17T08:18:53-07:00
Merge branch 'master' into issue-425-correctly-rounded-math-functions
- - - - -
07be52cc by Raymond Toy at 2025-10-23T16:30:34-07:00
Fix #449: touch 64-bit-timestamp.txt with desired time
- - - - -
443a77eb by Raymond Toy at 2025-10-23T16:30:34-07:00
Merge branch 'issue-449-set-timestamp-on-test-file' into 'master'
Fix #449: touch 64-bit-timestamp.txt with desired time
Closes #449
See merge request cmucl/cmucl!328
- - - - -
c5c80aef by Raymond Toy at 2025-11-06T06:38:25-08:00
21f is not a WIP
Remove the heading from the release notes for 21f. Forgot to fix this
when doing the 21f release.
[skip-ci]
- - - - -
b764d014 by Raymond Toy at 2025-11-06T07:20:10-08:00
Fix #437: Use realpath to find the executable
- - - - -
2a9edb1f by Raymond Toy at 2025-11-06T07:20:11-08:00
Merge branch 'issue-437-find-self' into 'master'
Fix #437: Use realpath to find the executable
Closes #437
See merge request cmucl/cmucl!329
- - - - -
c1904aaa by Raymond Toy at 2025-11-06T08:37:30-08:00
Fix #446: Use C compiler to get errno values and generate UNIX defpackage for errno
- - - - -
f6df759b by Raymond Toy at 2025-11-06T08:37:30-08:00
Merge branch 'issue-446-use-cc-to-get-errno' into 'master'
Fix #446: Use C compiler to get errno values and generate UNIX defpackage for errno
Closes #446
See merge request cmucl/cmucl!327
- - - - -
b61d6e17 by Raymond Toy at 2025-11-06T17:28:00-08:00
Fix #452: Move bin/errno-foo.lisp to src/tools/
- - - - -
8508d11e by Raymond Toy at 2025-11-06T17:28:00-08:00
Merge branch 'issue-452-move-errno-ref-files' into 'master'
Fix #452: Move bin/errno-foo.lisp to src/tools/
Closes #452
See merge request cmucl/cmucl!330
- - - - -
ec60199f by Raymond Toy at 2025-11-09T11:30:40-08:00
Address #453: Save analyzer logs even if analyzer fails
- - - - -
23ef5ca7 by Raymond Toy at 2025-11-09T11:30:40-08:00
Merge branch 'issue-453-save-analyzer-results' into 'master'
Address #453: Save analyzer logs even if analyzer fails
See merge request cmucl/cmucl!331
- - - - -
2072ca19 by Raymond Toy at 2025-11-10T05:07:47-08:00
Fix #453: Use correct flags when running the analyzer
- - - - -
671d8973 by Raymond Toy at 2025-11-10T05:07:47-08:00
Merge branch 'issue-453-update-make-options-for-analyzer' into 'master'
Fix #453: Use correct flags when running the analyzer
Closes #453
See merge request cmucl/cmucl!332
- - - - -
aca11a4b by Raymond Toy at 2025-11-13T10:56:53-08:00
Fix #373: Add macros to handle temporary files, streams, and directories
- - - - -
f5484369 by Raymond Toy at 2025-11-13T10:56:53-08:00
Merge branch 'issue-373-handle-temp-files' into 'master'
Fix #373: Add macros to handle temporary files, streams, and directories
Closes #373 and #375
See merge request cmucl/cmucl!269
- - - - -
420d3ee2 by Raymond Toy at 2025-11-13T13:38:01-08:00
Fix #408: Add C functions to get user name and home dir
- - - - -
143a7651 by Raymond Toy at 2025-11-13T13:38:01-08:00
Merge branch 'issue-408-get-user-name-and-homedir' into 'master'
Fix #408: Add C functions to get user name and home dir
Closes #408, #373, and #375
See merge request cmucl/cmucl!300
- - - - -
7d268755 by Raymond Toy at 2025-11-13T14:21:32-08:00
Update 22a release notes
Add recently fixed issues to the notes.
[skip-ci]
- - - - -
b04aaec6 by Raymond Toy at 2025-12-03T18:30:46-08:00
Dummy commit to run pipeline
Just removed an extra line at the end of the file.
- - - - -
16c334b0 by Raymond Toy at 2025-12-04T15:46:41-08:00
Undo previous change that deleted a blank line
Dummy commit to get CI to run to test out concurrent
builds. (concurrent=2).
- - - - -
25cd44a2 by Raymond Toy at 2025-12-04T17:57:49-08:00
Fix #455: Allow manual pipeline runs
- - - - -
ae1bdde7 by Raymond Toy at 2025-12-04T17:57:50-08:00
Merge branch 'issue-455-manual-pipeline-run' into 'master'
Fix #455: Allow manual pipeline runs
Closes #455
See merge request cmucl/cmucl!334
- - - - -
fd2e83a1 by Raymond Toy at 2025-12-12T15:38:35-08:00
Fix two important typos in unix-get-username and delete-directory
In `unix-get-username`, we were freeing `name` instead of `result`.
In `delete-directory`, we misspelled `recursive` as `recusive`.
Fix these typos.
- - - - -
b9494595 by Raymond Toy at 2025-12-12T15:54:05-08:00
Add some tests for unix-get-username and delete-directory
Add a simple test that unix-get-username returns something useful.
Add a test for delete-directory that tests it deletes directories as
specified, include recursively.
- - - - -
e2b4641a by Raymond Toy at 2025-12-13T14:24:22-08:00
Fix #458: Fix spurious overflow in double-double multiply
- - - - -
16097f45 by Raymond Toy at 2025-12-13T14:24:22-08:00
Merge branch 'issue-458-double-double-mult-overflow' into 'master'
Fix #458: Fix spurious overflow in double-double multiply
Closes #458
See merge request cmucl/cmucl!337
- - - - -
f146f87f by Raymond Toy at 2025-12-13T15:11:21-08:00
Add fixed issue #458 to release notes
Forgot to do that.
[skip-ci]
- - - - -
2c36bac8 by Raymond Toy at 2025-12-15T17:34:46-08:00
Use (new) Ubuntu VM to run CI instead of OpenSUSE
- - - - -
7ebc2654 by Raymond Toy at 2025-12-15T17:34:46-08:00
Merge branch 'rtoy-add-ubuntu-runner' into 'master'
Use (new) Ubuntu VM to run CI instead of OpenSUSE
See merge request cmucl/cmucl!339
- - - - -
84435227 by Raymond Toy at 2025-12-15T18:37:49-08:00
Merge branch 'master' into issue-425-correctly-rounded-math-functions
- - - - -
6abcc6b4 by Raymond Toy at 2025-12-16T15:57:17-08:00
Use clang to build the core-math routines on Linux
Add new variable `CONFIG` to let each build choose what config to use.
Currently, we need x86_linux_clang for Linux to be able to build the
core-math routines. Eventually, we need to fix it so that gcc can
build the core-math routines.
- - - - -
6b926281 by Raymond Toy at 2025-12-16T16:38:24-08:00
Try to fix bugs
For darwin builds, explicitly set CONFIG to x86_darwin.
For Linux cross-compile, we forgot to specify the config with
create-target.sh.
- - - - -
b68a8d74 by Raymond Toy at 2025-12-16T18:40:57-08:00
If the unit tests fail, exit with a non-zero code
In `run-tests`, if the results are not empty, exit with a non-zero
exit code to tell the caller something didn't pass.
- - - - -
b939b118 by Raymond Toy at 2025-12-16T18:44:35-08:00
Oops. Use :exitp in print-test-results to exit
Revert last change and use the :exitp parameter to print-test-results
to exit if there are failures.
- - - - -
e174f34d by Raymond Toy at 2025-12-16T18:48:08-08:00
Add -u and -p options and exit if lisp-unit tests fail
Add -u and -p commandline options to skip the lisp-unit tests or the
package-local-nickname tests, respectively.
If the lisp-unit tests fail, we want to exit immediately instead of
running the package-local-nicknames tests. Without this, it looks
like everything is ok if the package-local-nickname tests pass.
- - - - -
e65f9f5c by Raymond Toy at 2025-12-17T07:04:10-08:00
Fix #457: delete-directory signals errors
- - - - -
6034f935 by Raymond Toy at 2025-12-17T07:04:10-08:00
Merge branch 'issue-457-delete-directory-signals-errors' into 'master'
Fix #457: delete-directory signals errors
Closes #457
See merge request cmucl/cmucl!336
- - - - -
10efd37c by Raymond Toy at 2025-12-17T07:12:47-08:00
Remove extra blank lines
Addresses comment from !337:
https://gitlab.common-lisp.net/cmucl/cmucl/-/merge_requests/337#note_18529
Don't need to run CI for this.
[skip-ci]
- - - - -
0996e320 by Raymond Toy at 2025-12-17T13:38:16-08:00
Adjust threshold for log-consistency test
Change the threshold for the first test case to 1.42108548d-14 instead
of 1.77635684d-15. This worst case value happens for k = 326.
- - - - -
53b84f3d by Raymond Toy at 2025-12-17T13:41:47-08:00
Adjust expected value for asinh of most-positive-double-float
The expected result has changed by a single bit with core-math.
- - - - -
4c8b272e by Raymond Toy at 2025-12-17T13:43:47-08:00
Adjust expected value for acosh of most-positive-double-float
The expected result has changed by a single bit with core-math.
- - - - -
07fd3bac by Raymond Toy at 2025-12-17T13:45:23-08:00
Let's try gcc with -march=haswell
An experiment to see if we can compile the code with gcc if we set
-march=hashwell, which is the first processor with the FMA
instruction.
- - - - -
ad844ddd by Raymond Toy at 2025-12-18T06:36:11-08:00
Revert "Let's try gcc with -march=haswell"
This reverts commit 07fd3bac2529867a46d9dd610ca4dfaedeb20172.
- - - - -
467e0824 by Raymond Toy at 2025-12-18T07:56:25-08:00
Update value for (acosh 4d0) for core-math
Core-math returns 2.0634370688955603d0.
I'm going to assume that's correct even though (acosh 4w0) is
2.06343706889556054672728117262013w0
And Maxima says:
2.063437068895560546727281172620131871456591449883392499836032693b0
- - - - -
b35fd453 by Raymond Toy at 2025-12-18T09:16:17-08:00
Workaround or disable tests failing with core-math
For some tests core-math signals a different error. For these,
update the expected error condition with the actual error condition.
For some tests, core-math doesn't signal an error. Disable these.
- - - - -
9c16379a by Raymond Toy at 2025-12-18T11:43:32-08:00
Add -std=gnu11 to CFLAGS for x86_linux config
Tested this locally with gcc 15.2.1. The core-math routines can
compile along with everything else.
- - - - -
885baf0f by Raymond Toy at 2025-12-24T12:43:58-08:00
Merge branch 'master' into issue-425-correctly-rounded-math-functions
- - - - -
b5fa6d7c by Raymond Toy at 2025-12-26T12:30:10-08:00
Merge branch 'issue-425-correctly-rounded-math-functions' into issue-425-correctly-rounded-math-functions-single-float
- - - - -
48 changed files:
- .gitignore
- .gitlab-ci.yml
- bin/build-world.sh
- − bin/create-def-unix-error.awk
- bin/create-errno.sh
- − bin/errno-darwin.lisp
- − bin/errno-default.lisp
- − bin/errno-linux.lisp
- − bin/errno-solaris.lisp
- bin/run-ansi-tests.sh
- bin/run-unit-tests.sh
- src/code/exports.lisp
- src/code/extensions.lisp
- src/code/filesys.lisp
- src/code/os.lisp
- src/code/pprint.lisp
- src/code/unix.lisp
- src/compiler/float-tran-dd.lisp
- src/general-info/release-21f.md
- src/general-info/release-22a.md
- src/i18n/locale/cmucl-unix.pot
- src/i18n/locale/cmucl.pot
- src/lisp/Config.x86_linux
- src/lisp/Darwin-os.c
- src/lisp/FreeBSD-os.c
- src/lisp/Linux-os.c
- src/lisp/NetBSD-os.c
- src/lisp/OpenBSD-os.c
- src/lisp/lisp.c
- src/lisp/os-common.c
- src/lisp/solaris-os.c
- + src/tools/errno-darwin.lisp
- + src/tools/errno-default.lisp
- + src/tools/errno-linux.lisp
- + src/tools/errno-solaris.lisp
- bin/errno-template.lisp → src/tools/errno-template.lisp
- + src/tools/unix-pkg-template.lisp
- src/tools/worldcom.lisp
- src/tools/worldload.lisp
- tests/fd-streams.lisp
- tests/fdlibm.lisp
- tests/os.lisp
- tests/pathname.lisp
- tests/resources/64-bit-timestamp.txt → tests/resources/64-bit-timestamp-2038.txt
- + tests/resources/64-bit-timestamp-2106.txt
- tests/run-tests.lisp
- tests/trac.lisp
- tests/unix.lisp
The diff was not included because it is too large.
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/compare/c81e43e930f40b5b267d2d…
--
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/compare/c81e43e930f40b5b267d2d…
You're receiving this email because of your account on gitlab.common-lisp.net.
1
0
[Git][cmucl/cmucl][issue-460-ci-fails-if-unit-tests-do] Don't run float-x86 tests on Darwin
by Raymond Toy (@rtoy) 19 Dec '25
by Raymond Toy (@rtoy) 19 Dec '25
19 Dec '25
Raymond Toy pushed to branch issue-460-ci-fails-if-unit-tests-do at cmucl / cmucl
Commits:
a8aa9974 by Raymond Toy at 2025-12-18T19:16:55-08:00
Don't run float-x86 tests on Darwin
As hinted by in float-trap.lisp, we don't use x87 FP mode stuff on
Darwin. (`floating-point-modes` for Darwin doesn't play with x87
bits.) Hence the test in float-trap.lisp doesn't apply to Darwin so
don't run it.
Add a comment here too.
- - - - -
1 changed file:
- tests/float-x86.lisp
Changes:
=====================================
tests/float-x86.lisp
=====================================
@@ -5,6 +5,11 @@
(in-package "FLOAT-X86-TESTS")
+;; This tests the floating-point modes for x86. This works only if we
+;; have the feature :sse2 but not :darwin since darwin has always used
+;; sse2 and not x87. But see also how FLOATING-POINT-MODES is
+;; implemented in src/code/float-trap.lisp.
+#+(and sse2 (not darwin))
(define-test set-floating-point-modes
(let ((old-x87-modes (x86::x87-floating-point-modes))
(old-sse2-modes (x86::sse2-floating-point-modes))
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/commit/a8aa9974fa91b6a51cce7fd…
--
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/commit/a8aa9974fa91b6a51cce7fd…
You're receiving this email because of your account on gitlab.common-lisp.net.
1
0