]> granicus.if.org Git - php/commitdiff
Fixed CFG construction for SWITCH opcodes
authorDmitry Stogov <dmitry@zend.com>
Wed, 3 Apr 2019 00:09:03 +0000 (03:09 +0300)
committerDmitry Stogov <dmitry@zend.com>
Wed, 3 Apr 2019 00:09:03 +0000 (03:09 +0300)
ext/opcache/Optimizer/zend_cfg.c

index e3f60452ef6a2d87fc5572aaf2d52877a6195200..a74d55e82ecd3851c46cd544c7b454bb367b821c 100644 (file)
@@ -74,8 +74,8 @@ static void zend_mark_reachable(zend_op *opcodes, zend_cfg *cfg, zend_basic_bloc
                                        }
                                } else {
                                        ZEND_ASSERT(opcode == ZEND_SWITCH_LONG || opcode == ZEND_SWITCH_STRING);
-                                       if (i == b->successors_count) {
-                                               succ->flags |= ZEND_BB_FOLLOW;
+                                       if (i == b->successors_count - 1) {
+                                               succ->flags |= ZEND_BB_FOLLOW | ZEND_BB_TARGET;
                                        } else {
                                                succ->flags |= ZEND_BB_TARGET;
                                        }