]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-122974: Suppress GCC array bound warnings in free-threaded build (#123071)
authorSam Gross <colesbury@gmail.com>
Sat, 17 Aug 2024 20:03:50 +0000 (16:03 -0400)
committerGitHub <noreply@github.com>
Sat, 17 Aug 2024 20:03:50 +0000 (16:03 -0400)
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

index a5640b7bcb7d60faaf843a0ff160d5e778c2f4f2..2e0b5fa09c8f012542dc47279798b5b84a59ca38 100644 (file)
@@ -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