diff options
author | Irit Katriel <1055913+iritkatriel@users.noreply.github.com> | 2024-06-18 22:09:23 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-18 22:09:23 (GMT) |
commit | b7f478948fcf3bf8e62c79ebcb3ff69bf06d9c4d (patch) | |
tree | da69e9ff600ed455583aa9bac028d38ae7598483 | |
parent | 69058e20e420181abdc51094474f590d32cd7174 (diff) | |
download | cpython-b7f478948fcf3bf8e62c79ebcb3ff69bf06d9c4d.zip cpython-b7f478948fcf3bf8e62c79ebcb3ff69bf06d9c4d.tar.gz cpython-b7f478948fcf3bf8e62c79ebcb3ff69bf06d9c4d.tar.bz2 |
gh-120367: fix bug where compiler detects redundant jump after pseudo op replacement (#120714)
-rw-r--r-- | Lib/test/test_compile.py | 27 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Core and Builtins/2024-06-18-21-34-30.gh-issue-120367.zDwffP.rst | 1 | ||||
-rw-r--r-- | Python/flowgraph.c | 2 |
3 files changed, 28 insertions, 2 deletions
diff --git a/Lib/test/test_compile.py b/Lib/test/test_compile.py index 4029523..e3e86b8 100644 --- a/Lib/test/test_compile.py +++ b/Lib/test/test_compile.py @@ -519,7 +519,32 @@ class TestSpecifics(unittest.TestCase): 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 diff --git a/Misc/NEWS.d/next/Core and Builtins/2024-06-18-21-34-30.gh-issue-120367.zDwffP.rst b/Misc/NEWS.d/next/Core and Builtins/2024-06-18-21-34-30.gh-issue-120367.zDwffP.rst new file mode 100644 index 0000000..087640e --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2024-06-18-21-34-30.gh-issue-120367.zDwffP.rst @@ -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. diff --git a/Python/flowgraph.c b/Python/flowgraph.c index 6f30dfc..8c1c20a 100644 --- a/Python/flowgraph.c +++ b/Python/flowgraph.c @@ -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 |