functional-test-libstoreconsumer fails with LTO on aarch64-darwin #832

Open
opened 2025-05-15 19:38:48 +00:00 by getchoo · 2 comments

Describe the bug

Discovered in https://github.com/NixOS/nixpkgs/pull/398141

Similar to #568, LTO now causes a test failure on aarch64-darwin

Steps To Reproduce

  1. Build Lix >= 2.93 with LTO on aarch64-darwin
  2. Watch the test fail

Expected behavior

All tests pass

nix --version output

nix (Lix, like Nix) 2.93.0
System type: aarch64-darwin
Additional system types: x86_64-darwin
Features: gc, signed-caches
System configuration file: /etc/nix/nix.conf
User configuration files: /Users/bob-the-builder/.config/nix/nix.conf:/Users/bob-the-builder/.nix-profile/etc/xdg/nix/nix.conf:/run/current-system/sw/etc/xdg/nix/nix.conf:/nix/var/nix/profiles/default/etc/xdg/nix/nix.conf
Store directory: /nix/store
State directory: /nix/var/nix
Data directory: /nix/store/4891b05g1r90bsz95fz6vnrcnyn1vj8g-lix-2.93.0/share

Additional context

Build log
155/167 lix:installcheck / functional-test-libstoreconsumer                            FAIL             0.51s   (exit status 134 or signal 6 SIGABRT)
>>> MSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 MESON_TEST_ITERATION=1 MALLOC_PERTURB_=188 MESON_BUILD_ROOT=/private/tmp/nix-build-lix-2.93.0.drv-0/source/build ASAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1 UBSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 /nix/store/6nj9285d1jc287vp3njrsq64g331gdjr-python3-3.12.10-env/bin/python3 /private/tmp/nix-build-lix-2.93.0.drv-0/source/meson/run-test.py test-libstoreconsumer.sh
 ✀
stdout:
Derive([("out","/private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer/store/d4z4pcihk8ng87jnv3d2sz5yr8bs1wn5-simple","","")],[],["/private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer/store/jj1n21pj4cgaljyy7xwqvphw11781yfj-simple.builder.sh"],"aarch64-darwin","/nix/store/8ivrpmp3arvxbr6imdwm2d28q9cjsqvi-bash-5.2p37/bin/bash",["-e","/private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer/store/jj1n21pj4cgaljyy7xwqvphw11781yfj-simple.builder.sh"],[("PATH",""),("builder","/nix/store/8ivrpmp3arvxbr6imdwm2d28q9cjsqvi-bash-5.2p37/bin/bash"),("goodPath","/nix/store/d72z8b7fvvcin2p84x7h5s0abkggplzc-coreutils-9.7/bin"),("name","simple"),("out","/private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer/store/d4z4pcihk8ng87jnv3d2sz5yr8bs1wn5-simple"),("system","aarch64-darwin")])[FAIL]
stderr:
++(common/vars-and-functions.sh:286) trap onError ERR
+(init.sh:6) test -n /private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer
+(init.sh:7) test -d /private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer
+(init.sh:8) chmod -R u+w /private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer
+(init.sh:10) killDaemon
+(common/vars-and-functions.sh:117) [[ '' == '' ]]
+(common/vars-and-functions.sh:118) return
+(init.sh:11) rm -rf /private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer
+(init.sh:13) mkdir /private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer
+(init.sh:15) mkdir /private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer/store
+(init.sh:16) mkdir /private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer/var
+(init.sh:17) mkdir -p /private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer/var/log/nix/drvs
+(init.sh:18) mkdir /private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer/var/nix
+(init.sh:19) mkdir /private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer/etc
+(init.sh:21) cat
++(init.sh:21) whoami
+(init.sh:34) cat
+(init.sh:41) nix-store --init
+(init.sh:44) test -e /private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer/var/nix/db/db.sqlite
+++(/private/tmp/nix-build-lix-2.93.0.drv-0/source/build/tests/functional/common/vars-and-functions.sh:286) trap onError ERR
++(common.sh:8) [[ -n '' ]]
++(test-libstoreconsumer.sh:3) nix-instantiate simple.nix
warning: you did not specify '--add-root'; the result might be removed by the garbage collector
+(test-libstoreconsumer.sh:3) drv=/private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer/store/h78ycsalhdi6rfcfrlv934sbpxkl8w25-simple.drv
+(test-libstoreconsumer.sh:4) cat /private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer/store/h78ycsalhdi6rfcfrlv934sbpxkl8w25-simple.drv
++(test-libstoreconsumer.sh:5) ./test-libstoreconsumer/test-libstoreconsumer /private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer/store/h78ycsalhdi6rfcfrlv934sbpxkl8w25-simple.drv
Assertion failed: (AsyncContext::current != nullptr), function AIO, file lix/libutil/async.hh, line 52.
+(test-libstoreconsumer.sh:5) out=
++(test-libstoreconsumer.sh:5) onError
++(/private/tmp/nix-build-lix-2.93.0.drv-0/source/build/tests/functional/common/vars-and-functions.sh:244) set +x
test-libstoreconsumer.sh: test failed at:
  main in test-libstoreconsumer.sh:5


156/167 lix:installcheck / functional-read-only-store                                  OK               0.92s
157/167 lix:installcheck / functional-regression-484                                   OK               0.71s
158/167 lix:installcheck / functional-build                                            OK               5.33s
159/167 lix:installcheck / functional-redirected-filter-source                         OK               0.64s
160/167 lix:installcheck / functional-substitute-truncated-nar                         OK               1.01s
161/167 lix:installcheck / functional-extra-sandbox-profile                            OK               1.27s
162/167 lix:installcheck / functional-regression-reference-checks                      OK               1.33s
163/167 lix:installcheck / functional-plugins                                          OK               1.11s
164/167 lix:installcheck / repl-characterization-tests                                 OK               1.36s
165/167 lix:installcheck / functional-impure-derivations                               OK               4.11s
166/167 lix:installcheck / functional-nix-profile                                      OK               7.80s
167/167 lix:installcheck / functional2                                                 OK               4.37s

Summary of Failures:

155/167 lix:installcheck / functional-test-libstoreconsumer                   FAIL             0.51s   (exit status 134 or signal 6 SIGABRT)

Ok:                 151
Expected Fail:      0
Fail:               1
Unexpected Pass:    0
Skipped:            15
Timeout:            0

Full log written to /private/tmp/nix-build-lix-2.93.0.drv-0/source/build/meson-logs/testlog.txt
## Describe the bug Discovered in https://github.com/NixOS/nixpkgs/pull/398141 Similar to #568, LTO now causes a test failure on aarch64-darwin ## Steps To Reproduce 1. Build Lix >= 2.93 with LTO on aarch64-darwin 2. Watch the test fail ## Expected behavior All tests pass ## `nix --version` output ``` nix (Lix, like Nix) 2.93.0 System type: aarch64-darwin Additional system types: x86_64-darwin Features: gc, signed-caches System configuration file: /etc/nix/nix.conf User configuration files: /Users/bob-the-builder/.config/nix/nix.conf:/Users/bob-the-builder/.nix-profile/etc/xdg/nix/nix.conf:/run/current-system/sw/etc/xdg/nix/nix.conf:/nix/var/nix/profiles/default/etc/xdg/nix/nix.conf Store directory: /nix/store State directory: /nix/var/nix Data directory: /nix/store/4891b05g1r90bsz95fz6vnrcnyn1vj8g-lix-2.93.0/share ``` ## Additional context <details> <summary>Build log</summary> ``` 155/167 lix:installcheck / functional-test-libstoreconsumer FAIL 0.51s (exit status 134 or signal 6 SIGABRT) >>> MSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 MESON_TEST_ITERATION=1 MALLOC_PERTURB_=188 MESON_BUILD_ROOT=/private/tmp/nix-build-lix-2.93.0.drv-0/source/build ASAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1 UBSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 /nix/store/6nj9285d1jc287vp3njrsq64g331gdjr-python3-3.12.10-env/bin/python3 /private/tmp/nix-build-lix-2.93.0.drv-0/source/meson/run-test.py test-libstoreconsumer.sh ✀ stdout: Derive([("out","/private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer/store/d4z4pcihk8ng87jnv3d2sz5yr8bs1wn5-simple","","")],[],["/private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer/store/jj1n21pj4cgaljyy7xwqvphw11781yfj-simple.builder.sh"],"aarch64-darwin","/nix/store/8ivrpmp3arvxbr6imdwm2d28q9cjsqvi-bash-5.2p37/bin/bash",["-e","/private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer/store/jj1n21pj4cgaljyy7xwqvphw11781yfj-simple.builder.sh"],[("PATH",""),("builder","/nix/store/8ivrpmp3arvxbr6imdwm2d28q9cjsqvi-bash-5.2p37/bin/bash"),("goodPath","/nix/store/d72z8b7fvvcin2p84x7h5s0abkggplzc-coreutils-9.7/bin"),("name","simple"),("out","/private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer/store/d4z4pcihk8ng87jnv3d2sz5yr8bs1wn5-simple"),("system","aarch64-darwin")])[FAIL] stderr: ++(common/vars-and-functions.sh:286) trap onError ERR +(init.sh:6) test -n /private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer +(init.sh:7) test -d /private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer +(init.sh:8) chmod -R u+w /private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer +(init.sh:10) killDaemon +(common/vars-and-functions.sh:117) [[ '' == '' ]] +(common/vars-and-functions.sh:118) return +(init.sh:11) rm -rf /private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer +(init.sh:13) mkdir /private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer +(init.sh:15) mkdir /private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer/store +(init.sh:16) mkdir /private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer/var +(init.sh:17) mkdir -p /private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer/var/log/nix/drvs +(init.sh:18) mkdir /private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer/var/nix +(init.sh:19) mkdir /private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer/etc +(init.sh:21) cat ++(init.sh:21) whoami +(init.sh:34) cat +(init.sh:41) nix-store --init +(init.sh:44) test -e /private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer/var/nix/db/db.sqlite +++(/private/tmp/nix-build-lix-2.93.0.drv-0/source/build/tests/functional/common/vars-and-functions.sh:286) trap onError ERR ++(common.sh:8) [[ -n '' ]] ++(test-libstoreconsumer.sh:3) nix-instantiate simple.nix warning: you did not specify '--add-root'; the result might be removed by the garbage collector +(test-libstoreconsumer.sh:3) drv=/private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer/store/h78ycsalhdi6rfcfrlv934sbpxkl8w25-simple.drv +(test-libstoreconsumer.sh:4) cat /private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer/store/h78ycsalhdi6rfcfrlv934sbpxkl8w25-simple.drv ++(test-libstoreconsumer.sh:5) ./test-libstoreconsumer/test-libstoreconsumer /private/tmp/nix-build-lix-2.93.0.drv-0/nix-test/test-libstoreconsumer/store/h78ycsalhdi6rfcfrlv934sbpxkl8w25-simple.drv Assertion failed: (AsyncContext::current != nullptr), function AIO, file lix/libutil/async.hh, line 52. +(test-libstoreconsumer.sh:5) out= ++(test-libstoreconsumer.sh:5) onError ++(/private/tmp/nix-build-lix-2.93.0.drv-0/source/build/tests/functional/common/vars-and-functions.sh:244) set +x test-libstoreconsumer.sh: test failed at: main in test-libstoreconsumer.sh:5 156/167 lix:installcheck / functional-read-only-store OK 0.92s 157/167 lix:installcheck / functional-regression-484 OK 0.71s 158/167 lix:installcheck / functional-build OK 5.33s 159/167 lix:installcheck / functional-redirected-filter-source OK 0.64s 160/167 lix:installcheck / functional-substitute-truncated-nar OK 1.01s 161/167 lix:installcheck / functional-extra-sandbox-profile OK 1.27s 162/167 lix:installcheck / functional-regression-reference-checks OK 1.33s 163/167 lix:installcheck / functional-plugins OK 1.11s 164/167 lix:installcheck / repl-characterization-tests OK 1.36s 165/167 lix:installcheck / functional-impure-derivations OK 4.11s 166/167 lix:installcheck / functional-nix-profile OK 7.80s 167/167 lix:installcheck / functional2 OK 4.37s Summary of Failures: 155/167 lix:installcheck / functional-test-libstoreconsumer FAIL 0.51s (exit status 134 or signal 6 SIGABRT) Ok: 151 Expected Fail: 0 Fail: 1 Unexpected Pass: 0 Skipped: 15 Timeout: 0 Full log written to /private/tmp/nix-build-lix-2.93.0.drv-0/source/build/meson-logs/testlog.txt ``` </details>
Member

This issue was mentioned on Gerrit on the following CLs:

  • commit message in cl/3203 ("build: disable LTO on Darwin")
  • commit message in cl/3205 ("build: disable LTO on Darwin")
<!-- GERRIT_LINKBOT: {"cls": [{"backlink": "https://gerrit.lix.systems/c/lix/+/3203", "number": 3203, "kind": "commit message"}, {"backlink": "https://gerrit.lix.systems/c/lix/+/3205", "number": 3205, "kind": "commit message"}], "cl_meta": {"3203": {"change_title": "build: disable LTO on Darwin"}, "3205": {"change_title": "build: disable LTO on Darwin"}}} --> This issue was mentioned on Gerrit on the following CLs: * commit message in [cl/3203](https://gerrit.lix.systems/c/lix/+/3203) ("build: disable LTO on Darwin") * commit message in [cl/3205](https://gerrit.lix.systems/c/lix/+/3205) ("build: disable LTO on Darwin")
Member

This seems to be machine-dependent, failing consistently on an M4 mac mini running macos 15.5 and succeeding consistently on an M1 macbook air running macos 15.3.1.

The test fails with:

Assertion failed: (AsyncContext::current != nullptr), function AIO, file lix/libutil/async.hh, line 52.

I also ran it in lldb to get a backtrace, but it doesn't seem to have source locations:

(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = hit program assert
    frame #0: 0x0000000191c95388 libsystem_kernel.dylib`__pthread_kill + 8
    frame #1: 0x0000000191cce88c libsystem_pthread.dylib`pthread_kill + 296
    frame #2: 0x0000000191bd7c60 libsystem_c.dylib`abort + 124
    frame #3: 0x0000000191bd6eec libsystem_c.dylib`__assert_rtn + 284
  * frame #4: 0x0000000100a199b0 liblixstore.dylib`nix::Worker::updateStatistics() (.resume) + 996
    frame #5: 0x0000000100244760 libkj-async.1.0.2.dylib`non-virtual thunk to kj::_::CoroutineBase::fire() + 32
    frame #6: 0x000000010024b66c libkj-async.1.0.2.dylib`kj::_::waitImpl(kj::Own<kj::_::PromiseNode, kj::_::PromiseDisposer>&&, kj::_::ExceptionOrValue&, kj::WaitScope&, kj::SourceLocation)::$_2::operator()() const + 264
    frame #7: 0x000000010023e00c libkj-async.1.0.2.dylib`kj::_::waitImpl(kj::Own<kj::_::PromiseNode, kj::_::PromiseDisposer>&&, kj::_::ExceptionOrValue&, kj::WaitScope&, kj::SourceLocation) + 492
    frame #8: 0x0000000100004314 test-libstoreconsumer`main + 1372
    frame #9: 0x000000019192eb98 dyld`start + 6076

If anyone has suggestions on how to get more useful information, let me know!

This seems to be machine-dependent, failing consistently on an M4 mac mini running macos 15.5 and succeeding consistently on an M1 macbook air running macos 15.3.1. The test fails with: ``` Assertion failed: (AsyncContext::current != nullptr), function AIO, file lix/libutil/async.hh, line 52. ``` I also ran it in lldb to get a backtrace, but it doesn't seem to have source locations: ``` (lldb) bt * thread #1, queue = 'com.apple.main-thread', stop reason = hit program assert frame #0: 0x0000000191c95388 libsystem_kernel.dylib`__pthread_kill + 8 frame #1: 0x0000000191cce88c libsystem_pthread.dylib`pthread_kill + 296 frame #2: 0x0000000191bd7c60 libsystem_c.dylib`abort + 124 frame #3: 0x0000000191bd6eec libsystem_c.dylib`__assert_rtn + 284 * frame #4: 0x0000000100a199b0 liblixstore.dylib`nix::Worker::updateStatistics() (.resume) + 996 frame #5: 0x0000000100244760 libkj-async.1.0.2.dylib`non-virtual thunk to kj::_::CoroutineBase::fire() + 32 frame #6: 0x000000010024b66c libkj-async.1.0.2.dylib`kj::_::waitImpl(kj::Own<kj::_::PromiseNode, kj::_::PromiseDisposer>&&, kj::_::ExceptionOrValue&, kj::WaitScope&, kj::SourceLocation)::$_2::operator()() const + 264 frame #7: 0x000000010023e00c libkj-async.1.0.2.dylib`kj::_::waitImpl(kj::Own<kj::_::PromiseNode, kj::_::PromiseDisposer>&&, kj::_::ExceptionOrValue&, kj::WaitScope&, kj::SourceLocation) + 492 frame #8: 0x0000000100004314 test-libstoreconsumer`main + 1372 frame #9: 0x000000019192eb98 dyld`start + 6076 ``` If anyone has suggestions on how to get more useful information, let me know!
Sign in to join this conversation.
No milestone
No project
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
lix-project/lix#832
No description provided.