x86.ml was an encoder and a frame model with nothing calling it. It now lowers a whole Tast.program to an assembly file, and `flan build --x86` hands that file to the same clang invocation the LLVM path uses, against the same runtime objects. The flag is off by default; LLVM stays the release backend and the default one. Three programs, built both ways and compared by what they print and what they exit with rather than by reading bytes: exit 0; a dotimes that prints; and a fizz over a call, an if, a remainder and two string literals. All three agree with the LLVM build. The measurement decided the target. hist.ml over the fizz program shows no Signal, no Handled, no RestartCase — a loop that prints does not drag conditions in. What does is the bounds check and the allocator, and neither is in the reachable set of a program that prints a number. That is why there is no transfer guard here, and check_no_transfer is what makes the omission sound rather than hopeful: if nothing reachable can write the channel, no call can return with it set. It is a whole-program property, so it is checked once per build and the build stops with the node's name when it fails.
Description
Languages
OCaml
67.2%
Emacs Lisp
15.2%
C
10.4%
HTML
2.9%
Standard ML
2.8%
Other
1.5%