Repository navigation
Error handling of RERAISE is strange #122759
Copy link
Copy link
Closed
Labels
interpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)type-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
Bug report
There's a strange pattern used in RERAISE opcode:
Lines 1174 to 1189 in 4767a6e
| tier1 inst(RERAISE, (values[oparg], exc_st -- values[oparg])) { | |
| PyObject *exc = PyStackRef_AsPyObjectBorrow(exc_st); | |
| assert(oparg >= 0 && oparg <= 2); | |
| if (oparg) { | |
| PyObject *lasti = PyStackRef_AsPyObjectBorrow(values[0]); | |
| if (PyLong_Check(lasti)) { | |
| frame->instr_ptr = _PyCode_CODE(_PyFrame_GetCode(frame)) + PyLong_AsLong(lasti); | |
| assert(!_PyErr_Occurred(tstate)); | |
| } | |
| else { | |
| assert(PyLong_Check(lasti)); | |
| _PyErr_SetString(tstate, PyExc_SystemError, "lasti is not an int"); | |
| ERROR_NO_POP(); | |
| } | |
| } |
Especially these lines:
Lines 1180 to 1187 in 4767a6e
| if (PyLong_Check(lasti)) { | |
| frame->instr_ptr = _PyCode_CODE(_PyFrame_GetCode(frame)) + PyLong_AsLong(lasti); | |
| assert(!_PyErr_Occurred(tstate)); | |
| } | |
| else { | |
| assert(PyLong_Check(lasti)); | |
| _PyErr_SetString(tstate, PyExc_SystemError, "lasti is not an int"); | |
| ERROR_NO_POP(); |
It looks like the assert call is not needed here:
- In debug builds it will always crash, since
PyLong_Check(lasti)will always be false - In non-debug builds it will set
SystemErroras it should be (at least, I think so). That's the only line that matchesr'assert\(.*\);\n\s+_PyErr'
I have a PR ready.
Linked PRs
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
interpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)type-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Activity
pythongh-122759: Remove `assert` from `RERAISE` error handling
gh-122759: Remove `assert` from `RERAISE` error handling (#122760)
hugovk commentedon Aug 8, 2024
Triage: closing because the linked PR is merged, please re-open if still needed.
pythongh-122759: Remove `assert` from `RERAISE` error handling (pytho…