bpo-44570: Fix line tracing for forward jumps to duplicated tails (GH-27067)
diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py
index cdd427a..63afb81 100644
--- a/Lib/test/test_pdb.py
+++ b/Lib/test/test_pdb.py
@@ -1316,8 +1316,8 @@ def test_pdb_issue_20766():
-> print('pdb %d: %s' % (i, sess._previous_sigint_handler))
(Pdb) continue
pdb 1: <built-in function default_int_handler>
- > <doctest test.test_pdb.test_pdb_issue_20766[0]>(5)test_function()
- -> sess.set_trace(sys._getframe())
+ > <doctest test.test_pdb.test_pdb_issue_20766[0]>(6)test_function()
+ -> print('pdb %d: %s' % (i, sess._previous_sigint_handler))
(Pdb) continue
pdb 2: <built-in function default_int_handler>
"""
diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py
index 0174f80..09d0adc 100644
--- a/Lib/test/test_sys_settrace.py
+++ b/Lib/test/test_sys_settrace.py
@@ -1041,6 +1041,41 @@ def func_return():
(-8, 'return'),
(1, 'return')])
+ def test_flow_converges_on_same_line(self):
+
+ def foo(x):
+ if x:
+ try:
+ 1/(x - 1)
+ except ZeroDivisionError:
+ pass
+ return x
+
+ def func():
+ for i in range(2):
+ foo(i)
+
+ self.run_and_compare(func,
+ [(0, 'call'),
+ (1, 'line'),
+ (2, 'line'),
+ (-8, 'call'),
+ (-7, 'line'),
+ (-2, 'line'),
+ (-2, 'return'),
+ (1, 'line'),
+ (2, 'line'),
+ (-8, 'call'),
+ (-7, 'line'),
+ (-6, 'line'),
+ (-5, 'line'),
+ (-5, 'exception'),
+ (-4, 'line'),
+ (-3, 'line'),
+ (-2, 'line'),
+ (-2, 'return'),
+ (1, 'line'),
+ (1, 'return')])
class SkipLineEventsTraceTestCase(TraceTestCase):
"""Repeat the trace tests, but with per-line events skipped"""