aaf31302d5ef56b295a09161afd479a4c2b92c02
Thirty-one cases only ever emitted C and never built it -- m5 owned/defer, and every ok* acceptance fixture in m6 and m7. They asserted that fec produced a file, not that the file was a program, so a malformed emission sat unnoticed. Compile each one with wcl386 -c. Fixtures without a main cannot be run, so this is the floor for them; it is a conformance check on the backend's output, not an assertion about C, so a future backend swaps the command rather than the intent. It found two defects in the M6 emitter immediately, both predating M7: &s[0] took the address of an rvalue. Borrowing went through emit_expr, which lowers an index to the bounds-checking accessor, so `&s[0]` became `&fe_idx_slice_type_2(s, 0)`. emit_lvalue spells the same element as `s.p[0]`. The M7 emitter already did this correctly; only the M6 path was wrong. line.trim() was never lowered. SPEC lists trim among the built-in alias methods on str and the checker accepts it, but no emitter case existed, so it emitted `fe_l_line_0.trim()` -- a member access on a slice struct. Emit the helper, and only for programs that actually trim. Also set core=dynamic and cycles=max. core=auto uses the interpreter in real mode, which is where the 16-bit compiler build spends its time; nothing here is timing sensitive. m6 drops from 31s to 17s. Raise the DOSBox timeout to match a whole-suite run, which now pays a process spawn per compile check. Verified: --only m6, 57 passed.
Description
doslang mirror
914 KiB
Languages
C
94.2%
Python
3%
Assembly
2%
JavaScript
0.6%