Closed
Description
Description
The following code:
<?php
class ExampleClass
{
public const EXAMPLE_CONST = 42;
}
enum ExampleEnum: int
{
case ENUM_CASE = ExampleClass::EXAMPLE_CONST;
}
var_dump(ExampleEnum::ENUM_CASE->value);
Resulted in this output:
$ php test.php -dopcache.jit_buffer_size=0 -dopcache.enable=1 -dopcache.enable_cli=0
// - First execution: 42
// - Second execution: 42
// - Third execution: 42
$ php test.php -dopcache.jit_buffer_size=0 -dopcache.enable=1 -dopcache.enable_cli=1
// - First execution: 42
// - Second execution: Enum case value must be compile-time evaluatable
// - Third execution: Enum case value must be compile-time evaluatable
But I expected this output instead:
// - First execution: 42
// - Second execution: 42
// - Third execution: 42
Conclusion
- Behavior is affected by enabling or disabling opcache.
- The jit buffer is disabled, which disables JIT compilation and therefore the problem occurs at an earlier "compilation stage".
Environment
Linux (Debian-based)
PHP 8.1.4 (cli) (built: Apr 4 2022 13:30:33) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.4, Copyright (c) Zend Technologies
with Zend OPcache v8.1.4, Copyright (c), by Zend Technologies
Other Info
- Perhaps the issue has been resolved by Allow arbitrary const expressions in backed enums #8190
- This issue has been moved from another Can't use inherited constant value via 'self' in enum case value #7821
PHP Version
8.1.4
Operating System
Ubuntu Budgie 21.10