https://github.com/python/cpython/commit/e26bafd107aa86a4bdd6051848640f36a56d0efb
commit: e26bafd107aa86a4bdd6051848640f36a56d0efb
branch: main
author: Victor Stinner <[email protected]>
committer: vstinner <[email protected]>
date: 2025-05-01T17:55:49+02:00
summary:
gh-133256: Add _Py_NONSTRING macro (#133257)
Fix GCC 15 compiler warnings such as:
Modules/fcntlmodule.c:27:36: warning: initializer-string for
array of 'char' truncates NUL terminator but destination lacks
'nonstring' attribute (9 chars into 8 available)
[-Wunterminated-string-initialization]
static const char guard[GUARDSZ] = "\x00\xfa\x69\xc4\x67\xa3\x6c\x58";
files:
M Include/internal/pycore_debug_offsets.h
M Include/pyport.h
M Modules/fcntlmodule.c
diff --git a/Include/internal/pycore_debug_offsets.h
b/Include/internal/pycore_debug_offsets.h
index b280633c9ef679..59d2c9d5377953 100644
--- a/Include/internal/pycore_debug_offsets.h
+++ b/Include/internal/pycore_debug_offsets.h
@@ -59,7 +59,7 @@ extern "C" {
typedef struct _Py_DebugOffsets {
- char cookie[8];
+ char cookie[8] _Py_NONSTRING;
uint64_t version;
uint64_t free_threaded;
// Runtime state offset;
diff --git a/Include/pyport.h b/Include/pyport.h
index ebce31f1d14a01..3eac119bf8e8d8 100644
--- a/Include/pyport.h
+++ b/Include/pyport.h
@@ -685,4 +685,19 @@ extern "C" {
#endif
+// _Py_NONSTRING: The nonstring variable attribute specifies that an object or
+// member declaration with type array of char, signed char, or unsigned char,
+// or pointer to such a type is intended to store character arrays that do not
+// necessarily contain a terminating NUL.
+//
+// Usage:
+//
+// char name [8] _Py_NONSTRING;
+#if _Py__has_attribute(nonstring)
+# define _Py_NONSTRING __attribute__((nonstring))
+#else
+# define _Py_NONSTRING
+#endif
+
+
#endif /* Py_PYPORT_H */
diff --git a/Modules/fcntlmodule.c b/Modules/fcntlmodule.c
index ebcacd2fb0ece1..220ee9ecdffc8a 100644
--- a/Modules/fcntlmodule.c
+++ b/Modules/fcntlmodule.c
@@ -24,7 +24,7 @@
#define GUARDSZ 8
// NUL followed by random bytes.
-static const char guard[GUARDSZ] = "\x00\xfa\x69\xc4\x67\xa3\x6c\x58";
+static const char guard[GUARDSZ] _Py_NONSTRING =
"\x00\xfa\x69\xc4\x67\xa3\x6c\x58";
/*[clinic input]
module fcntl
_______________________________________________
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]