From 082893b5a73a615b4bb73654baf39a598ed416f9 Mon Sep 17 00:00:00 2001 From: Sachin Shah <39803835+inventshah@users.noreply.github.com> Date: Thu, 14 Aug 2025 03:00:00 -0500 Subject: [PATCH] GH-137573: mark _PyOptimizer_Optimize as no inline (GH-137731) (cherry picked from commit c9d70651889afa89a033e8daedcb1cd60c59653a) Co-authored-by: Sachin Shah <39803835+inventshah@users.noreply.github.com> Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Co-authored-by: Petr Viktorin --- .../next/C_API/2025-08-13-13-41-04.gh-issue-137573.r6uwRf.rst | 2 ++ Python/optimizer.c | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 Misc/NEWS.d/next/C_API/2025-08-13-13-41-04.gh-issue-137573.r6uwRf.rst diff --git a/Misc/NEWS.d/next/C_API/2025-08-13-13-41-04.gh-issue-137573.r6uwRf.rst b/Misc/NEWS.d/next/C_API/2025-08-13-13-41-04.gh-issue-137573.r6uwRf.rst new file mode 100644 index 00000000000000..dcf0e643dc1ed3 --- /dev/null +++ b/Misc/NEWS.d/next/C_API/2025-08-13-13-41-04.gh-issue-137573.r6uwRf.rst @@ -0,0 +1,2 @@ +Mark ``_PyOptimizer_Optimize`` as :c:macro:`Py_NO_INLINE` to +prevent stack overflow crashes on macOS. diff --git a/Python/optimizer.c b/Python/optimizer.c index dde3dd8ebe745a..e2b6adfab595f2 100644 --- a/Python/optimizer.c +++ b/Python/optimizer.c @@ -109,7 +109,8 @@ uop_optimize(_PyInterpreterFrame *frame, _Py_CODEUNIT *instr, /* Returns 1 if optimized, 0 if not optimized, and -1 for an error. * If optimized, *executor_ptr contains a new reference to the executor */ -int +// gh-137573: inlining this function causes stack overflows +Py_NO_INLINE int _PyOptimizer_Optimize( _PyInterpreterFrame *frame, _Py_CODEUNIT *start, _PyExecutorObject **executor_ptr, int chain_depth)