for (j = 0; j < cfg->blocks_count; j++) {
if (blocks[j].flags & ZEND_BB_REACHABLE) {
+ /* SWITCH_STRING/LONG may have few identical successors */
for (s = 0; s < blocks[j].successors_count; s++) {
- /* SWITCH_STRING/LONG may have few following identical successors */
- if (s == 0 || blocks[j].successors[s-1] != blocks[j].successors[s]) {
+ int duplicate = 0;
+ int p;
+
+ for (p = 0; p < s; p++) {
+ if (blocks[j].successors[p] == blocks[j].successors[s]) {
+ duplicate = 1;
+ break;
+ }
+ }
+ if (!duplicate) {
zend_basic_block *b = blocks + blocks[j].successors[s];
predecessors[b->predecessor_offset + b->predecessors_count] = j;