Part of the sweep tracked in #518. Finding F24.
Summary
grep -rn apply_sanitizers --include=CMakeLists.txt --include='*.cmake' finds call sites in root :518, tests/CMakeLists.txt:202,253, tests/net/CMakeLists.txt:21, examples/{forms,bank,common}, and morph_add_rung.cmake (x6).
Absent from: tests/qt/, tests/net_qt_interop/, tests/offline_sqlite/, tests/soak/, tests/bench/, src/qt/forms/.
Verification status
Inferred from reading the build configuration; not reproduced. Revision: master @ 4017228d. I did not run nm over the built objects to confirm the absence of instrumentation — the grep over call sites is exact, and morph being header-only means each target compiles its own copy of the headers under whatever flags that target has.
The sharp case: linux-sanitizers deliberately sets MORPH_BUILD_OFFLINE_SQLITE=ON (ci.yml:377) with the stated rationale (ci.yml:364-369) that the SQLite queue
"is where the memory/threading/UB risk actually lives (… a C API)".
But tests/offline_sqlite/CMakeLists.txt has apply_warnings (:16) and apply_coverage (:21-23) and no sanitizer block. Because morph is header-only, that target compiles its own uninstrumented copy of sqlite_offline_queue.hpp. The job runs the suite and learns nothing about the thing it was widened to cover.
Suggested fix
- Add
apply_sanitizers blocks to tests/offline_sqlite/, tests/qt/, tests/net_qt_interop/ (and decide deliberately about soak/bench).
- Generalise the instrumentation assertion.
ci.yml:1369-1386 already does nm -C … | grep __asan_ for the ladder; run it over every ctest binary. Without it, removing tests/CMakeLists.txt:202 would go unnoticed — which is the same anti-vacuity question AGENTS.md asks.
Also noted while here: kanban-tsan (ci.yml:608) does not set TSAN_OPTIONS=suppressions=cmake/tsan.supp, unlike linux-sanitizers:400.
What would change the verdict
- Close it for
soak/bench if instrumenting them is judged too slow — a defensible call, worth recording.
- Not closeable for
offline_sqlite without contradicting the job's own stated rationale.
- Depends on F23: instrumenting these suites achieves nothing for UB until the UBSan leg can fail.
Part of the sweep tracked in #518. Finding F24.
Summary
grep -rn apply_sanitizers --include=CMakeLists.txt --include='*.cmake'finds call sites in root:518,tests/CMakeLists.txt:202,253,tests/net/CMakeLists.txt:21,examples/{forms,bank,common}, andmorph_add_rung.cmake(x6).Absent from:
tests/qt/,tests/net_qt_interop/,tests/offline_sqlite/,tests/soak/,tests/bench/,src/qt/forms/.Verification status
Inferred from reading the build configuration; not reproduced. Revision:
master@4017228d. I did not runnmover the built objects to confirm the absence of instrumentation — the grep over call sites is exact, and morph being header-only means each target compiles its own copy of the headers under whatever flags that target has.The sharp case:
linux-sanitizersdeliberately setsMORPH_BUILD_OFFLINE_SQLITE=ON(ci.yml:377) with the stated rationale (ci.yml:364-369) that the SQLite queueBut
tests/offline_sqlite/CMakeLists.txthasapply_warnings(:16) andapply_coverage(:21-23) and no sanitizer block. Because morph is header-only, that target compiles its own uninstrumented copy ofsqlite_offline_queue.hpp. The job runs the suite and learns nothing about the thing it was widened to cover.Suggested fix
apply_sanitizersblocks totests/offline_sqlite/,tests/qt/,tests/net_qt_interop/(and decide deliberately aboutsoak/bench).ci.yml:1369-1386already doesnm -C … | grep __asan_for the ladder; run it over every ctest binary. Without it, removingtests/CMakeLists.txt:202would go unnoticed — which is the same anti-vacuity questionAGENTS.mdasks.Also noted while here:
kanban-tsan(ci.yml:608) does not setTSAN_OPTIONS=suppressions=cmake/tsan.supp, unlikelinux-sanitizers:400.What would change the verdict
soak/benchif instrumenting them is judged too slow — a defensible call, worth recording.offline_sqlitewithout contradicting the job's own stated rationale.