https://github.com/python/cpython/commit/7fda8b66debb24e0520b94c3769b648c7305f84e
commit: 7fda8b66debb24e0520b94c3769b648c7305f84e
branch: main
author: Ken Jin <[email protected]>
committer: Fidget-Spinner <[email protected]>
date: 2025-08-20T22:53:54+08:00
summary:
gh-137728 gh-137762: Fix bugs in the JIT with many local variables (GH-137764)
files:
A
Misc/NEWS.d/next/Core_and_Builtins/2025-08-14-14-18-29.gh-issue-137728.HdYS9R.rst
M Python/optimizer_analysis.c
M Python/optimizer_symbols.c
diff --git
a/Misc/NEWS.d/next/Core_and_Builtins/2025-08-14-14-18-29.gh-issue-137728.HdYS9R.rst
b/Misc/NEWS.d/next/Core_and_Builtins/2025-08-14-14-18-29.gh-issue-137728.HdYS9R.rst
new file mode 100644
index 00000000000000..cc4a55ddf383ec
--- /dev/null
+++
b/Misc/NEWS.d/next/Core_and_Builtins/2025-08-14-14-18-29.gh-issue-137728.HdYS9R.rst
@@ -0,0 +1 @@
+Fix the JIT's handling of many local variables. This previously caused a
segfault.
diff --git a/Python/optimizer_analysis.c b/Python/optimizer_analysis.c
index dd3e49b83d9971..533d70580e4cc0 100644
--- a/Python/optimizer_analysis.c
+++ b/Python/optimizer_analysis.c
@@ -484,13 +484,10 @@ optimize_uops(
_Py_uop_abstractcontext_init(ctx);
_Py_UOpsAbstractFrame *frame = _Py_uop_frame_new(ctx, co, curr_stacklen,
NULL, 0);
if (frame == NULL) {
- return -1;
+ return 0;
}
ctx->curr_frame_depth++;
ctx->frame = frame;
- ctx->done = false;
- ctx->out_of_space = false;
- ctx->contradiction = false;
_PyUOpInstruction *this_instr = NULL;
for (int i = 0; !ctx->done; i++) {
diff --git a/Python/optimizer_symbols.c b/Python/optimizer_symbols.c
index 8a3df236c80626..8169ce9df5aae6 100644
--- a/Python/optimizer_symbols.c
+++ b/Python/optimizer_symbols.c
@@ -888,6 +888,13 @@ _Py_uop_abstractcontext_init(JitOptContext *ctx)
// Frame setup
ctx->curr_frame_depth = 0;
+
+ // Ctx signals.
+ // Note: this must happen before frame_new, as it might override
+ // the result should frame_new set things to bottom.
+ ctx->done = false;
+ ctx->out_of_space = false;
+ ctx->contradiction = false;
}
int
_______________________________________________
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]