classification
Title: abort when jumping out of a loop
Type: crash Stage: resolved
Components: Interpreter Core Versions: Python 3.5
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: benjamin.peterson Nosy List: benjamin.peterson, python-dev, rhettinger, xdegaye
Priority: normal Keywords:

Created on 2014-12-13 11:34 by xdegaye, last changed 2014-12-14 10:15 by xdegaye. This issue is now closed.

Messages (4)
msg232604 - (view) Author: Xavier de Gaye (xdegaye) * (Python committer) Date: 2014-12-13 11:34
With the following jump.py script:
def foo():
    import pdb; pdb.set_trace()
    while 1:
        pass
    return # this is line 5

foo()


The following debugging session aborts on Python 3.5.0a0 (default:334c01aa7f93, Dec  3 2014, 16:20:19):
$ python jump.py
> /tmp/test/jump.py(3)foo()
-> while 1:
(Pdb) next
> /tmp/test/jump.py(4)foo()
-> pass
(Pdb) jump 5
python: Objects/frameobject.c:258: frame_setlineno: Assertion `blockstack_top == 0' failed.
Aborted (core dumped)
msg232614 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2014-12-13 17:42
Building on OS X 10.10 with the head of the code tree (as of today), I cannot reproduce this.  Also the disassembly looks fine:

$ python3.5 jump.py 
> /Users/raymond/tmp/jump.py(3)foo()
-> while 1:
(Pdb) next
> /Users/raymond/tmp/jump.py(4)foo()
-> pass
(Pdb) jump 5
> /Users/raymond/tmp/jump.py(5)foo()
-> return # this is line 5
(Pdb) list
  1  	def foo():
  2  	    import pdb; pdb.set_trace()
  3  	    while 1:
  4  	        pass
  5  ->	    return # this is line 5
  6  	
  7  	foo()
  8  	
[EOF]
(Pdb) !from dis import dis
(Pdb) !dis(foo)
  2           0 LOAD_CONST               1 (0)
              3 LOAD_CONST               0 (None)
              6 IMPORT_NAME              0 (pdb)
              9 STORE_FAST               0 (pdb)
             12 LOAD_FAST                0 (pdb)
             15 LOAD_ATTR                1 (set_trace)
             18 CALL_FUNCTION            0 (0 positional, 0 keyword pair)
             21 POP_TOP

  3          22 SETUP_LOOP               3 (to 28)

  4     >>   25 JUMP_ABSOLUTE           25

  5     >>   28 LOAD_CONST               0 (None)
             31 RETURN_VALUE
(Pdb) !import sys
(Pdb) p sys.version_info
sys.version_info(major=3, minor=5, micro=0, releaselevel='alpha', serial=0)
msg232622 - (view) Author: Roundup Robot (python-dev) Date: 2014-12-13 21:08
New changeset 09f938915c6f by Benjamin Peterson in branch '3.4':
pop the loop block even for infinite while loops (closes #23048)
https://hg.python.org/cpython/rev/09f938915c6f

New changeset baa5258bef22 by Benjamin Peterson in branch '2.7':
pop the loop block even for infinite while loops (closes #23048)
https://hg.python.org/cpython/rev/baa5258bef22

New changeset ec96ffa6aa95 by Benjamin Peterson in branch 'default':
merge 3.4 (#23048)
https://hg.python.org/cpython/rev/ec96ffa6aa95
msg232635 - (view) Author: Xavier de Gaye (xdegaye) * (Python committer) Date: 2014-12-14 10:15
> Building on OS X 10.10 with the head of the code tree (as of today), I cannot reproduce this.  Also the disassembly looks fine:

I should have mentionned that I am running a debug build of python.
History
Date User Action Args
2014-12-14 10:15:18xdegayesetmessages: + msg232635
2014-12-13 21:08:30python-devsetstatus: open -> closed

nosy: + python-dev
messages: + msg232622

resolution: fixed
stage: resolved
2014-12-13 21:08:22benjamin.petersonsetassignee: benjamin.peterson

nosy: + benjamin.peterson
2014-12-13 17:42:57rhettingersetnosy: + rhettinger
messages: + msg232614
2014-12-13 11:34:33xdegayecreate