From a7910be6307e442297e55c84901a96dd0d046e93 Mon Sep 17 00:00:00 2001 From: "Bobby R. Bruce" Date: Sat, 14 Sep 2024 23:51:50 -0700 Subject: [PATCH] Add warn disable for GGC 12 bound checking error (#5355) Issue: #5224 The `internals.registered_types_py...` line in pybind11.h triggers a false-positive bounds checking warning in GCC 12. This is discussed in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115824. The workaround implemented is taken from suggestions then refactored to use the `PYBIND11_WARNING_PUSH` and `PYBIND11_WARNING_POP` MACROS. --- include/pybind11/pybind11.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/include/pybind11/pybind11.h b/include/pybind11/pybind11.h index 5219c0ff8..c52df969e 100644 --- a/include/pybind11/pybind11.h +++ b/include/pybind11/pybind11.h @@ -1382,7 +1382,17 @@ protected: } else { internals.registered_types_cpp[tindex] = tinfo; } + + PYBIND11_WARNING_PUSH +#if defined(__GNUC__) && __GNUC__ == 12 + // When using GCC 12 these warnings are disabled as they trigger + // false positive warnings. Discussed here: + // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115824. + PYBIND11_WARNING_DISABLE_GCC("-Warray-bounds") + PYBIND11_WARNING_DISABLE_GCC("-Wstringop-overread") +#endif internals.registered_types_py[(PyTypeObject *) m_ptr] = {tinfo}; + PYBIND11_WARNING_POP }); if (rec.bases.size() > 1 || rec.multiple_inheritance) {