gh-120367: fix bug where compiler detects redundant jump after pseudo op replacement (#120714)

This commit is contained in:
Irit Katriel 2024-06-18 23:09:23 +01:00 committed by GitHub
parent 69058e20e4
commit b7f478948f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 28 additions and 2 deletions

View file

@ -519,7 +519,32 @@ def test_compile_redundant_jumps_and_nops_after_moving_cold_blocks(self):
tree = ast.parse(code)
# make all instructions locations the same to create redundancies
# make all instruction locations the same to create redundancies
for node in ast.walk(tree):
if hasattr(node,"lineno"):
del node.lineno
del node.end_lineno
del node.col_offset
del node.end_col_offset
compile(ast.fix_missing_locations(tree), "<file>", "exec")
def test_compile_redundant_jump_after_convert_pseudo_ops(self):
# See gh-120367
code=textwrap.dedent("""
if name_2:
pass
else:
try:
pass
except:
pass
~name_5
""")
tree = ast.parse(code)
# make all instruction locations the same to create redundancies
for node in ast.walk(tree):
if hasattr(node,"lineno"):
del node.lineno

View file

@ -0,0 +1 @@
Fix bug where compiler creates a redundant jump during pseudo-op replacement. Can only happen with a synthetic AST that has a try on the same line as the instruction following the exception handler.

View file

@ -2389,7 +2389,7 @@ convert_pseudo_ops(cfg_builder *g)
}
}
}
return remove_redundant_nops(g);
return remove_redundant_nops_and_jumps(g);
}
static inline bool