diff options
author | Irit Katriel <1055913+iritkatriel@users.noreply.github.com> | 2022-07-06 06:15:59 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-06 06:15:59 (GMT) |
commit | 50b9a7762f06335277d9962edc8d39498601a4e4 (patch) | |
tree | a10c38e7c473f4c626ef5d15b55ef5aebcd93ee6 /Objects | |
parent | 40d81fd63b46cf998880ce3bf3e5cb42bc3199c1 (diff) | |
download | cpython-50b9a7762f06335277d9962edc8d39498601a4e4.zip cpython-50b9a7762f06335277d9962edc8d39498601a4e4.tar.gz cpython-50b9a7762f06335277d9962edc8d39498601a4e4.tar.bz2 |
gh-94438: in frameobject's mark_stacks switch, the PUSH_EXC_INFO and POP_EXCEPT cases are no longer reachable (GH-94582)
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/frameobject.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/Objects/frameobject.c b/Objects/frameobject.c index 34a6c46..6f4de65 100644 --- a/Objects/frameobject.c +++ b/Objects/frameobject.c @@ -256,10 +256,6 @@ mark_stacks(PyCodeObject *code_obj, int len) stacks[i+1] = next_stack; break; } - case POP_EXCEPT: - next_stack = pop_value(pop_value(pop_value(next_stack))); - stacks[i+1] = next_stack; - break; case SEND: j = get_arg(code, i) + i + 1; assert(j < len); @@ -304,10 +300,16 @@ mark_stacks(PyCodeObject *code_obj, int len) stacks[i+1] = next_stack; break; case PUSH_EXC_INFO: - next_stack = push_value(next_stack, Except); - next_stack = push_value(next_stack, Except); - next_stack = push_value(next_stack, Except); - stacks[i+1] = next_stack; + case POP_EXCEPT: + /* These instructions only appear in exception handlers, which + * skip this switch ever since the move to zero-cost exceptions + * (their stack remains UNINITIALIZED because nothing sets it). + * + * Note that explain_incompatible_stack interprets an + * UNINITIALIZED stack as belonging to an exception handler. + */ + Py_UNREACHABLE(); + break; case RETURN_VALUE: case RAISE_VARARGS: case RERAISE: |