From 40632b1f1da573f6d5e12453007474bcf70fba22 Mon Sep 17 00:00:00 2001 From: Sam Gross Date: Sat, 17 Aug 2024 16:03:50 -0400 Subject: [PATCH] gh-122974: Suppress GCC array bound warnings in free-threaded build (#123071) GCC 11 and newer warn about the access to `unique_id` in non-debug builds due to inlining the call on static non-heap types. --- Include/internal/pycore_object.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Include/internal/pycore_object.h b/Include/internal/pycore_object.h index a5640b7bcb7..2e0b5fa09c8 100644 --- a/Include/internal/pycore_object.h +++ b/Include/internal/pycore_object.h @@ -301,6 +301,14 @@ _Py_INCREF_TYPE(PyTypeObject *type) return; } + // gh-122974: GCC 11 warns about the access to PyHeapTypeObject fields when + // _Py_INCREF_TYPE() is called on a statically allocated type. The + // _PyType_HasFeature check above ensures that the type is a heap type. +#if defined(__GNUC__) && __GNUC__ >= 11 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Warray-bounds" +#endif + _PyThreadStateImpl *tstate = (_PyThreadStateImpl *)_PyThreadState_GET(); PyHeapTypeObject *ht = (PyHeapTypeObject *)type; @@ -319,6 +327,10 @@ _Py_INCREF_TYPE(PyTypeObject *type) // It handles the unique_id=-1 case to keep the inlinable function smaller. _PyType_IncrefSlow(ht); } + +#if defined(__GNUC__) && __GNUC__ >= 11 +# pragma GCC diagnostic pop +#endif } static inline void