[3.13] gh-133256: Add _Py_NONSTRING macro (#133257) (#135135)

gh-133256: Add _Py_NONSTRING macro (#133257)

Fix GCC 15 compiler warnings such as:

    In file included from Python/pylifecycle.c:26:
    Include/internal/pycore_runtime.h:47:26: warning:
    initializer-string for array of 'char' truncates NUL terminator
    but destination lacks 'nonstring' attribute (9 chars into 8
    available) [-Wunterminated-string-initialization]
       47 | #define _Py_Debug_Cookie "xdebugpy"
          |                          ^~~~~~~~~~

(cherry picked from commit e26bafd107)
This commit is contained in:
Victor Stinner 2025-06-04 17:10:35 +02:00 committed by GitHub
parent ae2e7958f2
commit 659631f769
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 25 additions and 1 deletions

View file

@ -60,7 +60,7 @@ typedef struct _Py_AuditHookEntry {
} _Py_AuditHookEntry;
typedef struct _Py_DebugOffsets {
char cookie[8];
char cookie[8] _Py_NONSTRING;
uint64_t version;
uint64_t free_threaded;
// Runtime state offset;

View file

@ -541,6 +541,14 @@ extern "C" {
# define _Py__has_builtin(x) 0
#endif
// Preprocessor check for a compiler __attribute__. Always return 0
// if __has_attribute() macro is not defined.
#ifdef __has_attribute
# define _Py__has_attribute(x) __has_attribute(x)
#else
# define _Py__has_attribute(x) 0
#endif
// _Py_TYPEOF(expr) gets the type of an expression.
//
// Example: _Py_TYPEOF(x) x_copy = (x);
@ -606,4 +614,20 @@ extern "C" {
# define _SGI_MP_SOURCE
#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 */