From bdd4fb50007147cd359b99da0d908b4d39f53e80 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Mon, 16 Feb 2026 06:32:35 -0800 Subject: [PATCH] sbclPackages.cl-ana: fix type error in fixed-mem-cache for SBCL 2.6.0 In cl-ana.makeres, the fixed-mem-cache function uses (setf (cdr (last cache)) (list id)) where cache can be nil (initial state or after popping all elements). (last nil) returns nil, making (setf (cdr nil) ...) undefined. SBCL 2.6.0's stricter type inference catches this as a type conflict, causing COMPILE-FILE-ERROR. Replace with nconc which handles the nil case correctly. --- .../patches/cl-ana-fix-type-error.patch | 21 +++++++++++++++++++ pkgs/development/lisp-modules/ql.nix | 3 +++ 2 files changed, 24 insertions(+) create mode 100644 pkgs/development/lisp-modules/patches/cl-ana-fix-type-error.patch diff --git a/pkgs/development/lisp-modules/patches/cl-ana-fix-type-error.patch b/pkgs/development/lisp-modules/patches/cl-ana-fix-type-error.patch new file mode 100644 index 000000000000..de31a1255931 --- /dev/null +++ b/pkgs/development/lisp-modules/patches/cl-ana-fix-type-error.patch @@ -0,0 +1,21 @@ +Fix type error in fixed-mem-cache for SBCL 2.6.0 + +cache starts as nil and may be emptied by the loop, so (last cache) +can return nil. (setf (cdr nil) ...) is undefined behavior that +SBCL 2.6.0 now catches as a type conflict during compilation, +causing COMPILE-FILE-ERROR. + +Use nconc instead, which handles the nil case correctly. + +Upstream issue: https://github.com/ghollisjr/cl-ana/issues/48 + +--- a/makeres/makeres.lisp ++++ b/makeres/makeres.lisp +@@ -936,5 +936,5 @@ + do (unload-target (pop cache)))) + (load-target id) +- (setf (cdr (last cache)) +- (list id))))))))) ++ (setf cache ++ (nconc cache (list id)))))))))) + diff --git a/pkgs/development/lisp-modules/ql.nix b/pkgs/development/lisp-modules/ql.nix index 39d41370ed11..624c7a04cc34 100644 --- a/pkgs/development/lisp-modules/ql.nix +++ b/pkgs/development/lisp-modules/ql.nix @@ -191,6 +191,9 @@ let "iolib/pathnames" ]; }); + cl-ana_dot_makeres = super.cl-ana_dot_makeres.overrideLispAttrs (o: { + patches = (o.patches or [ ]) ++ [ ./patches/cl-ana-fix-type-error.patch ]; + }); cl-ana_dot_hdf-cffi = super.cl-ana_dot_hdf-cffi.overrideLispAttrs (o: { nativeBuildInputs = [ pkgs.hdf5 ]; nativeLibs = [ pkgs.hdf5 ];