Repository navigation
v0.8.1 — two fixes for dockerized compilers
A patch release. Both fixes predate 0.8.0 — they are not regressions from it. They surfaced
while sanity-checking the published 0.8.0 binary against real rows, and the published 0.7.0 binary
fails on them identically.
Both are hit by a project whose tools.asmlift.compiler runs the compiler in a container.
A candidate's scratch directory was a recycled path
Every candidate compile reused one directory, deleted and recreated under the same name. A
container reaches that directory through a bind mount, and a recycled path does not survive one:
every candidate failed with FATAL: Can't create /work/cand.o: Invalid argument, and the row
scored nothing at all. Each candidate now gets a fresh directory; one stays live at a time, as
before.
The repo had already measured this class in its own harness — 50 of 160 compiles failing on a
reused path against 0 of 160 with a fresh one — and its dockerized toolchains already avoided it.
The helper a real project's decomp.yaml goes through was the one still recycling.
…and the error said nothing
That failure reported the compile command and stopped, because the cause was summarised to its
first line — and a compile failure is the command on line one with the compiler's own complaint
after it. The only sentence saying what broke was the one being dropped.
Visible in the benchmark too: rows that published a single incidental warning, or a bare
# Error: caret with no text beside it, now carry the diagnostic that names the problem.
An unbounded syntax probe does not fail, it hangs
The vendoring-time syntax check spawned the host compiler with no deadline. spawnSync waits on
the stdio pipes rather than merely on the child, so a compiler that exits promptly still blocks for
as long as anything it forked holds stderr — measured once at two and a half hours, with the suite
reporting nothing throughout. It is bounded now, and a timeout is a loud error.
While there: a non-zero exit from that probe was being read as its passing answer, since a
compiler that rejects the unit reports no implicit declarations. A wrong ASMLIFT_CC made the gate
a no-op. It refuses now.
Also
A playground example — a sprite-list walk whose recovery is byte-exact and needs a struct recovered
from offsets alone, a guarded do-while, a short-circuit && and a pow2 divide to all hold at once.
And the documentation the corpus and the CLI had outgrown: ranked-repro.md's section about the
compiler flags now mentions them, asmlift-101.md lists the seventh --target id, and two censuses
the corpus has outgrown are dated rather than quietly left in the present tense.
Install
npm install -g @asmlift/cliFull changelog: v0.8.0...v0.8.1