]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.13] gh-120367: fix bug where compiler detects redundant jump after pseudo op repla...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Tue, 18 Jun 2024 22:34:07 +0000 (00:34 +0200)
committerGitHub <noreply@github.com>
Tue, 18 Jun 2024 22:34:07 +0000 (22:34 +0000)
Lib/test/test_compile.py
Misc/NEWS.d/next/Core and Builtins/2024-06-18-21-34-30.gh-issue-120367.zDwffP.rst [new file with mode: 0644]
Python/flowgraph.c

index 417bc8c6a770d8239374a16e1eb36ec9f437b849..6be6155f1db95a50b57834f0b00522efa86521cf 100644 (file)
@@ -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 (file)
index 0000000..087640e
--- /dev/null
@@ -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.
index 17b62b62a85a6a40c8bda13529a19a3325206454..b8d3f066d18540839c34e67e5c034f0168ad65ac 100644 (file)
@@ -2361,7 +2361,7 @@ convert_pseudo_ops(cfg_builder *g)
             }
         }
     }
-    return remove_redundant_nops(g);
+    return remove_redundant_nops_and_jumps(g);
 }
 
 static inline bool