summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXinchen Hui <laruence@gmail.com>2017-04-17 20:27:07 +0800
committerXinchen Hui <laruence@gmail.com>2017-04-17 20:27:07 +0800
commit0a27a5ba8ce17aae3957c0efa223a82e4d6e41cf (patch)
tree4898330dcfb84cee71fc6d2607e75c631141daf9
parentd6315c2fbb46ea8795d2158e32c32f4111e805c1 (diff)
parentabf16c18c77815b310af9528106d0c76eb8a81ab (diff)
downloadphp-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.c5
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]);