]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-125217: Turn off optimization around_PyEval_EvalFrameDefault to avoid MSVC crash...
authorMichael Droettboom <mdboom@gmail.com>
Wed, 16 Oct 2024 12:51:15 +0000 (08:51 -0400)
committerGitHub <noreply@github.com>
Wed, 16 Oct 2024 12:51:15 +0000 (12:51 +0000)
Python/ceval.c

index f4e0add3034707899e2bead014ee9349a4e6b45c..43776e773e0deb8f8a291ad5550a0a316c2c1b0e 100644 (file)
@@ -761,6 +761,16 @@ _PyObjectArray_Free(PyObject **array, PyObject **scratch)
  * so consume 3 units of C stack */
 #define PY_EVAL_C_STACK_UNITS 2
 
+#if defined(_MSC_VER) && defined(_Py_USING_PGO) && defined(_Py_JIT)
+/* _PyEval_EvalFrameDefault is too large to optimize for speed with
+   PGO on MSVC when the JIT is enabled. Disable that optimization
+   around this function only. If this is fixed upstream, we should
+   gate this on the version of MSVC.
+ */
+#  pragma optimize("t", off)
+/* This setting is reversed below following _PyEval_EvalFrameDefault */
+#endif
+
 PyObject* _Py_HOT_FUNCTION
 _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int throwflag)
 {
@@ -1136,6 +1146,10 @@ goto_to_tier1:
 
 }
 
+#if defined(_MSC_VER) && defined(_Py_USING_PGO) && defined(_Py_JIT)
+#  pragma optimize("", on)
+#endif
+
 #if defined(__GNUC__)
 #  pragma GCC diagnostic pop
 #elif defined(_MSC_VER) /* MS_WINDOWS */