Tracking issue for the AOT correctness work. Full inventory and suggested order live in docs/roadmap/AOT-CORRECTNESS-PLAN.md (PR #31962); background in docs/AGENT-HANDOVER-2026-08-17.md.
How this was measured
A 10-agent differential hunt: each agent takes one language area, writes 15–25 deterministic probe programs (no time, randomness, PIDs or hash-ordering), runs each under Zend 8.2.32 and as an AOT binary, and compares stdout+stderr byte-for-byte.
| area |
probes run |
mismatches |
| statics |
41 |
21 |
| numerics |
44 |
23 |
| total |
85 |
44 |
Eight further areas (inheritance, closures, exceptions, arrays, strings, generators, references, enums/traits) were still running when this was filed and are not included. The real total is higher.
Roughly one probe in two mismatches, on ordinary PHP.
Children
| issue |
group |
| #31963 |
float→string conversion — five crashes, incl. one that segfaults the compiler itself |
| #31964 |
integer overflow wraps instead of promoting to float — silent wrong arithmetic |
| #31965 |
static property read through a closure returns uninitialised memory (unstable) |
| #31966 |
invalid IR — module verification failures |
| #31967 |
unimplemented lowering — honest errors, lower priority |
| #31895 |
inherited property defaults never initialised (verified) |
Two things to carry forward
1. None of this was measurable until #31894. Every AOT binary failed to link (aot-smoke: 0 passed, 8 failed, undefined reference to memset.1). Two defects previously reported as separate AOT bugs — var_dump aborting rc=134 and Exception::getMessage() segfaulting — were that same link failure and now match Zend exactly. Run script/aot-smoke.sh before diagnosing anything; if it is not 8/8 you are measuring the toolchain.
2. Provenance is marked deliberately. Only #31895 was re-run by hand. The rest are probe-reported and each issue says so. Please reproduce before fixing — and if a finding does not reproduce, say so on the issue rather than quietly dropping it.
Confound, stated
The hunt ran while the box was at load 129–228 on 16 cores, mostly from unrelated long-running jobs. A wall-clock timeout under that load would be a contention artifact — but the findings carry deterministic signatures (exit 2/255 with specific compiler errors, SIGSEGV, SIGABRT), and no hang findings were reported. That makes the haul plausible, not proven.
Related
Tracking issue for the AOT correctness work. Full inventory and suggested order live in
docs/roadmap/AOT-CORRECTNESS-PLAN.md(PR #31962); background indocs/AGENT-HANDOVER-2026-08-17.md.How this was measured
A 10-agent differential hunt: each agent takes one language area, writes 15–25 deterministic probe programs (no time, randomness, PIDs or hash-ordering), runs each under Zend 8.2.32 and as an AOT binary, and compares stdout+stderr byte-for-byte.
Eight further areas (inheritance, closures, exceptions, arrays, strings, generators, references, enums/traits) were still running when this was filed and are not included. The real total is higher.
Roughly one probe in two mismatches, on ordinary PHP.
Children
Two things to carry forward
1. None of this was measurable until #31894. Every AOT binary failed to link (
aot-smoke: 0 passed, 8 failed,undefined reference to memset.1). Two defects previously reported as separate AOT bugs —var_dumpaborting rc=134 andException::getMessage()segfaulting — were that same link failure and now match Zend exactly. Runscript/aot-smoke.shbefore diagnosing anything; if it is not 8/8 you are measuring the toolchain.2. Provenance is marked deliberately. Only #31895 was re-run by hand. The rest are probe-reported and each issue says so. Please reproduce before fixing — and if a finding does not reproduce, say so on the issue rather than quietly dropping it.
Confound, stated
The hunt ran while the box was at load 129–228 on 16 cores, mostly from unrelated long-running jobs. A wall-clock timeout under that load would be a contention artifact — but the findings carry deterministic signatures (exit 2/255 with specific compiler errors, SIGSEGV, SIGABRT), and no
hangfindings were reported. That makes the haul plausible, not proven.Related
apply-patches.sh, never reachingaot-smoke.sh, which is why the link break went unnoticed. Partially fixed; the patch chain needs a pass with a clean vendor.docs/roadmap/RELEASE-PLAN.mdis stale and still claims CI onlib//ext/is "green on master".