Inada Naoki <songofaca...@gmail.com> added the comment:
I confirmed the issue. The simple version of the reproducer is: ``` def callee(): raise Exception def caller(): try: callee() except Exception or Exception: pass caller() ``` I can see assertion failure consisntently, when I use python --with-pydebug. It seems peephole bug. Without peephole: ``` 7 >> 12 DUP_TOP 14 LOAD_GLOBAL 1 (Exception) 16 JUMP_IF_TRUE_OR_POP 20 18 LOAD_GLOBAL 1 (Exception) >> 20 JUMP_IF_NOT_EXC_MATCH 32 22 POP_TOP 24 POP_TOP 26 POP_TOP 8 28 POP_EXCEPT 30 JUMP_FORWARD 2 (to 34) >> 32 RERAISE >> 34 LOAD_CONST 0 (None) 36 RETURN_VALUE ``` And with peephole: ``` 7 >> 12 DUP_TOP 14 LOAD_GLOBAL 1 (Exception) 16 POP_JUMP_IF_TRUE 22 18 LOAD_GLOBAL 1 (Exception) 20 JUMP_IF_NOT_EXC_MATCH 32 >> 22 POP_TOP 24 POP_TOP 26 POP_TOP 8 28 POP_EXCEPT 30 JUMP_FORWARD 2 (to 34) >> 32 RERAISE >> 34 LOAD_CONST 0 (None) 36 RETURN_VALUE ``` JUMP_IF_TRUE_OR_POP is converted into POP_JUMP_IF_TRUE. Exception is popped although JUMP_IF_NOT_EXC_MATCH needs it. ---------- nosy: +methane _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue42057> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com