diff options
Diffstat (limited to 'Zend/zend_compile.c')
-rw-r--r-- | Zend/zend_compile.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 27113fa2b6..eeeadb9d18 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2100,6 +2100,9 @@ static void zend_compile_memoized_expr(znode *result, zend_ast *expr) /* {{{ */ } else if (result->op_type == IS_TMP_VAR) { zend_emit_op_tmp(&memoized_result, ZEND_COPY_TMP, result, NULL); } else { + if (result->op_type == IS_CONST) { + Z_TRY_ADDREF(result->u.constant); + } memoized_result = *result; } @@ -7433,7 +7436,11 @@ void zend_compile_coalesce(znode *result, zend_ast *ast) /* {{{ */ /* }}} */ static void znode_dtor(zval *zv) { - efree(Z_PTR_P(zv)); + znode *node = Z_PTR_P(zv); + if (node->op_type == IS_CONST) { + zval_ptr_dtor_nogc(&node->u.constant); + } + efree(node); } void zend_compile_assign_coalesce(znode *result, zend_ast *ast) /* {{{ */ |