Skip to content

Tracking: AOT correctness inventory — 44 mismatches in 85 probes across two language areas #31968

Description

@PurHur

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions