Skip to content

ci: five test suites are never sanitizer-instrumented, including the one a job was widened to cover #542

Description

@Yaraslaut

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: ciSubsystem: cibugSomething isn't workingtriage: validWell-framed; implement as written

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions