Merge branch 'PHP-8.1' into PHP-8.2

* PHP-8.1:
  Fixed incorrect QM_ASSIGN elimination
This commit is contained in:
Dmitry Stogov 2023-07-24 15:43:21 +03:00
commit d6a795b935
2 changed files with 24 additions and 4 deletions

View File

@ -174,8 +174,10 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
&& opline->opcode != ZEND_MATCH
&& zend_optimizer_update_op1_const(op_array, opline, &c)) {
VAR_SOURCE(op1) = NULL;
literal_dtor(&ZEND_OP1_LITERAL(src));
MAKE_NOP(src);
if (!zend_bitset_in(used_ext, VAR_NUM(src->result.var))) {
literal_dtor(&ZEND_OP1_LITERAL(src));
MAKE_NOP(src);
}
++(*opt_count);
} else {
zval_ptr_dtor_nogc(&c);
@ -197,8 +199,10 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
ZVAL_COPY(&c, &ZEND_OP1_LITERAL(src));
if (zend_optimizer_update_op2_const(op_array, opline, &c)) {
VAR_SOURCE(op2) = NULL;
literal_dtor(&ZEND_OP1_LITERAL(src));
MAKE_NOP(src);
if (!zend_bitset_in(used_ext, VAR_NUM(src->result.var))) {
literal_dtor(&ZEND_OP1_LITERAL(src));
MAKE_NOP(src);
}
++(*opt_count);
} else {
zval_ptr_dtor_nogc(&c);

View File

@ -0,0 +1,16 @@
--TEST--
Block Pass 004: Inorrect QM_ASSIGN elimination
--INI--
opcache.enable=1
opcache.enable_cli=1
opcache.optimization_level=-1
--EXTENSIONS--
opcache
--FILE--
<?php
(1?4:y)?->y;
?>
DONE
--EXPECTF--
Warning: Attempt to read property "y" on int in %sblock_pass_004.php on line 2
DONE