The per-test loop in main() spans the setjmp(g_test_jmp)/longjmp recovery target: i is read (loop test + increment) on the longjmp-return path. gcc's -Wclobbered (enabled under -Wall) flags exactly this loop-index-across-setjmp shape. The build was clean today only coincidentally — the preceding qsort() call biases gcc's register heuristic; an identical loop without it warns at -O1/-O2 (verified). Qualify i as volatile per C11 7.13.2.1, the sanctioned remedy (no pragma, no flag downgrade), with no behavior change. This is the compile-cleanliness gate for the guard (parent bf-22vg). Verified: gcc -std=c11 -Wall -Wextra -Wclobbered -Werror is clean at -O0/-O1/-O2/-O3/-Os/-Og; make -C firmware/test test builds warning-free and runs all 30 tests (exit 0). Only firmware/test/test_runner.c touched. Co-Authored-By: Claude <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| main | ||
| test | ||
| CMakeLists.txt | ||
| dependencies.lock | ||
| partitions.csv | ||
| sdkconfig.defaults | ||