mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
[3.13] gh-124871: fix 'visited' tracking in compiler's reachability analysis (GH-124952) (#124977)
gh-124871: fix 'visited' tracking in compiler's reachability analysis (GH-124952)
(cherry picked from commit f474391b26
)
Co-authored-by: Irit Katriel <1055913+iritkatriel@users.noreply.github.com>
This commit is contained in:
parent
dd4e62e35f
commit
b87aea6b0d
3 changed files with 18 additions and 2 deletions
|
@ -960,13 +960,14 @@ remove_unreachable(basicblock *entryblock) {
|
|||
basicblock **sp = stack;
|
||||
entryblock->b_predecessors = 1;
|
||||
*sp++ = entryblock;
|
||||
entryblock->b_visited = 1;
|
||||
while (sp > stack) {
|
||||
basicblock *b = *(--sp);
|
||||
b->b_visited = 1;
|
||||
if (b->b_next && BB_HAS_FALLTHROUGH(b)) {
|
||||
if (!b->b_next->b_visited) {
|
||||
assert(b->b_next->b_predecessors == 0);
|
||||
*sp++ = b->b_next;
|
||||
b->b_next->b_visited = 1;
|
||||
}
|
||||
b->b_next->b_predecessors++;
|
||||
}
|
||||
|
@ -976,8 +977,8 @@ remove_unreachable(basicblock *entryblock) {
|
|||
if (is_jump(instr) || is_block_push(instr)) {
|
||||
target = instr->i_target;
|
||||
if (!target->b_visited) {
|
||||
assert(target->b_predecessors == 0 || target == b->b_next);
|
||||
*sp++ = target;
|
||||
target->b_visited = 1;
|
||||
}
|
||||
target->b_predecessors++;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue