From 3e904d136aec214d17a388a10be579f32a74e596 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 25 Jul 2023 19:28:16 +0200 Subject: [PATCH] gh-107249: Implement Py_UNUSED() for MSVC (GH-107250) Fix warnings C4100 in Py_UNUSED() when Python is built with "cl /W4". Example with this function included by Python.h: static inline unsigned int PyUnicode_IS_READY(PyObject* Py_UNUSED(op)) { return 1; } Without this change, building a C program with "cl /W4" which just includes Python.h emits the warning: Include\cpython/unicodeobject.h(199): warning C4100: '_unused_op': unreferenced formal parameter This change fix this warning. (cherry picked from commit 6a43cce32b66e0f66992119dd82959069b6f324a) Co-authored-by: Victor Stinner --- Include/pymacro.h | 9 +++++++++ .../C API/2023-07-25-17-23-08.gh-issue-107249.xqk2ke.rst | 2 ++ 2 files changed, 11 insertions(+) create mode 100644 Misc/NEWS.d/next/C API/2023-07-25-17-23-08.gh-issue-107249.xqk2ke.rst diff --git a/Include/pymacro.h b/Include/pymacro.h index d5700dc38933c4..94e6248d2832cd 100644 --- a/Include/pymacro.h +++ b/Include/pymacro.h @@ -118,6 +118,15 @@ */ #if defined(__GNUC__) || defined(__clang__) # define Py_UNUSED(name) _unused_ ## name __attribute__((unused)) +#elif defined(_MSC_VER) + // Disable warning C4100: unreferenced formal parameter, + // declare the parameter, + // restore old compiler warnings. +# define Py_UNUSED(name) \ + __pragma(warning(push)) \ + __pragma(warning(suppress: 4100)) \ + _unused_ ## name \ + __pragma(warning(pop)) #else # define Py_UNUSED(name) _unused_ ## name #endif diff --git a/Misc/NEWS.d/next/C API/2023-07-25-17-23-08.gh-issue-107249.xqk2ke.rst b/Misc/NEWS.d/next/C API/2023-07-25-17-23-08.gh-issue-107249.xqk2ke.rst new file mode 100644 index 00000000000000..a7139024329fae --- /dev/null +++ b/Misc/NEWS.d/next/C API/2023-07-25-17-23-08.gh-issue-107249.xqk2ke.rst @@ -0,0 +1,2 @@ +Implement the :c:macro:`Py_UNUSED` macro for Windows MSVC compiler. Patch by +Victor Stinner.