diff --git a/Zend/Optimizer/block_pass.c b/Zend/Optimizer/block_pass.c index ccdaeafe76b..de014f6dab4 100644 --- a/Zend/Optimizer/block_pass.c +++ b/Zend/Optimizer/block_pass.c @@ -174,7 +174,8 @@ 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; - if (!zend_bitset_in(used_ext, VAR_NUM(src->result.var))) { + if (opline->opcode != ZEND_JMP_NULL + && !zend_bitset_in(used_ext, VAR_NUM(src->result.var))) { literal_dtor(&ZEND_OP1_LITERAL(src)); MAKE_NOP(src); } diff --git a/ext/opcache/tests/opt/block_pass_005.phpt b/ext/opcache/tests/opt/block_pass_005.phpt new file mode 100644 index 00000000000..d57fe22d71b --- /dev/null +++ b/ext/opcache/tests/opt/block_pass_005.phpt @@ -0,0 +1,17 @@ +--TEST-- +Block Pass 005: Inorrect QM_ASSIGN elimination +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.optimization_level=-1 +--EXTENSIONS-- +opcache +--FILE-- +y; +?> +--EXPECTF-- +Fatal error: Uncaught Error: Undefined constant "y" in %sblock_pass_005.php:2 +Stack trace: +#0 {main} + thrown in %sblock_pass_005.php on line 2