summaryrefslogtreecommitdiff
path: root/Zend/zend_opcode.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2015-07-09 17:38:29 +0300
committerDmitry Stogov <dmitry@zend.com>2015-07-09 17:38:29 +0300
commit54f367ee2a2e4cb7c952b17915c226fdc56038ab (patch)
tree49aa59bb84f503bce1e6fcdf7fe93f44478085d1 /Zend/zend_opcode.c
parentb77fa94cf912ecbe03728cceede63ae1c863d1b1 (diff)
downloadphp-git-54f367ee2a2e4cb7c952b17915c226fdc56038ab.tar.gz
Fixed invalid live-range detection
Diffstat (limited to 'Zend/zend_opcode.c')
-rw-r--r--Zend/zend_opcode.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/Zend/zend_opcode.c b/Zend/zend_opcode.c
index ae2b4bf353..64ba6562ff 100644
--- a/Zend/zend_opcode.c
+++ b/Zend/zend_opcode.c
@@ -991,7 +991,11 @@ static zend_always_inline uint32_t *generate_var_liveliness_info_ex(zend_op_arra
&& opline->opcode != ZEND_FETCH_LIST
&& opline->opcode != ZEND_CASE
&& opline->opcode != ZEND_FE_FETCH_R
- && opline->opcode != ZEND_FE_FETCH_RW) {
+ && opline->opcode != ZEND_FE_FETCH_RW
+ /* the following opcodes are not the "final" */
+ && (opline->opcode != ZEND_FREE || !(opline->extended_value & ZEND_FREE_ON_RETURN))
+ && (opline->opcode != ZEND_FE_FREE || !(opline->extended_value & ZEND_FREE_ON_RETURN))
+ ) {
op_live_total += liveliness_kill_var(op_array, opline, var, Tstart, opTs);
}
}
@@ -1007,7 +1011,7 @@ static zend_always_inline uint32_t *generate_var_liveliness_info_ex(zend_op_arra
}
} while (++opline != end);
-#if ZEND_DEBUG
+#if 0
/* Check that all TMP variable live-ranges are closed */
for (i = 0; i < op_array->T; i++) {
ZEND_ASSERT(Tstart[i] == (uint32_t)-1);