Skip to content

Error with break inside nested for loop #323

Open
@ghost

Description

This code fails to decompile under python3.8:

for x in arr_a:
    for y in arr_b:
        var = True
        break

Bytecode:

  1           0 LOAD_NAME                0 (arr_a)
              2 GET_ITER
        >>    4 FOR_ITER                22 (to 28)
              6 STORE_NAME               1 (x)

  2           8 LOAD_NAME                2 (arr_b)
             10 GET_ITER
        >>   12 FOR_ITER                12 (to 26)
             14 STORE_NAME               3 (y)

  3          16 LOAD_CONST               0 (True)
             18 STORE_NAME               4 (var)

  4          20 POP_TOP
             22 JUMP_ABSOLUTE            4
             24 JUMP_ABSOLUTE           12
        >>   26 JUMP_ABSOLUTE            4
        >>   28 LOAD_CONST               1 (None)
             30 RETURN_VALUE

Error:

# uncompyle6 version 3.7.2
# Python bytecode 3.8 (3413)
# Decompiled from: Python 3.8.3 (default, May 14 2020, 11:03:12) 
# [GCC 9.3.0]
# Embedded file name: ./code.py
# Compiled at: 2020-06-29 18:58:01
# Size of source mod 2**32: 69 bytes
Instruction context:
   
 L.   4        20  POP_TOP          
->                22  CONTINUE              4  'to 4'
                  24  JUMP_BACK            12  'to 12'


# file __pycache__/code.cpython-38.pyc
# --- This code section failed: ---

 L.   1         0  LOAD_NAME                arr_a
                2  GET_ITER         
                4  FOR_ITER             28  'to 28'
                6  STORE_NAME               x

 L.   2         8  LOAD_NAME                arr_b
               10  GET_ITER         
               12  FOR_ITER             26  'to 26'
               14  STORE_NAME               y

 L.   3        16  LOAD_CONST               True
               18  STORE_NAME               var

 L.   4        20  POP_TOP          
               22  CONTINUE              4  'to 4'
               24  JUMP_BACK            12  'to 12'
               26  JUMP_BACK             4  'to 4'

Parse error at or near `CONTINUE' instruction at offset 22

This seems to be caused by the 'break' being recognised as a 'continue'?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Control FlowProblem has to do with bad control-flow detectionPython 3.8Volunteer wantedVolunteer wanted to fix if a bug or to implement if a new feature.Works on decompyle3

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions