diff --git a/Zend/Optimizer/block_pass.c b/Zend/Optimizer/block_pass.c index 5339de4b644..c504cdd655d 100644 --- a/Zend/Optimizer/block_pass.c +++ b/Zend/Optimizer/block_pass.c @@ -172,6 +172,7 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array && opline->opcode != ZEND_SWITCH_LONG && opline->opcode != ZEND_SWITCH_STRING && opline->opcode != ZEND_MATCH + && opline->opcode != ZEND_MATCH_ERROR && zend_optimizer_update_op1_const(op_array, opline, &c)) { VAR_SOURCE(op1) = NULL; if (opline->opcode != ZEND_JMP_NULL diff --git a/ext/opcache/tests/opt/block_pass_006.phpt b/ext/opcache/tests/opt/block_pass_006.phpt new file mode 100644 index 00000000000..e70689c65ab --- /dev/null +++ b/ext/opcache/tests/opt/block_pass_006.phpt @@ -0,0 +1,15 @@ +--TEST-- +Block Pass 006: Inorrect QM_ASSIGN elimination +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.optimization_level=-1 +--FILE-- +''}){} +?> +--EXPECTF-- +Fatal error: Uncaught Error: Undefined constant "c" in %sblock_pass_006.php:2 +Stack trace: +#0 {main} + thrown in %sblock_pass_006.php on line 2