← board

Cross compiler.pas probe walls

Motivation

The full cross self-host fixedpoint gate is still too large to attack as one step. Before a target can self-host under QEMU, the native compiler must at least be able to compile compiler/compiler.pas for that target.

This ticket tracks the current stage-1 probe walls precisely and keeps them from getting buried across several broader backend tickets.

Current Probe

Run from repo root:

for arch in i386 aarch64 arm32; do
  ./compiler/pascal26 -dPXX_MANAGED_STRING --target=$arch \
    compiler/compiler.pas /tmp/compiler_$arch
done

Baseline results after commit 3047bdd:

i386    line 86    target i386: only ordinal/pointer/string variables supported yet
aarch64 line 86    target aarch64: non-integer binop not yet supported
arm32   line 35914 target arm32: builtin/special call not yet supported

Current results:

i386    ok         emits /tmp/compiler_i386
aarch64 ok         emits /tmp/compiler_aarch64
arm32   ok         emits /tmp/compiler_arm32

Line numbers are from the expanded compiler source stream reported by pascal26, not necessarily direct line numbers in compiler/compiler.pas.

Scope

Likely Ownership Split

Acceptance

Log

Closure (2026-06-16)

feature-cross-bootstrap-selfhost is DONE — byte-identical self-fixedpoint on i386/aarch64/arm32 (and x86-64). This ticket existed to unblock that gate, so its blocking purpose is met: every code path compiler.pas itself exercises now works byte-identically on all cross targets. Residual gaps are only in language features the compiler does NOT self-use (e.g. classes, interfaces, some param/ ABI shapes user code hits) — those move to the language-surface hardening effort driven by the synthetic conformance harness ([[feature-synthetic-feature-matrix-test]]). Closed.