From 980612bf2d94acbea099bdc0de673deff2f279b6 Mon Sep 17 00:00:00 2001 From: Stephan Bergmann Date: Thu, 22 Jan 2026 10:21:12 +0100 Subject: [PATCH] Silence spurious -Werror=array-bounds= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit seen at least with recent GCC 16 trunk, > In file included from ~/gcc/inst/include/c++/16.0.1/bits/shared_ptr.h:53, > from ~/gcc/inst/include/c++/16.0.1/memory:82, > from include/rtl/stringconcat.hxx:22, > from include/rtl/string.hxx:51, > from include/rtl/ustring.hxx:45, > from include/com/sun/star/uno/Any.h:30, > from workdir/UnoApiHeadersTarget/udkapi/normal/com/sun/star/uno/XInterface.hdl:6, > from workdir/UnoApiHeadersTarget/udkapi/normal/com/sun/star/beans/XPropertySet.hdl:9, > from workdir/UnoApiHeadersTarget/udkapi/normal/com/sun/star/beans/XPropertySet.hpp:6, > from sw/source/uibase/wrtsh/wrtsh1.cxx:20: > In destructor ‘std::_Sp_counted_ptr_inplace<_Tp, _Alloc, _Lp>::~_Sp_counted_ptr_inplace() [with _Tp = SwContentControl; _Alloc = std::allocator; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’, > inlined from ‘std::_Sp_counted_ptr_inplace<_Tp, _Alloc, _Lp>::~_Sp_counted_ptr_inplace() [with _Tp = SwContentControl; _Alloc = std::allocator; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’ at ~/gcc/inst/include/c++/16.0.1/bits/shared_ptr_base.h:670:45, > inlined from ‘void std::_Sp_counted_base<_Lp>::_M_destroy() [with __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’ at ~/gcc/inst/include/c++/16.0.1/bits/shared_ptr_base.h:143:9, > inlined from ‘void std::_Sp_counted_base<_Lp>::_M_release() [with __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’ at ~/gcc/inst/include/c++/16.0.1/bits/shared_ptr_base.h:424:18, > inlined from ‘void std::_Sp_counted_base<_Lp>::_M_release() [with __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’ at ~/gcc/inst/include/c++/16.0.1/bits/shared_ptr_base.h:392:5, > inlined from ‘std::__shared_count<_Lp>::~__shared_count() [with __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’ at ~/gcc/inst/include/c++/16.0.1/bits/shared_ptr_base.h:1129:21, > inlined from ‘std::__shared_ptr<_Tp, _Lp>::~__shared_ptr() [with _Tp = weld::MessageDialogController; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’ at ~/gcc/inst/include/c++/16.0.1/bits/shared_ptr_base.h:1603:7, > inlined from ‘std::shared_ptr::~shared_ptr()’ at ~/gcc/inst/include/c++/16.0.1/bits/shared_ptr.h:175:11, > inlined from ‘virtual void SwWrtShell::InfoReadOnlyDialog(bool) const’ at sw/source/uibase/wrtsh/wrtsh1.cxx:2834:5: > ~/gcc/inst/include/c++/16.0.1/bits/shared_ptr_base.h:670:45: error: array subscript ‘std::_Sp_counted_ptr_inplace, __gnu_cxx::_S_atomic>[0]’ is partly outside array bounds of ‘unsigned char [80]’ [-Werror=array-bounds=] > 670 | ~_Sp_counted_ptr_inplace() noexcept { } > | ^ > In file included from ~/gcc/inst/include/c++/16.0.1/x86_64-pc-linux-gnu/bits/c++allocator.h:33, > from ~/gcc/inst/include/c++/16.0.1/bits/allocator.h:46, > from ~/gcc/inst/include/c++/16.0.1/string:46, > from ~/gcc/inst/include/c++/16.0.1/bits/locale_classes.h:43, > from ~/gcc/inst/include/c++/16.0.1/bits/ios_base.h:43, > from ~/gcc/inst/include/c++/16.0.1/ios:46, > from ~/gcc/inst/include/c++/16.0.1/bits/ostream.h:43, > from ~/gcc/inst/include/c++/16.0.1/ostream:42, > from include/rtl/ustring.hxx:34: > In member function ‘_Tp* std::__new_allocator<_Tp>::allocate(size_type, const void*) [with _Tp = std::_Sp_counted_ptr_inplace, __gnu_cxx::_S_atomic>]’, > inlined from ‘constexpr _Tp* std::allocator< >::allocate(std::size_t) [with _Tp = std::_Sp_counted_ptr_inplace, __gnu_cxx::_S_atomic>]’ at ~/gcc/inst/include/c++/16.0.1/bits/allocator.h:203:40, > inlined from ‘static constexpr _Tp* std::allocator_traits >::allocate(allocator_type&, size_type) [with _Tp = std::_Sp_counted_ptr_inplace, __gnu_cxx::_S_atomic>]’ at ~/gcc/inst/include/c++/16.0.1/bits/alloc_traits.h:614:28, > inlined from ‘std::__allocated_ptr<_Alloc> std::__allocate_guarded(_Alloc&) [with _Alloc = allocator<_Sp_counted_ptr_inplace, __gnu_cxx::_S_atomic> >]’ at ~/gcc/inst/include/c++/16.0.1/bits/allocated_ptr.h:103:69, > inlined from ‘std::__shared_count<_Lp>::__shared_count(_Tp*&, std::_Sp_alloc_shared_tag<_Alloc>, _Args&& ...) [with _Tp = weld::MessageDialogController; _Alloc = std::allocator; _Args = {weld::Window*, const char (&)[41], const char (&)[19]}; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’ at ~/gcc/inst/include/c++/16.0.1/bits/shared_ptr_base.h:1027:9, > inlined from ‘std::__shared_ptr<_Tp, _Lp>::__shared_ptr(std::_Sp_alloc_shared_tag<_Tp>, _Args&& ...) [with _Alloc = std::allocator; _Args = {weld::Window*, const char (&)[41], const char (&)[19]}; _Tp = weld::MessageDialogController; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’ at ~/gcc/inst/include/c++/16.0.1/bits/shared_ptr_base.h:1805:14, > inlined from ‘std::shared_ptr<_Tp>::shared_ptr(std::_Sp_alloc_shared_tag<_Tp>, _Args&& ...) [with _Alloc = std::allocator; _Args = {weld::Window*, const char (&)[41], const char (&)[19]}; _Tp = weld::MessageDialogController]’ at ~/gcc/inst/include/c++/16.0.1/bits/shared_ptr.h:463:59, > inlined from ‘std::shared_ptr > std::make_shared(_Args&& ...) [with _Tp = weld::MessageDialogController; _Args = {weld::Window*, const char (&)[41], const char (&)[19]}]’ at ~/gcc/inst/include/c++/16.0.1/bits/shared_ptr.h:1066:39, > inlined from ‘virtual void SwWrtShell::InfoReadOnlyDialog(bool) const’ at sw/source/uibase/wrtsh/wrtsh1.cxx:2826:111: > ~/gcc/inst/include/c++/16.0.1/bits/new_allocator.h:151:73: note: object of size 80 allocated by ‘operator new’ > 151 | return static_cast<_Tp*>(_GLIBCXX_OPERATOR_NEW(__n * sizeof(_Tp))); > | ^ > In destructor ‘std::_Sp_counted_ptr_inplace<_Tp, _Alloc, _Lp>::~_Sp_counted_ptr_inplace() [with _Tp = SwContentControl; _Alloc = std::allocator; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’, > inlined from ‘void std::_Sp_counted_ptr_inplace<_Tp, _Alloc, _Lp>::_M_destroy() [with _Tp = SwContentControl; _Alloc = std::allocator; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’ at ~/gcc/inst/include/c++/16.0.1/bits/shared_ptr_base.h:684:32, > inlined from ‘void std::_Sp_counted_base<_Lp>::_M_release() [with __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’ at ~/gcc/inst/include/c++/16.0.1/bits/shared_ptr_base.h:424:18, > inlined from ‘void std::_Sp_counted_base<_Lp>::_M_release() [with __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’ at ~/gcc/inst/include/c++/16.0.1/bits/shared_ptr_base.h:392:5, > inlined from ‘std::__shared_count<_Lp>::~__shared_count() [with __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’ at ~/gcc/inst/include/c++/16.0.1/bits/shared_ptr_base.h:1129:21, > inlined from ‘std::__shared_ptr<_Tp, _Lp>::~__shared_ptr() [with _Tp = weld::MessageDialogController; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’ at ~/gcc/inst/include/c++/16.0.1/bits/shared_ptr_base.h:1603:7, > inlined from ‘std::shared_ptr::~shared_ptr()’ at ~/gcc/inst/include/c++/16.0.1/bits/shared_ptr.h:175:11, > inlined from ‘virtual void SwWrtShell::InfoReadOnlyDialog(bool) const’ at sw/source/uibase/wrtsh/wrtsh1.cxx:2834:5: > ~/gcc/inst/include/c++/16.0.1/bits/shared_ptr_base.h:670:45: error: array subscript ‘std::_Sp_counted_ptr_inplace, __gnu_cxx::_S_atomic>[0]’ is partly outside array bounds of ‘unsigned char [80]’ [-Werror=array-bounds=] > 670 | ~_Sp_counted_ptr_inplace() noexcept { } > | ^ > In member function ‘_Tp* std::__new_allocator<_Tp>::allocate(size_type, const void*) [with _Tp = std::_Sp_counted_ptr_inplace, __gnu_cxx::_S_atomic>]’, > inlined from ‘constexpr _Tp* std::allocator< >::allocate(std::size_t) [with _Tp = std::_Sp_counted_ptr_inplace, __gnu_cxx::_S_atomic>]’ at ~/gcc/inst/include/c++/16.0.1/bits/allocator.h:203:40, > inlined from ‘static constexpr _Tp* std::allocator_traits >::allocate(allocator_type&, size_type) [with _Tp = std::_Sp_counted_ptr_inplace, __gnu_cxx::_S_atomic>]’ at ~/gcc/inst/include/c++/16.0.1/bits/alloc_traits.h:614:28, > inlined from ‘std::__allocated_ptr<_Alloc> std::__allocate_guarded(_Alloc&) [with _Alloc = allocator<_Sp_counted_ptr_inplace, __gnu_cxx::_S_atomic> >]’ at ~/gcc/inst/include/c++/16.0.1/bits/allocated_ptr.h:103:69, > inlined from ‘std::__shared_count<_Lp>::__shared_count(_Tp*&, std::_Sp_alloc_shared_tag<_Alloc>, _Args&& ...) [with _Tp = weld::MessageDialogController; _Alloc = std::allocator; _Args = {weld::Window*, const char (&)[41], const char (&)[19]}; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’ at ~/gcc/inst/include/c++/16.0.1/bits/shared_ptr_base.h:1027:9, > inlined from ‘std::__shared_ptr<_Tp, _Lp>::__shared_ptr(std::_Sp_alloc_shared_tag<_Tp>, _Args&& ...) [with _Alloc = std::allocator; _Args = {weld::Window*, const char (&)[41], const char (&)[19]}; _Tp = weld::MessageDialogController; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’ at ~/gcc/inst/include/c++/16.0.1/bits/shared_ptr_base.h:1805:14, > inlined from ‘std::shared_ptr<_Tp>::shared_ptr(std::_Sp_alloc_shared_tag<_Tp>, _Args&& ...) [with _Alloc = std::allocator; _Args = {weld::Window*, const char (&)[41], const char (&)[19]}; _Tp = weld::MessageDialogController]’ at ~/gcc/inst/include/c++/16.0.1/bits/shared_ptr.h:463:59, > inlined from ‘std::shared_ptr > std::make_shared(_Args&& ...) [with _Tp = weld::MessageDialogController; _Args = {weld::Window*, const char (&)[41], const char (&)[19]}]’ at ~/gcc/inst/include/c++/16.0.1/bits/shared_ptr.h:1066:39, > inlined from ‘virtual void SwWrtShell::InfoReadOnlyDialog(bool) const’ at sw/source/uibase/wrtsh/wrtsh1.cxx:2826:111: > ~/gcc/inst/include/c++/16.0.1/bits/new_allocator.h:151:73: note: object of size 80 allocated by ‘operator new’ > 151 | return static_cast<_Tp*>(_GLIBCXX_OPERATOR_NEW(__n * sizeof(_Tp))); > | ^ Change-Id: I54717f79621f31061a424fb27204e574b5c7dde1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/197841 Reviewed-by: Stephan Bergmann Tested-by: Jenkins --- sw/source/uibase/wrtsh/wrtsh1.cxx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sw/source/uibase/wrtsh/wrtsh1.cxx b/sw/source/uibase/wrtsh/wrtsh1.cxx index bbfb85dd7ae4..671d5e1e2e6c 100644 --- a/sw/source/uibase/wrtsh/wrtsh1.cxx +++ b/sw/source/uibase/wrtsh/wrtsh1.cxx @@ -2824,6 +2824,10 @@ bool SwWrtShell::HasFoldedOutlineContentSelected() const void SwWrtShell::InfoReadOnlyDialog(bool bAsync) const { +#if defined __GNUC__ && !defined __clang__ && __GNUC__ == 16 +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Warray-bounds" +#endif if (bAsync) { auto xInfo = std::make_shared( @@ -2851,6 +2855,9 @@ void SwWrtShell::InfoReadOnlyDialog(bool bAsync) const } xInfo->run(); } +#if defined __GNUC__ && !defined __clang__ && __GNUC__ == 16 +#pragma GCC diagnostic pop +#endif } bool SwWrtShell::WarnHiddenSectionDialog() const