diff options
author | Brandt Bucher <brandtbucher@microsoft.com> | 2023-10-24 13:27:42 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-24 13:27:42 -0700 |
commit | e5168ff3f8abe651d0a96d9e2d49028183e21b15 (patch) | |
tree | 88848e19dfca490bba80f7f712fef2678dfcf5ac /Python/generated_cases.c.h | |
parent | c0ea67dd0d67a8ac59c61c777eae26288d3ac0f6 (diff) | |
download | cpython-e5168ff3f8abe651d0a96d9e2d49028183e21b15.tar.gz cpython-e5168ff3f8abe651d0a96d9e2d49028183e21b15.zip |
GH-109214: _SET_IP before _PUSH_FRAME (but not _POP_FRAME) (GH-111001)
Diffstat (limited to 'Python/generated_cases.c.h')
-rw-r--r-- | Python/generated_cases.c.h | 51 |
1 files changed, 19 insertions, 32 deletions
diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index 6fbe80fe03a..506c02a6f74 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -987,36 +987,28 @@ TARGET(RETURN_VALUE) { PyObject *retval; - // _SAVE_CURRENT_IP - { - TIER_ONE_ONLY - frame->prev_instr = next_instr - 1; - } - // _POP_FRAME retval = stack_pointer[-1]; STACK_SHRINK(1); - { - assert(EMPTY()); - #if TIER_ONE - assert(frame != &entry_frame); - #endif - STORE_SP(); - _Py_LeaveRecursiveCallPy(tstate); - // GH-99729: We need to unlink the frame *before* clearing it: - _PyInterpreterFrame *dying = frame; - frame = tstate->current_frame = dying->previous; - _PyEval_FrameClearAndPop(tstate, dying); - frame->prev_instr += frame->return_offset; - _PyFrame_StackPush(frame, retval); - LOAD_SP(); - LOAD_IP(); - #if LLTRACE && TIER_ONE - lltrace = maybe_lltrace_resume_frame(frame, &entry_frame, GLOBALS()); - if (lltrace < 0) { - goto exit_unwind; - } - #endif + assert(EMPTY()); + #if TIER_ONE + assert(frame != &entry_frame); + #endif + STORE_SP(); + _Py_LeaveRecursiveCallPy(tstate); + // GH-99729: We need to unlink the frame *before* clearing it: + _PyInterpreterFrame *dying = frame; + frame = tstate->current_frame = dying->previous; + _PyEval_FrameClearAndPop(tstate, dying); + frame->prev_instr += frame->return_offset; + _PyFrame_StackPush(frame, retval); + LOAD_SP(); + LOAD_IP(); +#if LLTRACE && TIER_ONE + lltrace = maybe_lltrace_resume_frame(frame, &entry_frame, GLOBALS()); + if (lltrace < 0) { + goto exit_unwind; } +#endif DISPATCH(); } @@ -1049,11 +1041,6 @@ value = GETITEM(FRAME_CO_CONSTS, oparg); Py_INCREF(value); } - // _SAVE_CURRENT_IP - { - TIER_ONE_ONLY - frame->prev_instr = next_instr - 1; - } // _POP_FRAME retval = value; { |