]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
GH-148047: Check early whether tail-calling is possible for MSVC builds on Windows...
authorChris Eibl <138194463+chris-eibl@users.noreply.github.com>
Sun, 12 Apr 2026 05:49:18 +0000 (07:49 +0200)
committerGitHub <noreply@github.com>
Sun, 12 Apr 2026 05:49:18 +0000 (08:49 +0300)
Rather than failing late when compiling e.g. a debug configuration
```
build.bat -c debug --tail-call-interp
```
with hundreds of
```
error C4737: Unable to perform required tail call. Performance may be degraded.
```
-- fail early with an explicit error message for configurations that are not supported by MSVC.

This is a follow-up on https://github.com/python/cpython/issues/140513 / https://github.com/python/cpython/pull/140548

Misc/NEWS.d/next/Build/2026-04-03-20-09-46.gh-issue-148047.HE6iGK.rst [new file with mode: 0644]
PCbuild/pythoncore.vcxproj

diff --git a/Misc/NEWS.d/next/Build/2026-04-03-20-09-46.gh-issue-148047.HE6iGK.rst b/Misc/NEWS.d/next/Build/2026-04-03-20-09-46.gh-issue-148047.HE6iGK.rst
new file mode 100644 (file)
index 0000000..e43a269
--- /dev/null
@@ -0,0 +1,2 @@
+Fail fast with an explicit and clear error message if tail-calling is not
+possible for MSVC builds on Windows. Patch by Chris Eibl.
index 61bee29c0af3d6f21f5768776db0cf91c637db26..9356a66dfb46426b9592f4e7674140042bba7b50 100644 (file)
   <Target Name="_DeletePyBuildDirTxt" BeforeTargets="PrepareForBuild">
     <Delete Files="$(OutDir)pybuilddir.txt" />
   </Target>
+
+  <Target Name="_CheckTailCalling" BeforeTargets="PrepareForBuild" Condition="'$(UseTailCallInterp)' == 'true' and $(PlatformToolset) != 'ClangCL'">
+    <Error Text="MSVC supports tail-calling only for x64."
+           Condition="$(Platform) != 'x64'" />
+    <Error Text="Platform toolset >= v145 is required for tail-calling."
+           Condition="$(PlatformToolset.Replace('v', '0')) &lt; '145'" />
+    <Error Text="MSVC requires optimization to be enabled for tail-calling."
+           Condition="$(Configuration) == 'Debug'" />
+  </Target>
 </Project>