https://github.com/python/cpython/commit/f0f93ba5fa53ef5724250dd9f791d89abca04fa7
commit: f0f93ba5fa53ef5724250dd9f791d89abca04fa7
branch: main
author: Xuehai Pan <[email protected]>
committer: zooba <[email protected]>
date: 2025-05-08T15:01:25Z
summary:
gh-131942: Use the Python-specific `Py_DEBUG` macro rather than `_DEBUG` in
Windows-related C code (GH-131944)
files:
A Misc/NEWS.d/next/Windows/2025-03-31-15-37-57.gh-issue-131942.jip_aL.rst
M Doc/c-api/intro.rst
M Include/internal/pycore_importdl.h
M Modules/_ctypes/callproc.c
M Modules/_ssl.c
M Modules/_ssl/debughelpers.c
M PC/launcher.c
M PC/pyconfig.h.in
M PC/python_uwp.cpp
M PC/python_ver_rc.h
M Python/dynload_win.c
M Python/marshal.c
M Python/pylifecycle.c
diff --git a/Doc/c-api/intro.rst b/Doc/c-api/intro.rst
index c8c60eb9f48f45..2bad0bab224e51 100644
--- a/Doc/c-api/intro.rst
+++ b/Doc/c-api/intro.rst
@@ -826,14 +826,17 @@ frequently used builds will be described in the remainder
of this section.
Compiling the interpreter with the :c:macro:`!Py_DEBUG` macro defined produces
what is generally meant by :ref:`a debug build of Python <debug-build>`.
-:c:macro:`!Py_DEBUG` is enabled in the Unix build by adding
-:option:`--with-pydebug` to the :file:`./configure` command.
-It is also implied by the presence of the
-not-Python-specific :c:macro:`!_DEBUG` macro. When :c:macro:`!Py_DEBUG` is
enabled
-in the Unix build, compiler optimization is disabled.
+
+On Unix, :c:macro:`!Py_DEBUG` can be enabled by adding :option:`--with-pydebug`
+to the :file:`./configure` command. This will also disable compiler
optimization.
+
+On Windows, selecting a debug build (e.g., by passing the :option:`-d` option
to
+:file:`PCbuild/build.bat`) automatically enables :c:macro:`!Py_DEBUG`.
+Additionally, the presence of the not-Python-specific :c:macro:`!_DEBUG` macro,
+when defined by the compiler, will also implicitly enable :c:macro:`!Py_DEBUG`.
In addition to the reference count debugging described below, extra checks are
-performed, see :ref:`Python Debug Build <debug-build>`.
+performed. See :ref:`Python Debug Build <debug-build>` for more details.
Defining :c:macro:`Py_TRACE_REFS` enables reference tracing
(see the :option:`configure --with-trace-refs option <--with-trace-refs>`).
diff --git a/Include/internal/pycore_importdl.h
b/Include/internal/pycore_importdl.h
index 525a16f6b97274..3ba9229cc21378 100644
--- a/Include/internal/pycore_importdl.h
+++ b/Include/internal/pycore_importdl.h
@@ -107,7 +107,7 @@ extern int _PyImport_RunModInitFunc(
#include <windows.h>
typedef FARPROC dl_funcptr;
-#ifdef _DEBUG
+#ifdef Py_DEBUG
# define PYD_DEBUG_SUFFIX "_d"
#else
# define PYD_DEBUG_SUFFIX ""
diff --git
a/Misc/NEWS.d/next/Windows/2025-03-31-15-37-57.gh-issue-131942.jip_aL.rst
b/Misc/NEWS.d/next/Windows/2025-03-31-15-37-57.gh-issue-131942.jip_aL.rst
new file mode 100644
index 00000000000000..837f7265bba246
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/2025-03-31-15-37-57.gh-issue-131942.jip_aL.rst
@@ -0,0 +1 @@
+Use the Python-specific :c:macro:`Py_DEBUG` macro rather than
:c:macro:`!_DEBUG` in Windows-related C code. Patch by Xuehai Pan.
diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c
index 856b0376e5eaa0..404178ca623a93 100644
--- a/Modules/_ctypes/callproc.c
+++ b/Modules/_ctypes/callproc.c
@@ -92,7 +92,7 @@ module _ctypes
#include <sanitizer/msan_interface.h>
#endif
-#if defined(_DEBUG) || defined(__MINGW32__)
+#if defined(Py_DEBUG) || defined(__MINGW32__)
/* Don't use structured exception handling on Windows if this is defined.
MingW, AFAIK, doesn't support it.
*/
diff --git a/Modules/_ssl.c b/Modules/_ssl.c
index 97a29f4d0e1830..1b26f503e73827 100644
--- a/Modules/_ssl.c
+++ b/Modules/_ssl.c
@@ -4427,7 +4427,7 @@ _ssl__SSLContext_load_dh_params_impl(PySSLContext *self,
PyObject *filepath)
FILE *f;
DH *dh;
-#if defined(MS_WINDOWS) && defined(_DEBUG)
+#if defined(MS_WINDOWS) && defined(Py_DEBUG)
PyErr_SetString(PyExc_NotImplementedError,
"load_dh_params: unavailable on Windows debug build");
return NULL;
diff --git a/Modules/_ssl/debughelpers.c b/Modules/_ssl/debughelpers.c
index 7c0b4876f4353a..f0a0a1674f32bd 100644
--- a/Modules/_ssl/debughelpers.c
+++ b/Modules/_ssl/debughelpers.c
@@ -175,7 +175,7 @@ _PySSLContext_set_keylog_filename(PyObject *op, PyObject
*arg,
PySSLContext *self = PySSLContext_CAST(op);
FILE *fp;
-#if defined(MS_WINDOWS) && defined(_DEBUG)
+#if defined(MS_WINDOWS) && defined(Py_DEBUG)
PyErr_SetString(PyExc_NotImplementedError,
"set_keylog_filename: unavailable on Windows debug build");
return -1;
diff --git a/PC/launcher.c b/PC/launcher.c
index 5c63d872bd4dfc..fed5e156b92cb3 100644
--- a/PC/launcher.c
+++ b/PC/launcher.c
@@ -140,7 +140,7 @@ static wchar_t * get_env(wchar_t * key)
return buf;
}
-#if defined(_DEBUG)
+#if defined(Py_DEBUG)
/* Do not define EXECUTABLEPATH_VALUE in debug builds as it'll
never point to the debug build. */
#if defined(_WINDOWS)
diff --git a/PC/pyconfig.h.in b/PC/pyconfig.h.in
index bbafaed808eecd..1d659e7cee682b 100644
--- a/PC/pyconfig.h.in
+++ b/PC/pyconfig.h.in
@@ -94,6 +94,11 @@ WIN32 is still required for the locale module.
#endif
#endif /* Py_BUILD_CORE || Py_BUILD_CORE_BUILTIN || Py_BUILD_CORE_MODULE */
+/* _DEBUG implies Py_DEBUG */
+#ifdef _DEBUG
+# define Py_DEBUG 1
+#endif
+
/* Define to 1 if you want to disable the GIL */
/* Uncomment the definition for free-threaded builds, or define it manually
* when compiling extension modules. Note that we test with #ifdef, so
@@ -319,21 +324,21 @@ Py_NO_ENABLE_SHARED to find out. Also support
MS_NO_COREDLL for b/w compat */
This is relevant when using build-system generator
(e.g CMake) where
the linking is explicitly handled */
# if defined(Py_GIL_DISABLED)
-# if defined(_DEBUG)
+# if defined(Py_DEBUG)
# pragma comment(lib,"python315t_d.lib")
# elif defined(Py_LIMITED_API)
# pragma comment(lib,"python3t.lib")
# else
# pragma comment(lib,"python315t.lib")
-# endif /* _DEBUG */
+# endif /* Py_DEBUG */
# else /* Py_GIL_DISABLED */
-# if defined(_DEBUG)
+# if defined(Py_DEBUG)
# pragma comment(lib,"python315_d.lib")
# elif defined(Py_LIMITED_API)
# pragma comment(lib,"python3.lib")
# else
# pragma comment(lib,"python315.lib")
-# endif /* _DEBUG */
+# endif /* Py_DEBUG */
# endif /* Py_GIL_DISABLED */
# endif /* _MSC_VER && !Py_NO_LINK_LIB */
# endif /* Py_BUILD_CORE */
@@ -376,11 +381,6 @@ Py_NO_ENABLE_SHARED to find out. Also support
MS_NO_COREDLL for b/w compat */
# define ALIGNOF_MAX_ALIGN_T 8
#endif
-#ifdef _DEBUG
-# define Py_DEBUG
-#endif
-
-
#ifdef MS_WIN32
#define SIZEOF_SHORT 2
diff --git a/PC/python_uwp.cpp b/PC/python_uwp.cpp
index b9c408a580c999..8cdb8d722cdb9a 100644
--- a/PC/python_uwp.cpp
+++ b/PC/python_uwp.cpp
@@ -19,13 +19,13 @@
#include <winrt\Windows.Storage.h>
#ifdef PYTHONW
-#ifdef _DEBUG
+#ifdef Py_DEBUG
const wchar_t *PROGNAME = L"pythonw_d.exe";
#else
const wchar_t *PROGNAME = L"pythonw.exe";
#endif
#else
-#ifdef _DEBUG
+#ifdef Py_DEBUG
const wchar_t *PROGNAME = L"python_d.exe";
#else
const wchar_t *PROGNAME = L"python.exe";
diff --git a/PC/python_ver_rc.h b/PC/python_ver_rc.h
index ee867fe41224c3..bb98144cd03f15 100644
--- a/PC/python_ver_rc.h
+++ b/PC/python_ver_rc.h
@@ -10,7 +10,7 @@
#define MS_WINDOWS
#include "modsupport.h"
#include "patchlevel.h"
-#ifdef _DEBUG
+#ifdef Py_DEBUG
# define PYTHON_DEBUG_EXT "_d"
#else
# define PYTHON_DEBUG_EXT
diff --git a/Python/dynload_win.c b/Python/dynload_win.c
index 6324063401e51f..de9b0a77817a63 100644
--- a/Python/dynload_win.c
+++ b/Python/dynload_win.c
@@ -108,7 +108,7 @@ static char *GetPythonImport (HINSTANCE hModule)
char *pch;
/* Don't claim that python3.dll is a Python DLL. */
-#ifdef _DEBUG
+#ifdef Py_DEBUG
if (strcmp(import_name, "python3_d.dll") == 0) {
#else
if (strcmp(import_name, "python3.dll") == 0) {
@@ -120,7 +120,7 @@ static char *GetPythonImport (HINSTANCE hModule)
/* Ensure python prefix is followed only
by numbers to the end of the basename */
pch = import_name + 6;
-#ifdef _DEBUG
+#ifdef Py_DEBUG
while (*pch && pch[0] != '_' && pch[1] != 'd' && pch[2] !=
'.') {
#else
while (*pch && *pch != '.') {
@@ -300,7 +300,7 @@ dl_funcptr _PyImport_FindSharedFuncptrWindows(const char
*prefix,
char buffer[256];
PyOS_snprintf(buffer, sizeof(buffer),
-#ifdef _DEBUG
+#ifdef Py_DEBUG
"python%d%d_d.dll",
#else
"python%d%d.dll",
diff --git a/Python/marshal.c b/Python/marshal.c
index b39c1a5b1ade50..afbef6ee6796d9 100644
--- a/Python/marshal.c
+++ b/Python/marshal.c
@@ -38,7 +38,7 @@ module marshal
* On Windows PGO builds, the r_object function overallocates its stack and
* can cause a stack overflow. We reduce the maximum depth for all Windows
* releases to protect against this.
- * #if defined(MS_WINDOWS) && defined(_DEBUG)
+ * #if defined(MS_WINDOWS) && defined(Py_DEBUG)
*/
#if defined(MS_WINDOWS)
# define MAX_MARSHAL_STACK_DEPTH 1000
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index c4c1d9fd9e1380..8394245d373030 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -3144,7 +3144,7 @@ static inline void _Py_NO_RETURN
fatal_error_exit(int status)
{
if (status < 0) {
-#if defined(MS_WINDOWS) && defined(_DEBUG)
+#if defined(MS_WINDOWS) && defined(Py_DEBUG)
DebugBreak();
#endif
abort();
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]