From 949aaea66ee2bd7171e802a2f1a4fa2efbd03e6c Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sat, 23 Jan 2016 16:27:19 +0100 Subject: [PATCH] Don't insert duplicate predecessors Otherwise we'll get corrupt phis --- ext/opcache/Optimizer/zend_cfg.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ext/opcache/Optimizer/zend_cfg.c b/ext/opcache/Optimizer/zend_cfg.c index a7122319e7..6df4d3c6b8 100644 --- a/ext/opcache/Optimizer/zend_cfg.c +++ b/ext/opcache/Optimizer/zend_cfg.c @@ -535,7 +535,7 @@ int zend_cfg_build_predecessors(zend_arena **arena, zend_cfg *cfg) /* {{{ */ if (b->successors[0] >= 0) { edges++; blocks[b->successors[0]].predecessors_count++; - if (b->successors[1] >= 0) { + if (b->successors[1] >= 0 && b->successors[1] != b->successors[0]) { edges++; blocks[b->successors[1]].predecessors_count++; } @@ -564,7 +564,8 @@ int zend_cfg_build_predecessors(zend_arena **arena, zend_cfg *cfg) /* {{{ */ zend_basic_block *b = blocks + blocks[j].successors[0]; predecessors[b->predecessor_offset + b->predecessors_count] = j; b->predecessors_count++; - if (blocks[j].successors[1] >= 0) { + if (blocks[j].successors[1] >= 0 + && blocks[j].successors[1] != blocks[j].successors[0]) { zend_basic_block *b = blocks + blocks[j].successors[1]; predecessors[b->predecessor_offset + b->predecessors_count] = j; b->predecessors_count++; -- 2.50.1