In the Debian package, we do the following at build time in order to set the source location to the system-wide one:
HOME=$(pwd) src/runtime/sbcl --core output/sbcl.core --no-sysinit --no-userinit \
--eval '(sb-ext:set-sbcl-source-location "/usr/share/sbcl-source/")' \
--eval '(sb-ext:save-lisp-and-die "output/sbcl.core")'
Then we run the testsuite, and since 2.2.2 it fails in the “pure” tests with:
Unhandled SIMPLE-ERROR in thread #<SB-THREAD:THREAD "main thread" RUNNING
{1001810073}>:
Symbol value differs: SB-IMPL::**FINALIZER-STORE**
Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {1001810073}>
0: (SB-DEBUG::DEBUGGER-DISABLED-HOOK #<SIMPLE-ERROR "Symbol value differs: ~S" {10048C53F3}> #<unused argument> :QUIT T)
1: (SB-DEBUG::RUN-HOOK *INVOKE-DEBUGGER-HOOK* #<SIMPLE-ERROR "Symbol value differs: ~S" {10048C53F3}>)
2: (INVOKE-DEBUGGER #<SIMPLE-ERROR "Symbol value differs: ~S" {10048C53F3}>)
3: (ERROR "Symbol value differs: ~S" SB-IMPL::**FINALIZER-STORE**)
4: (RUN-TESTS::COMPARE-SYMBOL-VALUES ((SB-ALIEN::*ALIEN-CALLABLES* . #<HASH-TABLE :TEST EQ :COUNT 0 {10009E94C3}>) (SB-ALIEN::*ALIEN-FUN-TYPE-VARARGS-DEFAULT* . :UNSPECIFIED) (SB-ALIEN::*ALIEN-CALLBACK-TRAMPOLINES* . #()) (SB-ALIEN::*SHARED-OBJECTS-LOCK* . #<SB-THREAD:MUTEX "shared object list lock" (free)>) (SB-ALIEN::*ALIEN-TYPE-CLASSES* . #<HASH-TABLE :TEST EQL :COUNT 16 {10000196A3}>) (SB-ALIEN::*ALIEN-CALLBACK-INFO*) (SB-ALIEN::*ALIEN-CALLBACKS* . #<HASH-TABLE :TEST EQUAL :COUNT 0 {10009E9303}>) (SB-ALIEN::*ALIEN-CALLBACK-WRAPPERS* . #<HASH-TABLE :TEST EQUAL :COUNT 0 {10009E9403}>) (SB-ALIEN::*ALIEN-TYPE-MATCHES*) (SB-ALIEN::*NEW-AUXILIARY-TYPES*) (SB-REGALLOC:*PACK-OPTIMIZE-SAVES* . T) (SB-REGALLOC:*PACK-ASSIGN-COSTS* . T) ...))
5: (RUN-TESTS::PURE-RUNNER (#P"/tmp/sbcl-2.2.2/tests/allocator.pure.lisp" #P"/tmp/sbcl-2.2.2/tests/arith-2.pure.lisp" #P"/tmp/sbcl-2.2.2/tests/arith-slow.pure.lisp" #P"/tmp/sbcl-2.2.2/tests/arith.pure.lisp" #P"/tmp/sbcl-2.2.2/tests/array.pure.lisp" #P"/tmp/sbcl-2.2.2/tests/assembler.pure.lisp" #P"/tmp/sbcl-2.2.2/tests/avltree.pure.lisp" #P"/tmp/sbcl-2.2.2/tests/backq.pure.lisp" #P"/tmp/sbcl-2.2.2/tests/bad-code.pure.lisp" #P"/tmp/sbcl-2.2.2/tests/bit-bash.pure.lisp" #P"/tmp/sbcl-2.2.2/tests/bivalent-stream.pure.lisp" #P"/tmp/sbcl-2.2.2/tests/bug-1072739.pure.lisp" ...) RUN-TESTS::LOAD-TEST #<SB-SYS:FD-STREAM for "file /tmp/sbcl-2.2.2/tests/test.log" {1003875FA3}>)
6: (RUN-TESTS::RUN-ALL)
7: (SB-INT:SIMPLE-EVAL-IN-LEXENV (RUN-TESTS::RUN-ALL) #<NULL-LEXENV>)
8: (EVAL (RUN-TESTS::RUN-ALL))
9: (SB-IMPL::PROCESS-EVAL/LOAD-OPTIONS ((:EVAL . "(setf sb-ext:*evaluator-mode* :compile)") (:EVAL . "(with-compilation-unit () (load \"run-tests.lisp\"))") (:EVAL . "(run-tests::run-all)")))
10: (SB-IMPL::TOPLEVEL-INIT)
11: ((FLET SB-UNIX::BODY :IN SB-IMPL::START-LISP))
12: ((FLET "WITHOUT-INTERRUPTS-BODY-3" :IN SB-IMPL::START-LISP))
13: (SB-IMPL::START-LISP)
I have verified that the crash of the testsuite is related to the save-lisp-and-die command above.
Also, the problem was not present in 2.1.11 (so it was introduced in the 2.2 series, I did not check in which version exactly).
Do you consider this as a bug? Or should I change the procedure for setting the source location, and if yes, how?
Thanks for your work,
S. Villemot
I tried a build without
--eval '(sb-ext: set-sbcl- source- location "/usr/share/ sbcl-source/ ")'
and get the same result.
Reducing the number of tests to these:
- compiler.pure.lisp cons.pure. lisp 2.pure. lisp
- compound-
- condition-
triggers the error reproducibly. Running the last two does not lead
to an error.