You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
REGRESSION: e30_array_lit_dim_assign_shift no longer compiles — HashTable::shiftFirst() unresolved #24025
test/differential/cases/e30_array_lit_dim_assign_shift.php no longer compiles under AOT:
Call to undefined method PHPCompiler\VM\HashTable::shiftfirst()
It was passing in this session's earlier baseline (it is absent from the 15-case failing set
recorded in test/differential/AOT-BASELINE.md at 96ddddeb1).
That issue covered HashTable::sliceCopy() and HashTable::iterateKeyed() reported as undefined
while existing in lib/VM/HashTable.php — a registration problem, not missing implementations.
Worth checking whether shiftFirst is the same:
If it exists there, this is the same defect resurfacing on a third method, and #24013's fix for #23974 may have covered only the two methods named in that issue rather than the underlying
registration path.
Note the name arrives lowercased (shiftfirst) — as established on #23974, that is the error
path's display fallback ($class->methodNames[$methodLc] ?? $methodLc), not evidence of a
case-normalisation bug.
Candidate range
Between the two measurements: 96ddddeb1..556c97d1d.
Confirmed: the method exists — this is registration, same as #23974
lib/VM/HashTable.php:783: public function shiftFirst(): ?Variable
Present and public. So HashTable::shiftfirst() being "undefined" at build time is the third
instance of the pattern from #23974, where sliceCopy() and iterateKeyed() were likewise present
in source but unresolved for AOT.
That makes it likely #24013's fix addressed the two methods named in #23974 rather than whatever
registration path lets a HashTable method be resolved at all. Worth checking how those two were
made visible and whether the same treatment generalises — otherwise the next HashTable method a
case happens to reach will fail the same way.
The lowercased name (shiftfirst) is, as established on #23974, the error path's display fallback
($class->methodNames[$methodLc] ?? $methodLc) rather than a case-normalisation bug — mentioning
it again only so nobody re-chases it.
Fixed: AOT compile of e30_array_lit_dim_assign_shift — HashTable::shiftFirst NestedJIT registration + HashTableShiftLlvm inline emit (was Call to undefined method …::shiftfirst()).
Verified: e30 compiles; empty/non-empty array_shift AOT matches Zend; VM e30 differential OK; unit filters green; inventory 6600/6600.
Still open for full e30 AOT differential: master json_encode AOT segfaults even on json_encode(1); array-literal capture of $a after in-literal mutations can still be empty (#23990 was VM-only). Separate from the shiftFirst resolution gap.
e30_array_lit_dim_assign_shift.phpcompiles on f51d0b180. The Call to undefined method PHPCompiler\VM\HashTable::shiftfirst() error is gone, so #24046 resolved
what this issue reported.
The case still fails, at a later stage
It now segfaults at runtime:
zend: [99,99,[2,3]]
aot : phpc: fatal signal (segfault) after c:main_before_php
0/5 runs matched
Deterministic, not intermittent. Filing separately rather than reopening — the registration defect
this issue is about is genuinely fixed, and a runtime segfault in the same case is a different
problem that would only be confused by sharing a title.
This is the fourth time today a fix in this area has moved a failure to a later stage rather than
eliminating it (#23792, #23815, #23911, and now this). Not a criticism — each fix was correct and
exposed the next link. Worth knowing when reading "case still red" that it may mean progress.
Activity
PurHur commentedon Jul 27, 2026
claim: worker-lane-B — starting this run
Gate snapshot (pre-claim):
PurHur commentedon Jul 28, 2026
Confirmed: the method exists — this is registration, same as #23974
Present and public. So
HashTable::shiftfirst()being "undefined" at build time is the thirdinstance of the pattern from #23974, where
sliceCopy()anditerateKeyed()were likewise presentin source but unresolved for AOT.
That makes it likely #24013's fix addressed the two methods named in #23974 rather than whatever
registration path lets a
HashTablemethod be resolved at all. Worth checking how those two weremade visible and whether the same treatment generalises — otherwise the next
HashTablemethod acase happens to reach will fail the same way.
The lowercased name (
shiftfirst) is, as established on #23974, the error path's display fallback(
$class->methodNames[$methodLc] ?? $methodLc) rather than a case-normalisation bug — mentioningit again only so nobody re-chases it.
Baseline: regenerate on the 75-case corpus, and correct my own "silen…
PurHur commentedon Jul 28, 2026
claim: worker-lane-B — continuing (no PR yet; implementing NestedJIT
HashTable::shiftFirstregistration, same pattern as #23974sliceCopy/iterateKeyed)Gate snapshot:
user_release_ready: yes,north-star5-fast: ok, inventoryOK 6598/6598PurHur commentedon Jul 28, 2026
claim: worker-lane-B — continuing this run (workspace already on
agent/issue-24025-hashtable-shiftfirst)Gate snapshot:
user_release_ready: yes,north-star5-fast: ok, inventoryOK 6598/6598shiftfirst→HashTableShiftFirst, ArrayShiftJitHelper empty via getNumElements, spine require + unit asserte30_array_lit_dim_assign_shift+ unit testAOT: NestedJIT HashTable::shiftFirst via HashTableShiftLlvm (#24025) (#…
PurHur commentedon Jul 28, 2026
Merged #24046
Fixed: AOT compile of
e30_array_lit_dim_assign_shift—HashTable::shiftFirstNestedJIT registration +HashTableShiftLlvminline emit (wasCall to undefined method …::shiftfirst()).Verified: e30 compiles; empty/non-empty
array_shiftAOT matches Zend; VM e30 differential OK; unit filters green; inventory 6600/6600.Still open for full e30 AOT differential: master
json_encodeAOT segfaults even onjson_encode(1); array-literal capture of$aafter in-literal mutations can still be empty (#23990 was VM-only). Separate from the shiftFirst resolution gap.PurHur commentedon Jul 28, 2026
Lane B note: #24025 closed by #24046 before this run's PR (#24048) could merge — closed #24048 as duplicate.
Gate snapshot from this run (before noticing #24046):
user_release_ready: yes,north-star5-fast: ok, inventory OKHashTableShiftFirstWIP; semantic shift withoutjson_encodematched Zend (99then2,3)json_encode(1)AOT segfaults on master (independent; not this issue)PurHur commentedon Jul 28, 2026
Confirmed fixed —
shiftFirstresolves nowe30_array_lit_dim_assign_shift.phpcompiles onf51d0b180. TheCall to undefined method PHPCompiler\VM\HashTable::shiftfirst()error is gone, so #24046 resolvedwhat this issue reported.
The case still fails, at a later stage
It now segfaults at runtime:
Deterministic, not intermittent. Filing separately rather than reopening — the registration defect
this issue is about is genuinely fixed, and a runtime segfault in the same case is a different
problem that would only be confused by sharing a title.
This is the fourth time today a fix in this area has moved a failure to a later stage rather than
eliminating it (#23792, #23815, #23911, and now this). Not a criticism — each fix was correct and
exposed the next link. Worth knowing when reading "case still red" that it may mean progress.
AOT: array_sum via caller-frame ArraySumLlvm (#24167) (#24228)
Fix AOT array_first/array_last via HashTableElemLlvm thin path (#27596)…