Skip to content

Regression: ReflectionClassConstant::isEnumCase() false for enum-backed class constants (ext/reflection/php_reflection.c) #17361

Closed

Description

@PurHur

Category

stdlib · php-src-strict

Problem

Class constants whose value is an enum case (public const Color SWATCH = Color::Red) must report isEnumCase() === true. VM returns false.

Repro Zend 8.1+ VM (2026-07-08)
isEnumCase() on const Color SWATCH = Color::Red true false
isEnumCase() on const int PLAIN = 1 false false

php-src reference

PHP implementation target

  • lib/VM/Builtin/ReflectionClassConstantIsEnumCase.php (or existing method body) — detect enum-case Variable / object kind for the constant value
  • Shared metadata at compile time if the constant initializer is a known enum case

Repro

./script/docker-exec.sh -- bash -lc 'export PHP_COMPILER_PROFILE=8.4 && php bin/vm.php test/repro/maintainer_gap_reflection_class_constant_is_enum_case.php'

Done when

  • Enum-case class constants return true from isEnumCase(); scalar constants return false
  • Compliance guard under test/compliance/cases/reflection/
  • php-src-strict; no php-compiler-strict shortcut

Activity

  1. added
    bugSomething isn't working
    enhancementNew feature or request
    phase-4:stdlibPhase 4 – stdlib for web apps
    area:vmVirtual machine
    implementation-readySpec complete: repro, php-src ref, done-when — safe for workers to claim
    on Jul 8, 2026
  2. PurHur commented on Jul 8, 2026

    @PurHur
    OwnerAuthor

    claim: cursor-agent-lane-a — starting this run

  3. PurHur commented on Jul 8, 2026

    @PurHur
    OwnerAuthor

    claim: PHP Compiler STD Lib Advanced — batch (issues #17359 #17360 #17361)

  4. PurHur commented on Jul 8, 2026

    @PurHur
    OwnerAuthor

    claim released: repro matches Zend 8.2 — isEnumCase() false for const SWATCH = Color::Red (php.net + ZEND_CLASS_CONST_IS_CASE); only enum case members return true. Issue expectation contradicts php-src.

  5. PurHur commented on Jul 8, 2026

    @PurHur
    OwnerAuthor

    Merged in PR #17363.

    Verification (Docker, PHP_COMPILER_PROFILE=8.4):

    • php bin/vm.php test/repro/maintainer_gap_reflection_class_constant_has_type.php → typed/untyped
    • php bin/vm.php test/repro/maintainer_gap_reflection_class_constant_modifiers.php → IS_* 1/2/4/32, getModifiers 1/2/4/33
    • php bin/vm.php test/repro/maintainer_gap_reflection_class_constant_is_enum_case.php → enum/scalar
    • Compliance: reflection_class_constant_has_type.phpt, reflection_class_constant_modifiers.phpt, reflection_class_constant_is_enum_case_typed_const.phpt

    ./script/ci-fast.sh green.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:vmVirtual machinebugSomething isn't workingenhancementNew feature or requestimplementation-readySpec complete: repro, php-src ref, done-when — safe for workers to claimphase-4:stdlibPhase 4 – stdlib for web appsstdlib

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions