summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2013-11-26 21:00:00 +0400
committerDmitry Stogov <dmitry@zend.com>2013-11-26 21:00:00 +0400
commitd79dd9cc1cab03aecf6d3f6ec243bc15aa353234 (patch)
treeeb9ce96c5ce7c14fd5dffd87c4cb2487a52cd351
parent27524b52b5c051c61d8197142b29a8aafefc82bd (diff)
downloadphp-git-d79dd9cc1cab03aecf6d3f6ec243bc15aa353234.tar.gz
Fixed bug #66176 (Invalid constant substitution)
-rw-r--r--ext/opcache/Optimizer/block_pass.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/ext/opcache/Optimizer/block_pass.c b/ext/opcache/Optimizer/block_pass.c
index 35d2ce18b5..8c4c58e493 100644
--- a/ext/opcache/Optimizer/block_pass.c
+++ b/ext/opcache/Optimizer/block_pass.c
@@ -643,8 +643,11 @@ static void zend_optimize_block(zend_code_block *block, zend_op_array *op_array,
opline->opcode != ZEND_FREE
) {
zend_op *src = VAR_SOURCE(opline->op1);
+ zval c = ZEND_OP1_LITERAL(src);
VAR_UNSET(opline->op1);
- update_op1_const(op_array, opline, &ZEND_OP1_LITERAL(src) TSRMLS_CC);
+ zval_copy_ctor(&c);
+ update_op1_const(op_array, opline, &c TSRMLS_CC);
+ literal_dtor(&ZEND_OP1_LITERAL(src));
MAKE_NOP(src);
}
@@ -654,8 +657,11 @@ static void zend_optimize_block(zend_code_block *block, zend_op_array *op_array,
VAR_SOURCE(opline->op2)->opcode == ZEND_QM_ASSIGN &&
ZEND_OP1_TYPE(VAR_SOURCE(opline->op2)) == IS_CONST) {
zend_op *src = VAR_SOURCE(opline->op2);
+ zval c = ZEND_OP1_LITERAL(src);
VAR_UNSET(opline->op2);
- update_op2_const(op_array, opline, &ZEND_OP1_LITERAL(src) TSRMLS_CC);
+ zval_copy_ctor(&c);
+ update_op2_const(op_array, opline, &c TSRMLS_CC);
+ literal_dtor(&ZEND_OP1_LITERAL(src));
MAKE_NOP(src);
}