Fix enum case === / == regression when constants store backing scalars (#5832) - #5857
Merged
Merged
Conversation
Materialize enum cases on class const fetch via enumCases metadata so E::A === 1 stays false when legacy scalar storage drops canonical names; add compile-time isEnumCase fallback when php-cfg flags are missing. Co-authored-by: Cursor <cursoragent@cursor.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
caseobjects on class const fetch usingenumCasesmetadata whenenumCaseCanonicalNamesor stored values are legacy backing scalars (Language: backed enum case === / == with backing scalar must be false (zend_operators.c) #5798 regression).isEnumCaseDeclarefallback (enumcaseConst_ usesflags=0; userconstcarries visibility bits) so folds emit enum case objects when php-cfgisEnumCaseis missing.php-src reference
Zend/zend_operators.c— enum case vs backing scalar compare is never equalZend/zend_enum.c— enum case singleton materializationVerification
Legacy scalar repro (was
true, nowfalse):Closes #5832
Made with Cursor