This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Export explicit instantiations for C++17 members of std::string


Hi Jonathan,

> On 06/01/19 17:59 +0100, Rainer Orth wrote:
>>Hi Jonathan,
>>
>>> The C++17 standard added some new members to std::basic_string, which
>>> were not previously instantiated in the library. This meant that the
>>> extern template declarations had to be disabled for C++17 mode. With
>>> this patch the new members are instantiated in the library and so the
>>> explicit instantiation declarations can be used for C++17.
>>>
>>> The new members added by C++2a are still not exported, and so the
>>> explicit instantiation declarations are still disabled for C++2a.
>>>
>>> 	* config/abi/pre/gnu.ver (GLIBCXX_3.4.21): Make patterns less greedy
>>> 	for const member functions of std::basic_string.
>>> 	(GLIBCXX_3.4.26): Export member functions of std::basic_string added
>>> 	in C++17.
>>> 	* include/bits/basic_string.h (basic_string(__sv_wrapper, const A&)):
>>> 	Make non-standard constructor private.
>>> 	[!_GLIBCXX_USE_CXX11_ABI] (basic_string(__sv_wrapper, const A&)):
>>> 	Likewise.
>>> 	* include/bits/basic_string.tcc (std::string, std::wstring): Declare
>>> 	explicit instantiations for C++17 as well as earlier dialects.
>>> 	* src/c++17/Makefile.am: Add new source files.
>>> 	* src/c++17/Makefile.in: Regenerate.
>>> 	* src/c++17/cow-string-inst.cc: New file defining explicit
>>> 	instantiations for basic_string member functions added in C++17.
>>> 	* src/c++17/string-inst.cc: Likewise.
>>>
>>> Tested powerpc64le-linux, committed to trunk.
>>
>>this patch broke Solaris bootstrap:
>>
>>ld: fatal: libstdc++-symbols.ver-sun: 6705: symbol
>> 'std::basic_string<char, std::char_traits<char>, std::allocator<char>
>> >::operator std::basic_string_view<char, std::char_traits<char> >()
>> const': symbol version conflict
>>ld: fatal: libstdc++-symbols.ver-sun: 6707: symbol
>> 'std::basic_string<wchar_t, std::char_traits<wchar_t>,
>> std::allocator<wchar_t> >::operator std::basic_string_view<wchar_t,
>> std::char_traits<wchar_t> >() const': symbol version conflict
>>ld: fatal: libstdc++-symbols.ver-sun: 6712: symbol
>> 'std::basic_string<char, std::char_traits<char>, std::allocator<char>
>> >::data()': symbol version conflict
>>ld: fatal: libstdc++-symbols.ver-sun: 6714: symbol
>> 'std::basic_string<wchar_t, std::char_traits<wchar_t>,
>> std::allocator<wchar_t> >::data()': symbol version conflict
>>ld: fatal: libstdc++-symbols.ver-sun: 6723: symbol
>> 'std::__cxx11::basic_string<char, std::char_traits<char>,
>> std::allocator<char> >::_S_to_string_view(std::basic_string_view<char,
>> std::char_traits<char> >)': symbol version conflict
>>ld: fatal: libstdc++-symbols.ver-sun: 6724: symbol
>> 'std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>,
>> std::allocator<wchar_t>
>> >::_S_to_string_view(std::basic_string_view<wchar_t,
>> std::char_traits<wchar_t> >)': symbol version conflict
>>collect2: error: ld returned 1 exit status
>>make[6]: *** [Makefile:696: libstdc++.la] Error 1
>
> Sorry :-(
>
> [...]
>
>>The following patch allowed the build to finish.
>
> OK for trunk, thanks.

installed now with the following ChangeLog entry:

2019-01-07  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	* config/abi/pre/gnu.ver (GLIBCXX_3.4): Tighten existing patterns.
	(GLIBCXX_3.4.21): Likewise.

> I'll make sure to run my script to check for such conflicts before
> adding any more symbols.

Thanks for double-checking.

	Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]