From 89729f2ef7f9473d9e4b898b2ed49a065a67f450 Mon Sep 17 00:00:00 2001 From: Ken Jin Date: Wed, 17 Dec 2025 08:12:32 +0800 Subject: [PATCH] gh-142543: Mark tracer functions as Py_NO_INLINE (GH-142846) --- .../2025-12-16-23-26-41.gh-issue-142543.wJKjBs.rst | 1 + Python/optimizer.c | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2025-12-16-23-26-41.gh-issue-142543.wJKjBs.rst 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 index 000000000000..0897127fec74 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2025-12-16-23-26-41.gh-issue-142543.wJKjBs.rst @@ -0,0 +1 @@ +Fix a stack overflow on Clang JIT build configurations with full LTO. diff --git a/Python/optimizer.c b/Python/optimizer.c index b215e43128fa..18f54f9bc234 100644 --- a/Python/optimizer.c +++ b/Python/optimizer.c @@ -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; -- 2.47.3