]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-137728 gh-137762: Fix bugs in the JIT with many local variables (GH-137764)
authorKen Jin <kenjin@python.org>
Wed, 20 Aug 2025 14:53:54 +0000 (22:53 +0800)
committerGitHub <noreply@github.com>
Wed, 20 Aug 2025 14:53:54 +0000 (22:53 +0800)
Misc/NEWS.d/next/Core_and_Builtins/2025-08-14-14-18-29.gh-issue-137728.HdYS9R.rst [new file with mode: 0644]
Python/optimizer_analysis.c
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 (file)
index 0000000..cc4a55d
--- /dev/null
@@ -0,0 +1 @@
+Fix the JIT's handling of many local variables. This previously caused a segfault.
index dd3e49b83d99718dd4473d50ecb3d9ba0086bbeb..533d70580e4cc01a0873ba17cc2bcc2ebdae0e40 100644 (file)
@@ -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++) {
index 8a3df236c806269d0ca8f7e19b1fafb96604c197..8169ce9df5aae64ed5afffc4f46b8c6d3ba1a134 100644 (file)
@@ -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