i386 has no float writer helper
Measured 2026-09-07, compiler sha256 6cb3695cbedc
pascal26:33: error: compiler error: float writer helper not found
test_fortran_skeleton.f90 and test_algol_skeleton.alg, --target=i386.
Both compile and run identically to their native output on aarch64, arm32
and riscv32.
| x86-64 | i386 | aarch64 | arm32 | riscv32 | |
|---|---|---|---|---|---|
| Fortran skeleton | ok | fail | ok | ok | ok |
| Algol skeleton | ok | fail | ok | ok | ok |
| BASIC (writes reals, never refused) | ok | ok | ok | ok | — |
The BASIC row is the one that makes this a defect rather than a gap. BASIC writes reals and works on i386, so a working i386 float-write path exists; these two frontends do not reach it. Whatever selects it is not being satisfied here — not measured which, and that is the first thing to find out rather than guess.
Why the message matters as much as the failure
compiler error: <helper> not found is internal-fault-shaped: it names a
compiler-internal routine, gives the user nothing to act on, and arrives after a
parse that succeeded. Compare LOLCODE's riscv32 refusal, found in the same
sweep — "target riscv32: frozen tyString concat unsupported; only
literal+literal folds (combine nested string literals)" — which names the
construct and the workaround. That one is a limitation. This one is a bug.
Status of the two frontends
Both are refused for i386 and accepted for x86-64/aarch64/arm32/riscv32, with this ticket named at the refusal. The refusal is narrow and dated on purpose: it excludes ONE target for ONE measured reason, which is what makes it retireable — unlike the x86-64-only refusals it replaced, which excluded four targets for a reason nobody had checked in months.
Acceptance
Both skeletons produce output identical to their native run on i386, and the
i386 entry comes out of both refusal lists in the same commit. The row is
already written: test-skeleton-frontends-cross-target covers both fixtures and
currently reports them REFUSED for i386, by name — so the reading flips from
"refused on purpose" to a compared row without a new harness.