Non-reproducible one-off miscompile (2026-06-02)
- Type: bug
- Status: rejected (not a code defect; suspected transient hardware fault)
- Owner: —
- Opened: 2026-06-06 (from rainy-afternoon / anomaly report)
- Closed: 2026-06-19 (rejected — ignore unless it recurs)
Symptom
The same compiler/pascal26 (md5 unchanged) occasionally produced a
different, crashing binary for test/test_managed_record_exit.pas. cmp
showed ~10 differing bytes at the same file size; analysis traced them to a
single corrupted value — the output image size 0x0fa9 → 0x401681 — propagated
to several emit sites (mov %rsp, base+image-size stored to the wrong address →
segfault).
Why blocked
The toolchain uses no randomness, no timestamps, no intra-compile threads, and
the self-host gate requires byte-identical build == verify — output is
deterministic by construction. After the event a 400× determinism canary (200
self-compiles + 200 of the failing test) was byte-identical, zero crashes;
bootstrap/test/test-nilpy green. Never recurred. Leading suspicion:
transient hardware fault (RAM/cache bit flip on non-ECC memory), not a compiler
defect.
If it recurs
Determinism canary: for i in $(seq 1 200); do ./compiler/pascal26 test/hello.pas /tmp/t; cmp /tmp/t /tmp/golden || echo "DIVERGED $i"; done; plus
journalctl -k | grep -iE 'mce|edac|hardware error' and a memtest86 pass. Prefer
ECC RAM for long unattended self-host runs.
Full forensics: ../../developer/anomaly_2026-06-02_2000.md (+ evidence dir).
Log
- 2026-06-06 — ticket opened, parked in blocked/ (non-reproducible).
- 2026-06-19 — bug-hunt re-check: determinism canary byte-identical (60×
hello.pasself-compiles, zero divergence),make bootstrapbyte-identical, nomce/edac/hardware-error lines injournalctl -k. No code defect to fix. - 2026-06-19 — moved blocked/ → rejected/. Not a compiler defect; ignore in future bug hunts. The recurrence/forensics guidance above still stands if the exact image-size corruption ever reappears (then reopen as a real ticket).