From: Nikita Popov Date: Sat, 23 Jan 2016 15:27:19 +0000 (+0100) Subject: Don't insert duplicate predecessors X-Git-Tag: php-7.2.0alpha1~620^2~78 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=949aaea66ee2bd7171e802a2f1a4fa2efbd03e6c;p=php Don't insert duplicate predecessors Otherwise we'll get corrupt phis --- 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++;