Commit 7a6a9735 authored by Benjamin Peterson's avatar Benjamin Peterson

pop the loop block even for infinite while loops (closes #23048)

parent 0bf02c8d
......@@ -551,6 +551,15 @@ def jump_in_nested_finally(output):
jump_in_nested_finally.jump = (4, 9)
jump_in_nested_finally.output = [2, 9]
def jump_infinite_while_loop(output):
output.append(1)
while 1:
output.append(2)
output.append(3)
jump_infinite_while_loop.jump = (3, 4)
jump_infinite_while_loop.output = [1, 3]
# The second set of 'jump' tests are for things that are not allowed:
def no_jump_too_far_forwards(output):
......@@ -723,6 +732,8 @@ class JumpTestCase(unittest.TestCase):
self.run_test(jump_to_same_line)
def test_07_jump_in_nested_finally(self):
self.run_test(jump_in_nested_finally)
def test_jump_infinite_while_loop(self):
self.run_test(jump_infinite_while_loop)
def test_08_no_jump_too_far_forwards(self):
self.run_test(no_jump_too_far_forwards)
def test_09_no_jump_too_far_backwards(self):
......
......@@ -10,6 +10,8 @@ What's New in Python 2.7.10?
Core and Builtins
-----------------
- Issue #23048: Fix jumping out of an infinite while loop in the pdb.
Library
-------
......
......@@ -1716,10 +1716,9 @@ compiler_while(struct compiler *c, stmt_ty s)
if there is no else clause ?
*/
if (constant == -1) {
if (constant == -1)
compiler_use_next_block(c, anchor);
ADDOP(c, POP_BLOCK);
}
ADDOP(c, POP_BLOCK);
compiler_pop_fblock(c, LOOP, loop);
if (orelse != NULL) /* what if orelse is just pass? */
VISIT_SEQ(c, stmt, s->v.While.orelse);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment