diff options
Diffstat (limited to 'ext/opcache/Optimizer/zend_cfg.c')
-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]); |