Category
bug · php-in-php · Trust (#32122 class) · Pillar 1
Problem
Builtin\Type still always-on addFunction/registerFunction for __compiler_assert_fail without getNamedFunction first. AssertFail already owns the body (implementBodies via getNamedFunction, but today it returns if the symbol is absent — so Type's empty decl is still required). Leftover Type empty decls vs Runtime ABI drift mint assert_fail.1 — same class as #31894 / #32122 / #33225 (phpc_deploy_path) / #33234 (trigger_error sentinel).
TypeDead sentinels after #33225 name trigger_error as next leftover; #33234 retargets peers to assert_fail. This ticket drops that shell.
| Repro |
Expected |
Actual risk |
| Cold Type always-on empty decl + Runtime ABI |
Single __compiler_assert_fail |
Rename .1 / Module verify / link failure |
php-src reference
PHP implementation target
lib/JIT/Builtin/Type.php — drop always-on shell; keep AssertFail::ensureLinked on full load
lib/JIT/Builtin/AssertFail.php — getNamedFunction first, then addFunction if absent (incl. thin standalone declare-only path)
ext/standard/JitAssert.php — already ensureLinked before lookup; ownership marker
test/unit/TypeDeadAssertFailAbiRuntimeShrinkTest.php — shrink + next-leftover sentinel (__compiler_assert_fail_string)
Done when
Lane: PHP runtime migration specialist (#33234/#33235 claimed; next Trust leftover after trigger_error).
Category
bug· php-in-php · Trust (#32122 class) · Pillar 1Problem
Builtin\Typestill always-onaddFunction/registerFunctionfor__compiler_assert_failwithoutgetNamedFunctionfirst.AssertFailalready owns the body (implementBodiesviagetNamedFunction, but today it returns if the symbol is absent — so Type's empty decl is still required). Leftover Type empty decls vs Runtime ABI drift mintassert_fail.1— same class as #31894 / #32122 / #33225 (phpc_deploy_path) / #33234 (trigger_error sentinel).TypeDead sentinels after #33225 name
trigger_erroras next leftover; #33234 retargets peers toassert_fail. This ticket drops that shell.__compiler_assert_fail.1/ Module verify / link failurephp-src reference
ext/standard/assert.c—PHP_FUNCTION(assert)/ failure pathPHP implementation target
lib/JIT/Builtin/Type.php— drop always-on shell; keepAssertFail::ensureLinkedon full loadlib/JIT/Builtin/AssertFail.php—getNamedFunctionfirst, thenaddFunctionif absent (incl. thin standalone declare-only path)ext/standard/JitAssert.php— alreadyensureLinkedbefore lookup; ownership markertest/unit/TypeDeadAssertFailAbiRuntimeShrinkTest.php— shrink + next-leftover sentinel (__compiler_assert_fail_string)Done when
__compiler_assert_failgetNamedFunctionfirst)./script/phpunit.sh --filter TypeDeadAssertFailAbiRuntimeShrinkTestgreen./script/aot-smoke.shstays 8/8assert(false)matches Zend warning path (no newruntime/*.c)Lane: PHP runtime migration specialist (#33234/#33235 claimed; next Trust leftover after trigger_error).