diff --git a/Zend/Optimizer/sccp.c b/Zend/Optimizer/sccp.c index 631037a2a8e..4876a198cb3 100644 --- a/Zend/Optimizer/sccp.c +++ b/Zend/Optimizer/sccp.c @@ -1471,6 +1471,7 @@ static void sccp_visit_instr(scdf_ctx *scdf, zend_op *opline, zend_ssa_op *ssa_o if (opline->opcode == ZEND_PRE_INC_OBJ || opline->opcode == ZEND_PRE_DEC_OBJ) { SET_RESULT(result, &tmp2); + zval_ptr_dtor_nogc(&tmp1); } else { SET_RESULT(result, &tmp1); } diff --git a/ext/opcache/tests/opt/sccp_035.phpt b/ext/opcache/tests/opt/sccp_035.phpt new file mode 100644 index 00000000000..86965b13b5f --- /dev/null +++ b/ext/opcache/tests/opt/sccp_035.phpt @@ -0,0 +1,17 @@ +--TEST-- +SCCP 035: memory leak +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.optimization_level=-1 +--FILE-- +$b = ~$b = $a=''; + $obj->$a--; +} +?> +DONE +--EXPECT-- +DONE