Hi, On Fri, 22 Jun 2018 at 14:54, Jonathan Wakely <jwak...@redhat.com> wrote: > > On 22/06/18 14:51 +0200, Rainer Orth wrote: > >Hi Jonathan, > > > >> The SSO basic_string has a non-standard insert(iterator, initializer_list) > >> overload, from a C++0x draft. This adds the correct overload, while also > >> preserving the old one so that the old symbol is still exported from the > >> library. > >> > >> The COW basic_string doesn't have any of the C++11 changes to the insert > >> overloads (they all still have non-const iterator parameters and the > >> ones that should return an iterator still return void). This doesn't > >> make any change to the COW string. > >> > >> PR libstdc++/83328 > >> * acinclude.m4 (libtool_VERSION): Bump to 6:26:0. > >> * config/abi/pre/gnu.ver: Add GLIBCXX_3.4.26 and export new symbol. > >> * configure: Regenerate. > >> * include/bits/basic_string.h [_GLIBCXX_USE_CXX11_ABI] > >> (basic_string::insert(const_iterator, initializer_list<C>)): Add. > >> [_GLIBCXX_USE_CXX11_ABI && !_GLIBCXX_DEFINING_STRING_INSTANTIATIONS] > >> (basic_string::insert(iterator, initializer_list<C>)): Suppress > >> definition. > >> * include/debug/string (basic_string::insert(iterator, C)): Change > >> first parameter to const_iterator. > >> (basic_string::insert(iterator, size_type, C)): Likewise. Change > >> return type to iterator. > >> (basic_string::insert(iterator, InputIterator, InputIterator)): > >> Likewise. > >> (basic_string::insert(iterator, initializer_list<C>)): Change first > >> parameter to const_iterator and return type to iterator. > >> * src/c++11/string-inst.cc: Extend comment. > >> * testsuite/21_strings/basic_string/modifiers/insert/char/83328.cc: > >> New. > >> * testsuite/21_strings/basic_string/modifiers/insert/wchar_t/83328.cc: > >> New. > >> * testsuite/util/testsuite_abi.cc: Add new symbol version. > >> > >> Tested x86_64-linux, committed to trunk. > > > >it seems a couple of pattners are a bit too tight now in gnu.ver: this > >caused a couple of failures on 32-bit Solaris and subsequent tests > >failing to link due to symbols now hidden: > > Oops, it's the usual mangling difference for size_t, I'll fix it > today. >
I've also noticed a few regressions after this patch on arm: FAIL: g++.dg/torture/pr60750.C -O0 (test for excess errors) FAIL: g++.dg/torture/pr60750.C -Os (test for excess errors) Excess errors: pr60750.C:(.text._ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_OS8_[_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_OS8_]+0x24): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::insert(unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' FAIL: 21_strings/basic_string/modifiers/64422.cc (test for excess errors) Excess errors: /libstdc++-v3/testsuite/21_strings/basic_string/modifiers/64422.cc:29: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::insert(__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, unsigned int, char)' /libstdc++-v3/testsuite/21_strings/basic_string/modifiers/64422.cc:39: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::insert(__gnu_cxx::__normal_iterator<wchar_t const*, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > >, unsigned int, wchar_t)' collect2: error: ld returned 1 exit status FAIL: 21_strings/basic_string/modifiers/insert/char/1.cc (test for excess errors) Excess errors: /libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/char/1.cc:67: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::insert(unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int, unsigned int)' /libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/char/1.cc:83: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::insert(unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int, unsigned int)' /libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/char/1.cc:103: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::insert(unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int, unsigned int)' /libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/char/1.cc:109: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::insert(unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int, unsigned int)' /libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/char/1.cc:115: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::insert(unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int, unsigned int)' /libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/char/1.cc:142: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::insert(unsigned int, char const*)' /libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/char/1.cc:149: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::insert(unsigned int, unsigned int, char)' collect2: error: ld returned 1 exit status