@@ -28,76 +28,78 @@ static void zend_mark_reachable(zend_op *opcodes, zend_cfg *cfg, zend_basic_bloc
28
28
{
29
29
zend_basic_block * blocks = cfg -> blocks ;
30
30
31
- while (1 ) {
32
- int i ;
33
-
34
- b -> flags |= ZEND_BB_REACHABLE ;
35
- if (b -> successors_count == 0 ) {
36
- b -> flags |= ZEND_BB_EXIT ;
37
- return ;
38
- }
31
+ {
32
+ while (1 ) {
33
+ int i ;
34
+
35
+ b -> flags |= ZEND_BB_REACHABLE ;
36
+ if (b -> successors_count == 0 ) {
37
+ b -> flags |= ZEND_BB_EXIT ;
38
+ return ;
39
+ }
39
40
40
- for (i = 0 ; i < b -> successors_count ; i ++ ) {
41
- zend_basic_block * succ = blocks + b -> successors [i ];
41
+ for (i = 0 ; i < b -> successors_count ; i ++ ) {
42
+ zend_basic_block * succ = blocks + b -> successors [i ];
42
43
43
- if (b -> len != 0 ) {
44
- uint8_t opcode = opcodes [b -> start + b -> len - 1 ].opcode ;
45
- if (opcode == ZEND_MATCH ) {
46
- succ -> flags |= ZEND_BB_TARGET ;
47
- } else if (opcode == ZEND_SWITCH_LONG || opcode == ZEND_SWITCH_STRING ) {
48
- if (i == b -> successors_count - 1 ) {
49
- succ -> flags |= ZEND_BB_FOLLOW | ZEND_BB_TARGET ;
50
- } else {
51
- succ -> flags |= ZEND_BB_TARGET ;
52
- }
53
- } else if (b -> successors_count == 1 ) {
54
- if (opcode == ZEND_JMP ) {
44
+ if (b -> len != 0 ) {
45
+ uint8_t opcode = opcodes [b -> start + b -> len - 1 ].opcode ;
46
+ if (opcode == ZEND_MATCH ) {
55
47
succ -> flags |= ZEND_BB_TARGET ;
56
- } else {
57
- succ -> flags |= ZEND_BB_FOLLOW ;
58
-
59
- if ((cfg -> flags & ZEND_CFG_STACKLESS )) {
60
- if (opcode == ZEND_INCLUDE_OR_EVAL ||
61
- opcode == ZEND_GENERATOR_CREATE ||
62
- opcode == ZEND_YIELD ||
63
- opcode == ZEND_YIELD_FROM ||
64
- opcode == ZEND_DO_FCALL ||
65
- opcode == ZEND_DO_UCALL ||
66
- opcode == ZEND_DO_FCALL_BY_NAME ) {
67
- succ -> flags |= ZEND_BB_ENTRY ;
68
- }
48
+ } else if (opcode == ZEND_SWITCH_LONG || opcode == ZEND_SWITCH_STRING ) {
49
+ if (i == b -> successors_count - 1 ) {
50
+ succ -> flags |= ZEND_BB_FOLLOW | ZEND_BB_TARGET ;
51
+ } else {
52
+ succ -> flags |= ZEND_BB_TARGET ;
69
53
}
70
- if ((cfg -> flags & ZEND_CFG_RECV_ENTRY )) {
71
- if (opcode == ZEND_RECV ||
72
- opcode == ZEND_RECV_INIT ) {
73
- succ -> flags |= ZEND_BB_RECV_ENTRY ;
54
+ } else if (b -> successors_count == 1 ) {
55
+ if (opcode == ZEND_JMP ) {
56
+ succ -> flags |= ZEND_BB_TARGET ;
57
+ } else {
58
+ succ -> flags |= ZEND_BB_FOLLOW ;
59
+
60
+ if ((cfg -> flags & ZEND_CFG_STACKLESS )) {
61
+ if (opcode == ZEND_INCLUDE_OR_EVAL ||
62
+ opcode == ZEND_GENERATOR_CREATE ||
63
+ opcode == ZEND_YIELD ||
64
+ opcode == ZEND_YIELD_FROM ||
65
+ opcode == ZEND_DO_FCALL ||
66
+ opcode == ZEND_DO_UCALL ||
67
+ opcode == ZEND_DO_FCALL_BY_NAME ) {
68
+ succ -> flags |= ZEND_BB_ENTRY ;
69
+ }
70
+ }
71
+ if ((cfg -> flags & ZEND_CFG_RECV_ENTRY )) {
72
+ if (opcode == ZEND_RECV ||
73
+ opcode == ZEND_RECV_INIT ) {
74
+ succ -> flags |= ZEND_BB_RECV_ENTRY ;
75
+ }
74
76
}
75
77
}
76
- }
77
- } else {
78
- ZEND_ASSERT (b -> successors_count == 2 );
79
- if (i == 0 ) {
80
- succ -> flags |= ZEND_BB_TARGET ;
81
78
} else {
82
- succ -> flags |= ZEND_BB_FOLLOW ;
79
+ ZEND_ASSERT (b -> successors_count == 2 );
80
+ if (i == 0 ) {
81
+ succ -> flags |= ZEND_BB_TARGET ;
82
+ } else {
83
+ succ -> flags |= ZEND_BB_FOLLOW ;
84
+ }
83
85
}
86
+ } else {
87
+ succ -> flags |= ZEND_BB_FOLLOW ;
84
88
}
85
- } else {
86
- succ -> flags |= ZEND_BB_FOLLOW ;
87
- }
88
89
89
- if (i == b -> successors_count - 1 ) {
90
- /* Tail call optimization */
91
- if (succ -> flags & ZEND_BB_REACHABLE ) {
92
- return ;
93
- }
90
+ if (i == b -> successors_count - 1 ) {
91
+ /* Tail call optimization */
92
+ if (succ -> flags & ZEND_BB_REACHABLE ) {
93
+ return ;
94
+ }
94
95
95
- b = succ ;
96
- break ;
97
- } else {
98
- /* Recursively check reachability */
99
- if (!(succ -> flags & ZEND_BB_REACHABLE )) {
100
- zend_mark_reachable (opcodes , cfg , succ );
96
+ b = succ ;
97
+ break ;
98
+ } else {
99
+ /* Recursively check reachability */
100
+ if (!(succ -> flags & ZEND_BB_REACHABLE )) {
101
+ zend_mark_reachable (opcodes , cfg , succ );
102
+ }
101
103
}
102
104
}
103
105
}
0 commit comments