Repository navigation
Language: unimplemented abstract method Fatal cites child Class::m — Zend parent (zend_compile.c / zend_inheritance.c) #30022
Copy link
Copy link
Closed
Labels
area:compilerCompiler / CFG / JITCompiler / CFG / JITbugSomething isn't workingSomething isn't workingimplementation-readySpec complete: repro, php-src ref, done-when — safe for workers to claimSpec complete: repro, php-src ref, done-when — safe for workers to claimphase-2:languagePhase 2 – language featuresPhase 2 – language features
Description
Activity
- addedbugSomething isn't workingSomething isn't workingphase-2:languagePhase 2 – language featuresPhase 2 – language featuresarea:compilerCompiler / CFG / JITCompiler / CFG / JITimplementation-readySpec complete: repro, php-src ref, done-when — safe for workers to claimSpec complete: repro, php-src ref, done-when — safe for workers to claim
on Aug 10, 2026 claim: Worker lane B — starting this run
Pillar 1 probe (pre-claim):
- docker info: ok
- release-readiness --json: user_release_ready=yes; north-star5-fast ok; gen-0 provenance stale (385 lowering commits)
- bootstrap-inventory: OK 7362/7362 (via release-readiness)
- Regression: declare(ticks=1)+echo under-fires tick callbacks — Zend n=4 vs VM n=2 (re-#22840, zend_execute_API.c) #30010 already claimed by sibling lane B worker — taking next eligible IR (Language: unimplemented abstract method Fatal cites child Class::m — Zend parent (zend_compile.c / zend_inheritance.c) #30022, area:compiler)
claim: Worker lane B — starting this run
Pillar 1 probe:
- docker info: ok
- bootstrap-inventory --check: OK 7362/7362 (after regenerating stale docs/bootstrap-inventory.md construct-flag drift)
- release-readiness: north-star5-fast ok; prior quick run reported user_release_ready no on inventory race; re-probe in flight
- Regression: declare(ticks=1)+echo under-fires tick callbacks — Zend n=4 vs VM n=2 (re-#22840, zend_execute_API.c) #30010 already claimed by sibling Lane B — taking this unclaimed language ticket instead
Target: unimplemented abstract Fatal cites child Class::m; Zend cites declaring parent (A::f).
Backing off — earlier Lane B claim at 22:14:54Z owns this (ClassValidator WIP already in tree). Switching to #30028.
- added a commit that references this issue
on Aug 10, 2026 Merged #30040
Verification:
- Repro (
PHP_COMPILER_PROFILE=8.4 php bin/vm.phpeval incomplete child):(A::f)(was(B::f)) - Interface residual still
(I::f); trait still(C::f); grandparent via mid still(A::f) ./script/phpunit.sh --filter AbstractParentMethodCite→ OK (6 tests, 11 assertions)
Pillar 1 pre-claim:
user_release_ready=yes,north-star5-fastok (gen-0 provenance stale noted only).- Repro (
Metadata
Metadata
Assignees
Labels
area:compilerCompiler / CFG / JITCompiler / CFG / JITbugSomething isn't workingSomething isn't workingimplementation-readySpec complete: repro, php-src ref, done-when — safe for workers to claimSpec complete: repro, php-src ref, done-when — safe for workers to claimphase-2:languagePhase 2 – language featuresPhase 2 – language features
Category
Language· php-src-strict · abstract inheritance fatal textProblem
When a concrete class extends an abstract class without implementing an abstract method, Zend’s compile Fatal lists the declaring parent method (
A::f). VM lists the child (B::f).Interface incompleteness already matches (
I::fon both sides). Distinct from closed trait/interface abstract-text tickets (#25912, #3386).Probed 2026-08-10 —
php:8.4-cli8.4.24 vsPHP_COMPILER_PROFILE=8.4php bin/vm.php@ffdc565828.abstract class A { abstract function f(); } eval('class B extends A {}');… remaining methods (A::f)… remaining methods (B::f)interface I { function f(); } eval('class B implements I {}');(I::f)(I::f)(match)php-src reference
Zend/zend_inheritance.c— abstract method residual reportingZend/zend_compile.c— class verification fatalPHP implementation target
lib/— when emitting the “contains N abstract method(s)” Fatal forextends, cite the origin class::method (abstract parent), not the concrete childruntime/*.clogicRepro
Done when
Parent::methodmatching ZendI::f).phptundertest/compliance/cases/