From ab5869400ba5fda3d9718d63f925a513878f0abd Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Mon, 15 Feb 2016 14:38:20 +0800 Subject: [PATCH] Fixed another assertion fails due to live_range cleaned (ext/phar/tests/003a.phpt) --- ext/opcache/Optimizer/block_pass.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/ext/opcache/Optimizer/block_pass.c b/ext/opcache/Optimizer/block_pass.c index 14bf84ef7b..df99eb5e99 100644 --- a/ext/opcache/Optimizer/block_pass.c +++ b/ext/opcache/Optimizer/block_pass.c @@ -954,17 +954,20 @@ static void assemble_code_blocks(zend_cfg *cfg, zend_op_array *op_array) } if (i != j) { - zend_op *opline = new_opcodes; - zend_op *end = opline + len; - - op_array->last_live_range = j; - while (opline != end) { - if ((opline->opcode == ZEND_FREE || opline->opcode == ZEND_FE_FREE) && - opline->extended_value == ZEND_FREE_ON_RETURN) { - ZEND_ASSERT(opline->op2.num < (uint32_t) i); - opline->op2.num = map[opline->op2.num]; + if ((op_array->last_live_range = j)) { + zend_op *opline = new_opcodes; + zend_op *end = opline + len; + while (opline != end) { + if ((opline->opcode == ZEND_FREE || opline->opcode == ZEND_FE_FREE) && + opline->extended_value == ZEND_FREE_ON_RETURN) { + ZEND_ASSERT(opline->op2.num < (uint32_t) i); + opline->op2.num = map[opline->op2.num]; + } + opline++; } - opline++; + } else { + efree(op_array->live_range); + op_array->live_range = NULL; } } free_alloca(map, use_heap); -- 2.50.1