[PATCH] PR libstdc++/83328 add correct basic_string::insert for initializer_list
Jonathan Wakely
jwakely@redhat.com
Fri Jun 22 14:19:00 GMT 2018
On 22/06/18 15:14 +0200, Christophe Lyon wrote:
>Hi,
>
>On Fri, 22 Jun 2018 at 14:54, Jonathan Wakely <jwakely@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&)'
Yep, that should be fixed by r261892.
More information about the Libstdc++
mailing list