]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.14] gh-140513: Fail to compile if _Py_TAIL_CALL_INTERP is set but preserve_none...
authorChris Eibl <138194463+chris-eibl@users.noreply.github.com>
Tue, 4 Nov 2025 20:43:18 +0000 (21:43 +0100)
committerGitHub <noreply@github.com>
Tue, 4 Nov 2025 20:43:18 +0000 (20:43 +0000)
gh-140513: Fail to compile if `_Py_TAIL_CALL_INTERP` is set but `preserve_none` and `musttail` do not exist. (GH-140548)

(cherry picked from commit 2f60b8f02fe7cb83dd589d9664460082c13e85ef)

Co-authored-by: Krishna Chaitanya <141550576+XChaitanyaX@users.noreply.github.com>
Misc/NEWS.d/next/Build/2025-10-25-08-07-06.gh-issue-140513.6OhLTs.rst [new file with mode: 0644]
Python/ceval_macros.h

diff --git a/Misc/NEWS.d/next/Build/2025-10-25-08-07-06.gh-issue-140513.6OhLTs.rst b/Misc/NEWS.d/next/Build/2025-10-25-08-07-06.gh-issue-140513.6OhLTs.rst
new file mode 100644 (file)
index 0000000..1035ebf
--- /dev/null
@@ -0,0 +1,2 @@
+Generate a clear compilation error when ``_Py_TAIL_CALL_INTERP`` is enabled but
+either ``preserve_none`` or ``musttail`` is not supported.
index 187ec8fdd265840b7bd571afec66ff559d12f934..37c4b00f86df25db3179426efe29620e79ad7d1a 100644 (file)
 #endif
 
 #if Py_TAIL_CALL_INTERP
+#   if defined(__clang__) || defined(__GNUC__)
+#       if !_Py__has_attribute(preserve_none) || !_Py__has_attribute(musttail)
+#           error "This compiler does not have support for efficient tail calling."
+#       endif
+#   elif defined(_MSC_VER)
+#       error "Tail calling not supported for MSVC."
+#   endif
+
     // Note: [[clang::musttail]] works for GCC 15, but not __attribute__((musttail)) at the moment.
 #   define Py_MUSTTAIL [[clang::musttail]]
 #   define Py_PRESERVE_NONE_CC __attribute__((preserve_none))