From 2e3ddc14e3c984a39adb7ce6e32c0ab21e26ba23 Mon Sep 17 00:00:00 2001 From: Ken Jin <28750310+Fidget-Spinner@users.noreply.github.com> Date: Sun, 21 Sep 2025 12:50:06 +0100 Subject: [PATCH] Fix double-initialization --- Python/bytecodes.c | 4 ++-- Python/ceval_macros.h | 1 - Python/executor_cases.c.h | 3 +-- Python/optimizer.c | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/Python/bytecodes.c b/Python/bytecodes.c index 8d3464586e29..c1912300bda1 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -5490,8 +5490,8 @@ dummy_func( } _PyExecutorObject *previous_executor = _PyExecutor_FromExit(exit); assert(tstate->current_executor == (PyObject *)previous_executor); - int chain_depth = previous_executor->vm_data.chain_depth + 1; - _PyJIT_InitializeTracing(tstate, frame, target, STACK_LEVEL(), chain_depth); + // Set chain_depth to 0 because we want to keep tracing whatever we see next. + _PyJIT_InitializeTracing(tstate, frame, target, STACK_LEVEL(), 0); GOTO_TIER_ONE(target, 1); } exit->executor = executor; diff --git a/Python/ceval_macros.h b/Python/ceval_macros.h index 0e7e5e81a7f9..48f08868d0b0 100644 --- a/Python/ceval_macros.h +++ b/Python/ceval_macros.h @@ -417,7 +417,6 @@ do { \ if (keep_tracing_bit) { \ assert(next_instr->op.code != ENTER_EXECUTOR); \ ENTER_TRACING(); \ - _PyJIT_InitializeTracing(tstate, frame, next_instr, STACK_LEVEL(), 0); \ } \ else { \ LEAVE_TRACING(); \ diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index efe3c6f52464..a8224df7f55e 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -7589,9 +7589,8 @@ _PyExecutorObject *previous_executor = _PyExecutor_FromExit(exit); stack_pointer = _PyFrame_GetStackPointer(frame); assert(tstate->current_executor == (PyObject *)previous_executor); - int chain_depth = previous_executor->vm_data.chain_depth + 1; _PyFrame_SetStackPointer(frame, stack_pointer); - _PyJIT_InitializeTracing(tstate, frame, target, STACK_LEVEL(), chain_depth); + _PyJIT_InitializeTracing(tstate, frame, target, STACK_LEVEL(), 0); stack_pointer = _PyFrame_GetStackPointer(frame); GOTO_TIER_ONE(target, 1); } diff --git a/Python/optimizer.c b/Python/optimizer.c index f59beda5f8a4..597bc6d2dc1b 100644 --- a/Python/optimizer.c +++ b/Python/optimizer.c @@ -805,7 +805,7 @@ _PyJIT_InitializeTracing(PyThreadState *tstate, _PyInterpreterFrame *frame, _Py_ lltrace = *python_lltrace - '0'; // TODO: Parse an int and all that } DPRINTF(2, - "Optimizing %s (%s:%d) at byte offset %d\n", + "Tracing %s (%s:%d) at byte offset %d\n", PyUnicode_AsUTF8(code->co_qualname), PyUnicode_AsUTF8(code->co_filename), code->co_firstlineno, -- 2.47.3