Re: Possible bug with sbcl 2.5.11 and FN package (and NAMED-READTABLES)

Robert Smith <[email protected]> Tue, 2 Dec 2025 22:26:31 -0500
Newsgroups gmane.lisp.steel-bank.general
Message-ID <CAPbE8xDJpr4bBaKLjmVCPb+BgmsPieH=Ervvz4KxOMBfiZvzUQ@mail.gmail.com>
update your named-readtables, which has been patched

it was relying on an internal representation of the readtable

On Tue, Dec 2, 2025 at 22:12 Peter Keller via Sbcl-help <
[email protected]> wrote:

> Hello,
>
> I have run into an unexpected problem when using sbcl 2.5.11 on x86_64.
>
> When using a newly built sbcl with documented methods (and adding --fancy
> and --dynamic-space-size=24Gb), and when loading the FN package from
> the most recent quicklisp of 2025-06-22, I get this signaled condition:
>
> CL-USER> (ql:quickload :fn)
>
> ;; piles of normal compilation output, then:
>
> debugger invoked on a SIMPLE-ERROR in thread
> #<THREAD tid=4031189 "main thread" RUNNING {1200030003}>:
>    Bug in readtable iterators or concurrent access?
>
> Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.
>
> restarts (invokable by number or by possibly-abbreviated name):
>    0: [CONTINUE                     ] Retry assertion.
>    1: [TRY-RECOMPILING              ] Recompile fn and try loading it again
>    2: [RETRY                        ] Retry
>                                       loading FASL for #<CL-SOURCE-FILE
> "fn" "fn">.
>    3: [ACCEPT                       ] Continue, treating
>                                       loading FASL for #<CL-SOURCE-FILE
> "fn" "fn">
>                                       as having been successful.
>    4:                                 Retry ASDF operation.
>    5: [CLEAR-CONFIGURATION-AND-RETRY] Retry ASDF operation after resetting
> the
>                                       configuration.
>    6:                                 Retry ASDF operation.
>    7:                                 Retry ASDF operation after resetting
> the
>                                       configuration.
>    8: [ABORT                        ] Give up on "fn"
>    9: [REGISTER-LOCAL-PROJECTS      ] Register local projects and try
> again.
>   10:                                 Exit debugger, returning to top
> level.
>
> (EDITOR-HINTS.NAMED-READTABLES::CHECK-READER-MACRO-CONFLICT
> #<NAMED-READTABLE
> :COMMON-LISP {12000421A3}> #<NAMED-READTABLE FN-READER {1220C19033}> #\Nul
> NIL)
>     source: (ASSERT FROM-FN NIL
>                     "Bug in readtable iterators or concurrent access?")
> 0]
>
>
> Here is the backtrace. After the backtrace is more commentary:
>
> 0] backtrace
>
> Backtrace for: #<SB-THREAD:THREAD tid=4031189 "main thread" RUNNING
> {1200030003}>
> 0: (EDITOR-HINTS.NAMED-READTABLES::CHECK-READER-MACRO-CONFLICT
> #<NAMED-READTABLE :COMMON-LISP {12000421A3}> #<NAMED-READTABLE FN-READER
> {1220C19033}> #\Nul NIL)
> 1: (EDITOR-HINTS.NAMED-READTABLES:MERGE-READTABLES-INTO #<NAMED-READTABLE
> FN-READER {1220C19033}> :STANDARD)
> 2: ("top level form") [toplevel]
> 3: (SB-FASL::LOAD-FASL-GROUP #S(SB-FASL::FASL-INPUT :STREAM
> #<SB-SYS:FD-STREAM
> for "file
> /home/psilord/.cache/common-lisp/sbcl-2.5.11-linux-x64/home/psilord/quicklisp/dists/quicklisp/software/fn-20241012-git/fn.fasl"
>
> {1220C12A93}> :TABLE #(308
> #1="/home/psilord/quicklisp/dists/quicklisp/software/fn-20241012-git/fn.lisp"
>
> :MACRO #<PACKAGE "FN"> FN* DEFMACRO #2=(:MACRO FN* . DEFMACRO) FORM (#2#
> FORM)
> MACRO-FUNCTION (MACRO-FUNCTION FN*) #(8 79 4 36 8 36 28 10 0 1 103 40 ...)
> ...)
> :STACK #(0 #<FUNCTION "top level form" {B800C2F8EB}> *PACKAGE*
> *STOP-ON-SYMBOLS* #S(SB-C:DEFINITION-SOURCE-LOCATION :NAMESTRING #1#
> :INDICES
> 65537) (QUOTE LAMBDA) FN* #S(SB-C:DEFINITION-SOURCE-LOCATION :NAMESTRING
> #1#
> :INDICES 98305) FN*-INTERNALS NORMALIZED-ARG-COUNT VALID-_-NAME
> FILTER-TREE
> ...) :NAME-BUFFER #("" "FIND-UNDELETED-PACKAGE-OR-LOSEE") :PRINT NIL
> :PARTIAL-SOURCE-INFO #S(SB-C::DEBUG-SOURCE :NAMESTRING #1# :CREATED
> 3972516143
> :START-POSITIONS NIL :PLIST NIL)))
> 4: ((LAMBDA NIL :IN SB-FASL::LOAD-AS-FASL))
> 5: (SB-IMPL::CALL-WITH-LOADER-PACKAGE-NAMES #<FUNCTION (LAMBDA NIL :IN
> SB-FASL::LOAD-AS-FASL) {1220C1622B}>)
> 6: (SB-FASL::LOAD-AS-FASL #<SB-SYS:FD-STREAM for "file
> /home/psilord/.cache/common-lisp/sbcl-2.5.11-linux-x64/home/psilord/quicklisp/dists/quicklisp/software/fn-20241012-git/fn.fasl"
>
> {1220C12A93}> NIL NIL)
> 7: ((LABELS SB-FASL::LOAD-STREAM-1 :IN LOAD) #<SB-SYS:FD-STREAM for "file
> /home/psilord/.cache/common-lisp/sbcl-2.5.11-linux-x64/home/psilord/quicklisp/dists/quicklisp/software/fn-20241012-git/fn.fasl"
>
> {1220C12A93}> T)
> 8: (SB-FASL::CALL-WITH-LOAD-BINDINGS #<FUNCTION (LABELS
> SB-FASL::LOAD-STREAM-1
> :IN LOAD) {7CDE5D7AE2CB}> #<SB-SYS:FD-STREAM for "file
> /home/psilord/.cache/common-lisp/sbcl-2.5.11-linux-x64/home/psilord/quicklisp/dists/quicklisp/software/fn-20241012-git/fn.fasl"
>
> {1220C12A93}> T #<SB-SYS:FD-STREAM for "file
> /home/psilord/.cache/common-lisp/sbcl-2.5.11-linux-x64/home/psilord/quicklisp/dists/quicklisp/software/fn-20241012-git/fn.fasl"
>
> {1220C12A93}>)
> 9: (LOAD
> #P"/home/psilord/.cache/common-lisp/sbcl-2.5.11-linux-x64/home/psilord/quicklisp/dists/quicklisp/software/fn-20241012-git/fn.fasl"
>
> :VERBOSE NIL :PRINT NIL :IF-DOES-NOT-EXIST :ERROR :EXTERNAL-FORMAT
> :DEFAULT)
> 10: (UIOP/UTILITY:CALL-WITH-MUFFLED-CONDITIONS #<FUNCTION (LAMBDA NIL :IN
> UIOP/LISP-BUILD:LOAD*) {1220C124BB}> ("Overwriting already existing
> readtable
> ~S." #(#:FINALIZERS-OFF-WARNING :ASDF-FINALIZERS)))
> 11: ((SB-PCL::EMF ASDF/ACTION:PERFORM) #<unused argument> #<unused
> argument>
> #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "fn" "fn">)
> 12: ((LAMBDA NIL :IN ASDF/ACTION:CALL-WHILE-VISITING-ACTION))
> 13: ((:METHOD ASDF/ACTION:PERFORM :AROUND (ASDF/LISP-ACTION:LOAD-OP
> ASDF/LISP-ACTION:CL-SOURCE-FILE)) #<ASDF/LISP-ACTION:LOAD-OP >
> #<ASDF/LISP-ACTION:CL-SOURCE-FILE "fn" "fn">) [fast-method]
> 14: ((:METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS (ASDF/LISP-ACTION:LOAD-OP
> ASDF/LISP-ACTION:CL-SOURCE-FILE)) #<ASDF/LISP-ACTION:LOAD-OP >
> #<ASDF/LISP-ACTION:CL-SOURCE-FILE "fn" "fn">) [fast-method]
> 15: ((:METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS :AROUND (T T))
> #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "fn" "fn">)
> [fast-method]
> 16: ((:METHOD ASDF/PLAN:PERFORM-PLAN (T)) #<ASDF/PLAN:SEQUENTIAL-PLAN
> {121A088F33}>) [fast-method]
> 17: ((FLET SB-C::WITH-IT :IN SB-C::%WITH-COMPILATION-UNIT))
> 18: ((:METHOD ASDF/PLAN:PERFORM-PLAN :AROUND (T))
> #<ASDF/PLAN:SEQUENTIAL-PLAN
> {121A088F33}>) [fast-method]
> 19: ((:METHOD ASDF/OPERATE:OPERATE (ASDF/OPERATION:OPERATION
> ASDF/COMPONENT:COMPONENT)) #<ASDF/LISP-ACTION:LOAD-OP >
> #<ASDF/SYSTEM:SYSTEM
> "fn"> :PLAN-CLASS NIL :PLAN-OPTIONS NIL) [fast-method]
> 20: ((SB-PCL::EMF ASDF/OPERATE:OPERATE) #<unused argument> #<unused
> argument>
> #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/SYSTEM:SYSTEM "fn"> :VERBOSE NIL)
> 21: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))
> 22: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T))
> #<ASDF/LISP-ACTION:LOAD-OP >
> #<ASDF/SYSTEM:SYSTEM "fn"> :VERBOSE NIL) [fast-method]
> 23: ((SB-PCL::EMF ASDF/OPERATE:OPERATE) #<unused argument> #<unused
> argument>
> ASDF/LISP-ACTION:LOAD-OP "fn" :VERBOSE NIL)
> 24: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))
> 25: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) ASDF/LISP-ACTION:LOAD-OP
> "fn"
> :VERBOSE NIL) [fast-method]
> 26: (ASDF/SESSION:CALL-WITH-ASDF-SESSION #<FUNCTION (LAMBDA NIL :IN
> ASDF/OPERATE:OPERATE) {121A0813CB}> :OVERRIDE T :KEY NIL :OVERRIDE-CACHE T
> :OVERRIDE-FORCING NIL)
> 27: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))
> 28: (ASDF/SESSION:CALL-WITH-ASDF-SESSION #<FUNCTION (LAMBDA NIL :IN
> ASDF/OPERATE:OPERATE) {121A07A73B}> :OVERRIDE NIL :KEY NIL :OVERRIDE-CACHE
> NIL
> :OVERRIDE-FORCING NIL)
> 29: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) ASDF/LISP-ACTION:LOAD-OP
> "fn"
> :VERBOSE NIL) [fast-method]
> 30: (ASDF/OPERATE:LOAD-SYSTEM "fn" :VERBOSE NIL)
> 31: (QUICKLISP-CLIENT::CALL-WITH-MACROEXPAND-PROGRESS #<FUNCTION (LAMBDA
> NIL
> :IN QUICKLISP-CLIENT::APPLY-LOAD-STRATEGY) {121A07648B}>)
> 32: (QUICKLISP-CLIENT::AUTOLOAD-SYSTEM-AND-DEPENDENCIES "fn" :PROMPT NIL)
> 33: ((:METHOD QUICKLISP-CLIENT:QUICKLOAD (T)) :FN :PROMPT NIL :SILENT NIL
> :VERBOSE NIL) [fast-method]
> 34: (QL-DIST::CALL-WITH-CONSISTENT-DISTS #<FUNCTION (LAMBDA NIL :IN
> QUICKLISP-CLIENT:QUICKLOAD) {1219D65A4B}>)
> 35: (SB-INT:SIMPLE-EVAL-IN-LEXENV (QUICKLISP-CLIENT:QUICKLOAD :FN)
> #<NULL-LEXENV>)
> 36: (EVAL (QUICKLISP-CLIENT:QUICKLOAD :FN))
> 37: (SB-EXT:INTERACTIVE-EVAL (QUICKLISP-CLIENT:QUICKLOAD :FN) :EVAL NIL)
> 38: (SB-IMPL::REPL-FUN NIL)
> 39: ((LAMBDA NIL :IN SB-IMPL::TOPLEVEL-REPL))
> 40: (SB-IMPL::%WITH-REBOUND-IO-SYNTAX #<FUNCTION (LAMBDA NIL :IN
> SB-IMPL::TOPLEVEL-REPL) {7CDE5D7AFC1B}>)
> 41: (SB-IMPL::TOPLEVEL-REPL NIL)
> 42: (SB-IMPL::TOPLEVEL-INIT)
> 43: ((FLET SB-UNIX::BODY :IN SB-IMPL::START-LISP))
> 44: ((FLET "WITHOUT-INTERRUPTS-BODY-3" :IN SB-IMPL::START-LISP))
> 45: (SB-IMPL::%START-LISP)
>
> Here is the code in question which signaled the condition:
>
> (defun check-reader-macro-conflict (from to char &optional subchar)
>    (flet ((conflictp (from-fn to-fn)
>             (assert from-fn ()
>                     "Bug in readtable iterators or concurrent access?")
>             (and to-fn (not (function= to-fn from-fn)))))
>      (when (if subchar
>                (conflictp (%get-dispatch-macro-character char subchar from)
>                           (%get-dispatch-macro-character char subchar to))
>                (conflictp (%get-macro-character char from)
>                           (%get-macro-character char to)))
>        (cerror (format nil "Overwrite ~@C in ~A." char to)
>                'reader-macro-conflict
>                :from-readtable from
>                :to-readtable to
>                :macro-char char
>                :sub-char subchar))))
>
> It resides in:
>
>
> ~/quicklisp/dists/quicklisp/software/named-readtables-20250622-git/src/named-readtables.lisp
>
> So it looks like the 2025-06-22 release of named-readtables is signaling
> the
> condition. I did not debug more about why this is happening, but this
> works on
> SBCL 2.5.6. I can poke it to debug more if needed.
>
> Thank you!
>
> -pete
>
>
> _______________________________________________
> Sbcl-help mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/sbcl-help
>

_______________________________________________
Sbcl-help mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sbcl-help