!zend_bitset_in(used_ext, VAR_NUM(opline->op1.var))) {
/* T1 = ..., T2 = QM_ASSIGN(T1) to T2 = ..., NOP */
src = VAR_SOURCE(opline->op1);
- if (src) {
+ if (src &&
+ src->opcode != ZEND_COPY_TMP &&
+ src->opcode != ZEND_ADD_ARRAY_ELEMENT &&
+ src->opcode != ZEND_ADD_ARRAY_UNPACK &&
+ (src->opcode != ZEND_DECLARE_LAMBDA_FUNCTION ||
+ src == opline -1)) {
src->result.var = opline->result.var;
VAR_SOURCE(opline->op1) = NULL;
VAR_SOURCE(opline->result) = src;
--- /dev/null
+--TEST--
+Block Pass 001: QM_ASSIGN and DECLARE_LAMBDA_FUNCTION
+--INI--
+opcache.enable=1
+opcache.enable_cli=1
+opcache.optimization_level=-1
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+abstract class Broadcaster {
+ protected function normalizeChannelHandlerToCallable($callback)
+ {
+ return is_callable($callback) ? $callback : function (...$args) use ($callback) {
+ return Container::getInstance()
+ ->make($callback)
+ ->join(...$args);
+ };
+ }
+}
+?>
+OK
+--EXPECT--
+OK
--- /dev/null
+--TEST--
+Block Pass 002: QM_ASSIGN and INIT_ARRAY
+--INI--
+opcache.enable=1
+opcache.enable_cli=1
+opcache.optimization_level=-1
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+function foo($key, $value, array $attributes) {
+ return is_array($value)
+ ? [$key, array_merge($value, $attributes)]
+ : [$value, $attributes];
+}
+?>
+OK
+--EXPECT--
+OK