summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikic@php.net>2016-09-09 15:58:36 +0200
committerNikita Popov <nikic@php.net>2016-09-09 15:58:36 +0200
commitbbcf77c309c8bcdf4a9b413b9286a0649071a457 (patch)
tree7f565a045380b525df5d90b6e7298099ad46a70a
parent1a30a7a4222c255f96258328e175f4cbd807a4e0 (diff)
downloadphp-git-bbcf77c309c8bcdf4a9b413b9286a0649071a457.tar.gz
Fix some block_pass bugs
-rw-r--r--ext/opcache/Optimizer/block_pass.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/ext/opcache/Optimizer/block_pass.c b/ext/opcache/Optimizer/block_pass.c
index 4b532c4b20..710d7bc9b2 100644
--- a/ext/opcache/Optimizer/block_pass.c
+++ b/ext/opcache/Optimizer/block_pass.c
@@ -1060,7 +1060,7 @@ static void zend_optimize_block(zend_code_block *block, zend_op_array *op_array,
literal_dtor(&ZEND_OP1_LITERAL(opline));
} else {
/* BOOL */
- result = ZEND_OP1_LITERAL(opline);
+ ZVAL_COPY_VALUE(&result, &ZEND_OP1_LITERAL(opline));
convert_to_boolean(&result);
ZVAL_NULL(&ZEND_OP1_LITERAL(opline));
}
@@ -1921,11 +1921,12 @@ static void zend_t_usage(zend_code_block *block, zend_op_array *op_array, zend_b
case ZEND_QM_ASSIGN:
case ZEND_BOOL:
case ZEND_BOOL_NOT:
- if (ZEND_OP1_TYPE(opline) == IS_CONST) {
- literal_dtor(&ZEND_OP1_LITERAL(opline));
- } else if (ZEND_OP1_TYPE(opline) == IS_TMP_VAR) {
+ if (ZEND_OP1_TYPE(opline) == IS_TMP_VAR) {
opline->opcode = ZEND_FREE;
} else {
+ if (ZEND_OP1_TYPE(opline) == IS_CONST) {
+ literal_dtor(&ZEND_OP1_LITERAL(opline));
+ }
MAKE_NOP(opline);
}
break;