diff options
author | Dmitry Stogov <dmitry@zend.com> | 2015-07-09 17:38:29 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2015-07-09 17:38:29 +0300 |
commit | 54f367ee2a2e4cb7c952b17915c226fdc56038ab (patch) | |
tree | 49aa59bb84f503bce1e6fcdf7fe93f44478085d1 /Zend/zend_opcode.c | |
parent | b77fa94cf912ecbe03728cceede63ae1c863d1b1 (diff) | |
download | php-git-54f367ee2a2e4cb7c952b17915c226fdc56038ab.tar.gz |
Fixed invalid live-range detection
Diffstat (limited to 'Zend/zend_opcode.c')
-rw-r--r-- | Zend/zend_opcode.c | 8 |
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); |