summaryrefslogtreecommitdiff
path: root/ext/opcache/Optimizer/zend_cfg.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/opcache/Optimizer/zend_cfg.c')
-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]);