From b29fae0c564bae271f3659563a2a61230dab5def Mon Sep 17 00:00:00 2001 From: Damien George Date: Mon, 2 Sep 2019 13:30:16 +1000 Subject: py/bc: Fix size calculation of UNWIND_JUMP opcode in mp_opcode_format. Prior to this patch mp_opcode_format would calculate the incorrect size of the MP_BC_UNWIND_JUMP opcode, missing the additional byte. But, because opcodes below 0x10 are unused and treated as bytes in the .mpy load/save and freezing code, this bug did not show any symptoms, since nested unwind jumps would rarely (if ever) reach a depth of 16 (so the extra byte of this opcode would be between 0x01 and 0x0f and be correctly loaded/saved/frozen simply as an undefined opcode). This patch fixes this bug by correctly accounting for the additional byte. . --- tests/basics/try_except_break.py | 73 ++++++++++++++++++++++++++++++++++++ tests/basics/try_except_break.py.exp | 3 ++ 2 files changed, 76 insertions(+) create mode 100644 tests/basics/try_except_break.py create mode 100644 tests/basics/try_except_break.py.exp (limited to 'tests') diff --git a/tests/basics/try_except_break.py b/tests/basics/try_except_break.py new file mode 100644 index 000000000..a7683f218 --- /dev/null +++ b/tests/basics/try_except_break.py @@ -0,0 +1,73 @@ +# test deep unwind via break from nested try-except (22 of them) +while True: + print(1) + try: + try: + try: + try: + try: + try: + try: + try: + try: + try: + try: + try: + try: + try: + try: + try: + try: + try: + try: + try: + try: + try: + print(2) + break + print(3) + except: + pass + except: + pass + except: + pass + except: + pass + except: + pass + except: + pass + except: + pass + except: + pass + except: + pass + except: + pass + except: + pass + except: + pass + except: + pass + except: + pass + except: + pass + except: + pass + except: + pass + except: + pass + except: + pass + except: + pass + except: + pass + except: + pass +print(4) diff --git a/tests/basics/try_except_break.py.exp b/tests/basics/try_except_break.py.exp new file mode 100644 index 000000000..e8a01cd98 --- /dev/null +++ b/tests/basics/try_except_break.py.exp @@ -0,0 +1,3 @@ +1 +2 +4 -- cgit v1.2.3