diff options
| author | Nikita Popov <nikic@php.net> | 2016-09-09 15:58:36 +0200 |
|---|---|---|
| committer | Nikita Popov <nikic@php.net> | 2016-09-09 15:58:36 +0200 |
| commit | bbcf77c309c8bcdf4a9b413b9286a0649071a457 (patch) | |
| tree | 7f565a045380b525df5d90b6e7298099ad46a70a | |
| parent | 1a30a7a4222c255f96258328e175f4cbd807a4e0 (diff) | |
| download | php-git-bbcf77c309c8bcdf4a9b413b9286a0649071a457.tar.gz | |
Fix some block_pass bugs
| -rw-r--r-- | ext/opcache/Optimizer/block_pass.c | 9 |
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; |
