5529e3dc14322672bbc78e2c455677808d003162
The bounds-no-checks cases emitted and built but never ran, so they only proved that --no-checks produces compilable C -- not that it removes the check, which is the entire point of the flag. A run case could not simply be appended. BOUNDS.FE returns the out-of-bounds element directly, so with checks removed its exit code is whatever sits past the array on the stack and there is no correct status to assert. Asserting on the generated C instead does not work either: emit_c.c defines fe_trap_bounds unconditionally and --no-checks only suppresses the call sites. Add NOCHK.FE, which reads one element past a [2]i32 and returns x - x. That is 0 for whatever garbage the unchecked read produced, so the same source has a defined outcome both ways: compiled with checks it must trap, compiled with --no-checks it must run to completion and exit 0. Register both halves and drop the two BOUNDS-N cases they supersede. Verified in DOSBox-X: 155 passed, including m3-nochk-trap failing as expected and m3-nochk-off-run succeeding. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BScg8CF1sAAM2zVHAu5zvW
Description
doslang mirror
914 KiB
Languages
C
94.2%
Python
3%
Assembly
2%
JavaScript
0.6%