https://github.com/python/cpython/commit/b7f478948fcf3bf8e62c79ebcb3ff69bf06d9c4d
commit: b7f478948fcf3bf8e62c79ebcb3ff69bf06d9c4d
branch: main
author: Irit Katriel <[email protected]>
committer: iritkatriel <[email protected]>
date: 2024-06-18T22:09:23Z
summary:

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

files:
A Misc/NEWS.d/next/Core and 
Builtins/2024-06-18-21-34-30.gh-issue-120367.zDwffP.rst
M Lib/test/test_compile.py
M Python/flowgraph.c

diff --git a/Lib/test/test_compile.py b/Lib/test/test_compile.py
index 40295236eb7d92..e3e86b89246648 100644
--- a/Lib/test/test_compile.py
+++ b/Lib/test/test_compile.py
@@ -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
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 00000000000000..087640e5400b98
--- /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 6f30dfcd33e0b4..8c1c20a0583c8c 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

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to