Category
bug · php-in-php · Trust / #32122 .1 mint class · Type::register shrink
Problem
Builtin\Type::register still eagerly calls:
StringTriggerError::declareUndefinedArrayKeyAbis
StringTriggerError::ensureLinked
Those NestedJIT trigger_error / undefined_array_key_warning_* ABIs during every AOT init — leftover Context/Type NestedJIT vs Runtime ABI drift mints trigger_error.1 / undefined_array_key_warning_*.1 (#31894 / #32122).
Type::initialize already dropped this (#34513); Context ensureMinimal/ensureFull likewise (#34641 / #35073). Call sites and AssertFail::ensureLinked already ensure before lookup. HashTable::implement is the consumer of undef-key ABIs and should declare/ensure at the start of implement (peer of other Type subtype ABI ensure).
| Path |
Today |
After |
| Thin hello-world AOT init |
Type::register NestedJIT trigger_error |
no Type NestedJIT of StringTriggerError |
| HashTable::implement undef-key warn |
relies on Type::register |
ensure at implement entry |
| HELPER_RUNTIME_O=0 (#33248) |
Type::register ensureLinked |
HashTable::implement + call-site ensure |
php-src reference
PHP implementation target
Repro
./script/aot-smoke.sh # must stay 8/8
./script/phpunit.sh --filter 'TypeDeadTriggerError|TypeDeadUndefinedArrayKey|TriggerErrorHelperRuntimeO033248|ContextMinimalStandaloneLazyStringTriggerError'
Done when
Parent
Category
bug· php-in-php · Trust / #32122.1mint class · Type::register shrinkProblem
Builtin\Type::registerstill eagerly calls:StringTriggerError::declareUndefinedArrayKeyAbisStringTriggerError::ensureLinkedThose NestedJIT
trigger_error/undefined_array_key_warning_*ABIs during every AOT init — leftover Context/Type NestedJIT vs Runtime ABI drift mintstrigger_error.1/undefined_array_key_warning_*.1(#31894 / #32122).Type::initializealready dropped this (#34513); Context ensureMinimal/ensureFull likewise (#34641 / #35073). Call sites andAssertFail::ensureLinkedalready ensure before lookup.HashTable::implementis the consumer of undef-key ABIs and should declare/ensure at the start of implement (peer of other Type subtype ABI ensure).php-src reference
Zend/zend_execute_API.c—zend_error/ undefined variable/key warningsmain/php_errors.c—php_error_docref/ trigger_error shapeext/standard/basic_functions.c—PHP_FUNCTION(trigger_error)PHP implementation target
lib/JIT/Builtin/Type/HashTable.php—declareUndefinedArrayKeyAbis+StringTriggerError::ensureLinkedat start ofimplement()lib/JIT/Builtin/Type.php— remove always-on calls fromregister(); comment peer php-in-php: drop Type::initialize always-on StringTime/EnvLocal/TriggerError/PendingHeaders ensureLinked — lazy Jit* ABI (peer #34474) #34513 / Regression: HELPER_RUNTIME_O=0 AOT compile fails looking up __compiler_trigger_error after #33234 (lib/JIT/Builtin/Type.php) #33248TypeDeadTriggerErrorAbiRuntimeShrinkTest/TypeDeadUndefinedArrayKeyAbiRuntimeShrinkTestruntime/*.cRepro
Done when
Type::registerdoes not callStringTriggerError::ensureLinked/declareUndefinedArrayKeyAbisHashTable::implementdeclares/ensures before undef-key lookup./script/aot-smoke.sh→ 8/8runtime/*.cParent
.1mint class #32122