diff options
author | Xinchen Hui <laruence@gmail.com> | 2017-04-17 20:27:07 +0800 |
---|---|---|
committer | Xinchen Hui <laruence@gmail.com> | 2017-04-17 20:27:07 +0800 |
commit | 0a27a5ba8ce17aae3957c0efa223a82e4d6e41cf (patch) | |
tree | 4898330dcfb84cee71fc6d2607e75c631141daf9 | |
parent | d6315c2fbb46ea8795d2158e32c32f4111e805c1 (diff) | |
parent | abf16c18c77815b310af9528106d0c76eb8a81ab (diff) | |
download | php-git-0a27a5ba8ce17aae3957c0efa223a82e4d6e41cf.tar.gz |
Merge branch 'PHP-7.1' of git.php.net:/php-src into PHP-7.1
* 'PHP-7.1' of git.php.net:/php-src:
Fix loop identification
-rw-r--r-- | ext/opcache/Optimizer/zend_cfg.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/ext/opcache/Optimizer/zend_cfg.c b/ext/opcache/Optimizer/zend_cfg.c index 1e9bfe47bc..ec7116691e 100644 --- a/ext/opcache/Optimizer/zend_cfg.c +++ b/ext/opcache/Optimizer/zend_cfg.c @@ -855,7 +855,10 @@ int zend_cfg_identify_loops(const zend_op_array *op_array, zend_cfg *cfg, uint32 } while (zend_worklist_len(&work)) { j = zend_worklist_pop(&work); - if (blocks[j].loop_header < 0 && j != i) { + while (blocks[j].loop_header >= 0) { + j = blocks[j].loop_header; + } + if (j != i) { blocks[j].loop_header = i; for (k = 0; k < blocks[j].predecessors_count; k++) { zend_worklist_push(&work, cfg->predecessors[blocks[j].predecessor_offset + k]); |