diff options
author | Irit Katriel <1055913+iritkatriel@users.noreply.github.com> | 2023-09-25 18:25:05 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-25 18:25:05 (GMT) |
commit | d73c12b88c2275fd44e27c91c24f3ac85419d2b8 (patch) | |
tree | 99657f07dc9aa2fd8070d8bf73644ff557ee72e6 /Python | |
parent | 88a6137cdb81c80440d9d1ee7dee17ea0b820f11 (diff) | |
download | cpython-d73c12b88c2275fd44e27c91c24f3ac85419d2b8.zip cpython-d73c12b88c2275fd44e27c91c24f3ac85419d2b8.tar.gz cpython-d73c12b88c2275fd44e27c91c24f3ac85419d2b8.tar.bz2 |
gh-109823: Adjust labels in compiler when removing an empty basic block which is a jump target (#109839)
Diffstat (limited to 'Python')
-rw-r--r-- | Python/flowgraph.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/Python/flowgraph.c b/Python/flowgraph.c index adfcef3..9c24264 100644 --- a/Python/flowgraph.c +++ b/Python/flowgraph.c @@ -960,6 +960,7 @@ eliminate_empty_basic_blocks(cfg_builder *g) { while(g->g_entryblock && g->g_entryblock->b_iused == 0) { g->g_entryblock = g->g_entryblock->b_next; } + int next_lbl = get_max_label(g->g_entryblock) + 1; for (basicblock *b = g->g_entryblock; b != NULL; b = b->b_next) { assert(b->b_iused > 0); for (int i = 0; i < b->b_iused; i++) { @@ -969,7 +970,13 @@ eliminate_empty_basic_blocks(cfg_builder *g) { while (target->b_iused == 0) { target = target->b_next; } - instr->i_target = target; + if (instr->i_target != target) { + if (!IS_LABEL(target->b_label)) { + target->b_label.id = next_lbl++; + } + instr->i_target = target; + instr->i_oparg = target->b_label.id; + } assert(instr->i_target && instr->i_target->b_iused > 0); } } |