boostorg / algorithm

Boost.org algorithm module
http://boost.org/libs/algorithm
Boost Software License 1.0
112 stars 105 forks source link

Avoid -Wdangling-pointer warning with gcc 13 and -O2 #113

Closed Romain-Geissler-1A closed 1 year ago

Romain-Geissler-1A commented 1 year ago

Apply the simple workaround described https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106238#c6 which prevents the warning from being raised while keeping the exact same semantic.

In member function 'std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::_Identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::swap(std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::_Identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&)',
    inlined from 'std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::swap(std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&)' at /remote/tools/Linux/2.6/1A/toolchain/x86_64-v23.0.7/include/c++/13.0.1/bits/stl_set.h:443:18,
    inlined from 'boost::algorithm::iter_split<std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::algorithm::detail::token_finderF<boost::algorithm::detail::is_any_ofF<char> > >(std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::algorithm::detail::token_finderF<boost::algorithm::detail::is_any_ofF<char> >)std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >& [clone .isra.0]' at /data/mwrep/res/osp/Boost/23-0-0-0/include/boost/algorithm/string/iter_find.hpp:188:24:
/remote/tools/Linux/2.6/1A/toolchain/x86_64-v23.0.7/include/c++/13.0.1/bits/stl_tree.h:2092:36: error: storing the address of local variable 'Tmp' in '_239->_M_parent' [-Werror=dangling-pointer=]
 2092 |           __t._M_root()->_M_parent = __t._M_end();
      |           ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~
mclow commented 1 year ago

is this only for gcc 13? (not yet released)

Romain-Geissler-1A commented 1 year ago

Yes, I compiled gcc from the master branch. I also compile the same code base with gcc 11 (compiled from the release branch) and I didn't hit this issue. Note that using gcc 13 from early february, I didn't have this issue either.

Romain-Geissler-1A commented 1 year ago

Closing this pull request as it seems gcc 13 doesn't have this bug anymore.