You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Found during the landing sweep for PR #689, whose only failing leg turned out to be this one — pre-existing, not the branch's.
The finding
Bank example / UBSan, added by #683, has never passed. Both runs on master since it landed:
run 35643825635: failure
run 35639767288: failure
and it fails identically on PR #689. master is red on this leg right now.
What the job does and where it stops
Every step before it succeeds — Qt installs, Configure succeeds, Build succeeds — and then:
Run bash scripts/check_sanitizer_instrumentation.sh build/clang-ubsan ubsan
##[error]check_sanitizer_instrumentation: ctest listed no tests in build/clang-ubsan
-- this check would pass having examined nothing
success Configure (clang-ubsan, bank example + GUI)
success Build
failure Every ctest binary is instrumented
skipped Test (bank's suites only)
The guard is behaving correctly — it refuses to report success having examined nothing, which is exactly what #675 added it for. The defect is that it has nothing to examine.
Verification status: reproduced on CI (three runs), contradicted locally
The same configure, run locally by the #683 lane and again during #684's review, enumerates fine:
check_sanitizer_instrumentation: 9 ctest binaries all carry __ubsan_ symbols (0 allowlisted).
So ctest --show-only finds nine binaries on a developer machine and zero on the runner, from the same preset and flags. I have not established why. What I did establish:
2>/dev/null means "ctest failed" and "ctest found nothing" are indistinguishable to the caller. Whatever the root cause, the first fix is to stop discarding that stderr — the message we need is already being printed and thrown away.
Candidate causes, none confirmed
DISCOVERY_MODE PRE_TEST — bank's three suites use it (examples/bank/CMakeLists.txt:255,318,385), so discovery runs the test binary at ctest time. If that execution fails on the runner (a missing Qt runtime path outside the Test step's environment, or UBSan aborting during static init), ctest errors and the pipeline yields nothing. Note tests/ also uses PRE_TEST and linux-sanitizers passes the same check — so PRE_TEST alone is not sufficient to explain it.
noTestsAction: error in CMakePresets.json's base-test block, interacting with the above.
What would resolve it
Remove the 2>/dev/null (or capture it and print on failure). One line, and it very likely names the cause on the next run.
Close as invalid if the job passes on a re-run — i.e. if all three failures were the same transient. Two consecutive master runs plus one PR run argues against that, but a re-run is cheap and would settle it.
Found during the landing sweep for PR #689, whose only failing leg turned out to be this one — pre-existing, not the branch's.
The finding
Bank example / UBSan, added by #683, has never passed. Both runs onmastersince it landed:and it fails identically on PR #689.
masteris red on this leg right now.What the job does and where it stops
Every step before it succeeds — Qt installs, Configure succeeds, Build succeeds — and then:
The guard is behaving correctly — it refuses to report success having examined nothing, which is exactly what #675 added it for. The defect is that it has nothing to examine.
Verification status: reproduced on CI (three runs), contradicted locally
The same configure, run locally by the #683 lane and again during #684's review, enumerates fine:
So
ctest --show-onlyfinds nine binaries on a developer machine and zero on the runner, from the same preset and flags. I have not established why. What I did establish:master.The checker hides the evidence, which is its own small defect
scripts/check_sanitizer_instrumentation.sh:129:2>/dev/nullmeans "ctest failed" and "ctest found nothing" are indistinguishable to the caller. Whatever the root cause, the first fix is to stop discarding that stderr — the message we need is already being printed and thrown away.Candidate causes, none confirmed
DISCOVERY_MODE PRE_TEST— bank's three suites use it (examples/bank/CMakeLists.txt:255,318,385), so discovery runs the test binary at ctest time. If that execution fails on the runner (a missing Qt runtime path outside theTeststep's environment, or UBSan aborting during static init), ctest errors and the pipeline yields nothing. Notetests/also usesPRE_TESTandlinux-sanitizerspasses the same check — so PRE_TEST alone is not sufficient to explain it.noTestsAction: errorinCMakePresets.json's base-test block, interacting with the above.What would resolve it
2>/dev/null(or capture it and print on failure). One line, and it very likely names the cause on the next run.What would change the verdict
Close as
invalidif the job passes on a re-run — i.e. if all three failures were the same transient. Two consecutivemasterruns plus one PR run argues against that, but a re-run is cheap and would settle it.Related
🤖 Generated with Claude Code
https://claude.ai/code/session_01VptDWG2fKr2vBnLSJcgzgW