From: Nikita Popov Date: Fri, 9 Sep 2016 13:58:36 +0000 (+0200) Subject: Fix some block_pass bugs X-Git-Tag: php-7.1.0RC2~40^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bbcf77c309c8bcdf4a9b413b9286a0649071a457;p=php Fix some block_pass bugs --- 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;