[php-src] Issue #8140: First Class Callable Syntax issue with OpCache
| From: | Girgias | Date: | Tue, 22 Feb 2022 23:34:47 +0000 |
| Subject: | [php-src] Issue #8140: First Class Callable Syntax issue with OpCache | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-239981@lists.php.net to get a copy of this message | ||
Issue: https://github.com/php/php-src/issues/8140
Comment Author: Girgias
Using `
opcache.opt_debug_level=0x20000 it seems in the namespace case a
DO_UCALL is generated instead of a CALLABLE_CONVERT`
which seems to break down the optimizer.
In global namespace:
```
$_main:
; (lines=7, args=0, vars=1, tmps=1)
; (after optimizer)
; /home/girgias/Dev/php-src/ext/opcache/tests/gh8140.php:1-14
0000 INIT_FCALL 0 144 string("greeter")
0001 T1 = CALLABLE_CONVERT
0002 ASSIGN CV0($mycallable) T1
0003 INIT_DYNAMIC_CALL 1 CV0($mycallable)
0004 SEND_VAL_EX string("I should work") 1
0005 DO_FCALL
0006 RETURN int(1)
greeter:
; (lines=6, args=1, vars=1, tmps=3)
; (after optimizer)
; /home/girgias/Dev/php-src/ext/opcache/tests/gh8140.php:5-7
0000 CV0($name) = RECV 1
0001 T2 = ROPE_INIT 3 string("Hello, ")
0002 T2 = ROPE_ADD 1 T2 CV0($name)
0003 T1 = ROPE_END 2 T2 string("!")
0004 ECHO T1
0005 RETURN null
LIVE RANGES:
2: 0001 - 0003 (rope)
```
In namespace:
```
$_main:
; (lines=7, args=0, vars=1, tmps=1)
; (after optimizer)
; /home/girgias/Dev/php-src/ext/opcache/tests/gh8140.php:1-14
0000 INIT_FCALL 0 144 string("test\greeter")
0001 T1 = DO_UCALL
0002 ASSIGN CV0($mycallable) T1
0003 INIT_DYNAMIC_CALL 1 CV0($mycallable)
0004 SEND_VAL_EX string("I should work") 1
0005 DO_FCALL
0006 RETURN int(1)
Test\greeter:
; (lines=6, args=1, vars=1, tmps=3)
; (after optimizer)
; /home/girgias/Dev/php-src/ext/opcache/tests/gh8140.php:5-7
0000 CV0($name) = RECV 1
0001 T2 = ROPE_INIT 3 string("Hello, ")
0002 T2 = ROPE_ADD 1 T2 CV0($name)
0003 T1 = ROPE_END 2 T2 string("!")
0004 ECHO T1
0005 RETURN null
LIVE RANGES:
2: 0001 - 0003 (rope)
```