Category
language · php-src-strict
Problem
Closed #9193 added duplicate backing-value detection, but VM regressed: accessing E::A on an enum with duplicate backing values emits property-read warnings on int instead of Zend's first-use Error: Duplicate value in enum E for cases A and B.
Compliance guard test/compliance/cases/language/enum_duplicate_backing_value.phpt is red (verified 2026-06-18).
php-src reference
Repro
<?php
enum E: int {
case A = 1;
case B = 1;
}
try {
echo E::A->name, "\n";
} catch (Throwable $e) {
echo get_class($e), ': ', $e->getMessage(), "\n";
}
enum F: int { case A = 1; case B = 2; }
echo F::A->name, "\n";
Save as test/repro/maintainer_enum_duplicate_backing.php.
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh
php test/repro/maintainer_enum_duplicate_backing.php
php bin/vm.php test/repro/maintainer_enum_duplicate_backing.php
'
| Runtime |
First block |
Second enum |
| Zend |
Error: Duplicate value in enum E for cases A and B |
A |
| VM today |
Warning: Attempt to read property "name" on int |
may also warn |
Root cause overlaps #9676 (enum cases scalarized) — fix duplicate check on enum case objects, not ints.
Scope (this repo)
| Layer |
Path |
| VM |
lib/VM/BackedEnum.php — duplicate map at first case materialization |
| Compiler |
enum case table build — optional compile-time duplicate detect |
| Tests |
test/compliance/cases/language/enum_duplicate_backing_value.phpt |
Done when
Verification
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && vendor/bin/phpunit --filter enum_duplicate_backing'
Related
Category
language· php-src-strictProblem
Closed #9193 added duplicate backing-value detection, but VM regressed: accessing
E::Aon an enum with duplicate backing values emits property-read warnings on int instead of Zend's first-useError: Duplicate value in enum E for cases A and B.Compliance guard
test/compliance/cases/language/enum_duplicate_backing_value.phptis red (verified 2026-06-18).php-src reference
Zend/zend_enum.c—zend_enum_duplicate_backing_value, lazy case initializationRepro
Save as
test/repro/maintainer_enum_duplicate_backing.php.Error: Duplicate value in enum E for cases A and BAWarning: Attempt to read property "name" on intRoot cause overlaps #9676 (enum cases scalarized) — fix duplicate check on enum case objects, not ints.
Scope (this repo)
lib/VM/BackedEnum.php— duplicate map at first case materializationtest/compliance/cases/language/enum_duplicate_backing_value.phptDone when
tryprints exact ZendError:message (class + text)F::Astill printsAE_WARNINGproperty-read noise before the Error./script/ci-fast.sh --filter enum_duplicate_backinggreenVerification
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && vendor/bin/phpunit --filter enum_duplicate_backing'Related