https://github.com/python/cpython/commit/2ea67caf31453c1755bb5a5c21c5e9477d085deb
commit: 2ea67caf31453c1755bb5a5c21c5e9477d085deb
branch: main
author: Sergey Miryanov <[email protected]>
committer: Fidget-Spinner <[email protected]>
date: 2025-11-26T14:32:30Z
summary:
GH-141861: Fix TRACE_RECORD if full (GH-141959)
files:
M Lib/test/test_sys.py
M Python/bytecodes.c
M Python/generated_cases.c.h
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
index 2e87e38fe5dfdc..04018e9603ff13 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -2254,7 +2254,7 @@ def frame_3_jit() -> None:
# 1 extra iteration for tracing.
for i in range(_testinternalcapi.TIER2_THRESHOLD + 2):
# Careful, doing this in the reverse order breaks tracing:
- expected = {enabled} and i >=
_testinternalcapi.TIER2_THRESHOLD + 1
+ expected = {enabled} and i >=
_testinternalcapi.TIER2_THRESHOLD
assert sys._jit.is_active() is expected
frame_2_jit(expected)
assert sys._jit.is_active() is expected
diff --git a/Python/bytecodes.c b/Python/bytecodes.c
index 6129ea2e723273..01cd1e8359815a 100644
--- a/Python/bytecodes.c
+++ b/Python/bytecodes.c
@@ -3018,7 +3018,7 @@ dummy_func(
goto stop_tracing;
}
PyCodeObject *code = _PyFrame_GetCode(frame);
- _PyExecutorObject *executor =
code->co_executors->executors[this_instr->op.arg];
+ _PyExecutorObject *executor = code->co_executors->executors[oparg
& 255];
assert(executor->vm_data.index == INSTR_OFFSET() - 1);
assert(executor->vm_data.code == code);
assert(executor->vm_data.valid);
@@ -5650,7 +5650,7 @@ dummy_func(
LEAVE_TRACING();
int err = stop_tracing_and_jit(tstate, frame);
ERROR_IF(err < 0);
- DISPATCH_GOTO_NON_TRACING();
+ DISPATCH();
}
// Super instructions. Instruction deopted. There's a mismatch in
what the stack expects
// in the optimizer. So we have to reflect in the trace correctly.
diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h
index 47805c270f9a0e..57d5e71144d38c 100644
--- a/Python/generated_cases.c.h
+++ b/Python/generated_cases.c.h
@@ -5476,7 +5476,7 @@
JUMP_TO_LABEL(stop_tracing);
}
PyCodeObject *code = _PyFrame_GetCode(frame);
- _PyExecutorObject *executor =
code->co_executors->executors[this_instr->op.arg];
+ _PyExecutorObject *executor = code->co_executors->executors[oparg
& 255];
assert(executor->vm_data.index == INSTR_OFFSET() - 1);
assert(executor->vm_data.code == code);
assert(executor->vm_data.valid);
@@ -11714,7 +11714,7 @@
if (err < 0) {
JUMP_TO_LABEL(error);
}
- DISPATCH_GOTO_NON_TRACING();
+ DISPATCH();
}
_PyThreadStateImpl *_tstate = (_PyThreadStateImpl *)tstate;
if ((_tstate->jit_tracer_state.prev_state.instr->op.code ==
CALL_LIST_APPEND &&
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]