]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-142543: Mark tracer functions as Py_NO_INLINE (GH-142846)
authorKen Jin <kenjin@python.org>
Wed, 17 Dec 2025 00:12:32 +0000 (08:12 +0800)
committerGitHub <noreply@github.com>
Wed, 17 Dec 2025 00:12:32 +0000 (00:12 +0000)
Misc/NEWS.d/next/Core_and_Builtins/2025-12-16-23-26-41.gh-issue-142543.wJKjBs.rst [new file with mode: 0644]
Python/optimizer.c

diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2025-12-16-23-26-41.gh-issue-142543.wJKjBs.rst b/Misc/NEWS.d/next/Core_and_Builtins/2025-12-16-23-26-41.gh-issue-142543.wJKjBs.rst
new file mode 100644 (file)
index 0000000..0897127
--- /dev/null
@@ -0,0 +1 @@
+Fix a stack overflow on Clang JIT build configurations with full LTO.
index b215e43128fa2cf53db0f308c284b3eb65a9eee9..18f54f9bc23476edfaea6a0e1d239ebef082de45 100644 (file)
@@ -582,7 +582,8 @@ is_terminator(const _PyUOpInstruction *uop)
 
 /* Returns 1 on success (added to trace), 0 on trace end.
  */
-int
+// gh-142543: inlining this function causes stack overflows
+Py_NO_INLINE int
 _PyJit_translate_single_bytecode_to_trace(
     PyThreadState *tstate,
     _PyInterpreterFrame *frame,
@@ -994,7 +995,8 @@ full:
 }
 
 // Returns 0 for do not enter tracing, 1 on enter tracing.
-int
+// gh-142543: inlining this function causes stack overflows
+Py_NO_INLINE int
 _PyJit_TryInitializeTracing(
     PyThreadState *tstate, _PyInterpreterFrame *frame, _Py_CODEUNIT *curr_instr,
     _Py_CODEUNIT *start_instr, _Py_CODEUNIT *close_loop_instr, int curr_stackdepth, int chain_depth,
@@ -1066,7 +1068,7 @@ _PyJit_TryInitializeTracing(
     return 1;
 }
 
-void
+Py_NO_INLINE void
 _PyJit_FinalizeTracing(PyThreadState *tstate)
 {
     _PyThreadStateImpl *_tstate = (_PyThreadStateImpl *)tstate;