From bbcf77c309c8bcdf4a9b413b9286a0649071a457 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 9 Sep 2016 15:58:36 +0200 Subject: [PATCH] Fix some block_pass bugs --- ext/opcache/Optimizer/block_pass.c | 9 +++++---- 1 file 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; -- 2.50.1