spaxel/firmware
jedarden cc24a1cf23 test(runner): document C11 7.13.2.1 setjmp clobber audit at call site (bf-31rd)
Relocate the per-variable setjmp/longjmp clobber analysis to the setjmp call
site and expand it into a full boundary audit per C11 7.13.2.1: enumerate every
automatic in scope (the loop index i; confirm there are no local tallies and
that g_failure_count/g_test_jmp are file-scope static, to which 7.13.2.1 does
not apply), and show why each is determinate — i is written only by the for-init
and for-increment, the latter running after control resumes, so no write lands
between setjmp and a longjmp fired in the body.

volatile on i is retained: the standard does not strictly require it (i is not
changed in the window), but gcc's -Wclobbered is heuristic and ignores that
distinction — empirically verified that the loop warns at -O1..-Os once the
incidental preceding qsort() stops biasing the register heuristic. volatile is
the sanctioned suppression. Compile gate confirmed clean at -O0..-Os with
-Wall -Wextra and explicit -Wclobbered; full suite still 29 RUN / 0 FAIL.

Analysis + comment + build verification only; no behavior change vs bf-22vg.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-04 04:29:59 -04:00
..
main fix(provision): re-broadcast SPAXEL READY every 1s during window 2026-06-05 18:23:25 -04:00
test test(runner): document C11 7.13.2.1 setjmp clobber audit at call site (bf-31rd) 2026-07-04 04:29:59 -04:00
CMakeLists.txt feat(firmware): OTA SHA-256 verification and captive portal URL decoding 2026-03-28 19:56:11 -04:00
dependencies.lock Fix ESP-IDF 5.x firmware compilation for ESP32-S3 build 2026-04-14 15:35:03 -04:00
partitions.csv fix(firmware): redesign partition table for 4MB flash; fix flash size in esptool.js 2026-04-17 10:40:58 -04:00
sdkconfig.defaults fix(firmware): redesign partition table for 4MB flash; fix flash size in esptool.js 2026-04-17 10:40:58 -04:00