[PATCH] libstdc++: Implement C++20 features for <sstream>

Jonathan Wakely jwakely@redhat.com
Thu Oct 29 01:30:45 GMT 2020


On 28/10/20 23:59 +0000, Jonathan Wakely wrote:
>On 26/10/20 21:09 +0000, Jonathan Wakely wrote:
>>On 26/10/20 13:47 -0700, Thomas Rodgers wrote:
>>>From: Thomas Rodgers <trodgers@redhat.com>
>>>
>>>New ctors and ::view() accessor for -
>>>* basic_stingbuf
>>>* basic_istringstream
>>>* basic_ostringstream
>>>* basic_stringstreamm
>>>
>>>New ::get_allocator() accessor for basic_stringbuf.
>>>
>>>libstdc++-v3/ChangeLog:
>>>	* acinclude.m4 (glibcxx_SUBDIRS): Add src/c++20.
>>>      * config/abi/pre/gnu.ver: Update GLIBCXX_3.4.29 for the addition of -
>>>	basic_stringbuf::basic_stringbuf(allocator const&),
>>>	basic_stringbuf::basic_stringbuf(openmode, allocator const&),
>>>	basic_stringbuf::basic_stringbuf(basic_string&&, openmode),
>>>	basic_stringbuf::basic_stringbuf(basic_stringbuf&&, allocator const&),
>>>	basic_stringbuf::get_allocator(),
>>>	basic_stringbuf::view(),
>>>	basic_istringstream::basic_istringstream(basic_string&&, openmode),
>>>	basic_istringstream::basic_istringstream(openmode, allocator const&),
>>>	basic_istringstream::view(),
>>>	basic_ostringstream::basic_ostringstream(basic_string&&, openmode),
>>>	basic_ostringstream::basic_ostringstream(openmode, allocator const&),
>>>	basic_ostringstream::view(),
>>>	basic_stringstream::basic_stringstream(basic_string&&, openmode),
>>>	basic_stringstream::basic_stringstream(openmode, allocator const&),
>>>	basic_stringstream::view().
>>
>>As discussed on IRC< please don't name every one of these functions
>>for the linker script changes, it's just redundant noise. They're
>>already listed below in the include/std/sstream changes.
>>
>>Look at past changelog entries for the gnu.ver file.
>>
>>>	* configure: Regenerate.
>>>	* include/std/sstream:
>>>	(basic_stringbuf::basic_stringbuf(allocator const&)): New constructor.
>>>	(basic_stringbuf::basic_stringbuf(openmode, allocator const&)): Likewise.
>>>	(basic_stringbuf::basic_stringbuf(basic_string&&, openmode)): Likewise.
>>>	(basic_stringbuf::basic_stringbuf(basic_stringbuf&&, allocator const&)): Likewise.
>>
>>New line before the Likewise.
>>
>>
>>There are a few formatting changes mentioned below. OK for trunk with
>>those changes. Thanks. Go ahead and commit the <syncstream> patch
>>after this one too.
>
>The patch that was committed broke the linker script. The attached
>patch restores the piece that got lost, and removes the duplicate
>patterns added for the new symbols. Pushed to trunk.
>
>This fixes all the failures related to exception_ptr. I'm still seeing
>four new failures which weren't there before:
>
>FAIL: 24_iterators/istream_iterator/sentinel.cc execution test
>FAIL: 24_iterators/istreambuf_iterator/sentinel.cc execution test
>FAIL: 27_io/basic_istream/extractors_character/char/lwg2499.cc execution test
>FAIL: std/ranges/istream_view.cc execution test
>
>I'm not sure what's happening there. It looks like some symbols I
>added recently are not present now. I'm investigating.

The attached patch fixes the failing tests. Not fully tested, but
pushed to trunk.





>Also, it looks like the get_allocator() members of the streams are not
>exported (only basic_stringbuf::get_allocator() is).
>
>

>commit f4f9364d2074e027490c1b08956ac1cbd9617575
>Author: Jonathan Wakely <jwakely@redhat.com>
>Date:   Wed Oct 28 23:10:21 2020
>
>    libstdc++: Fix linker script
>    
>    libstdc++-v3/ChangeLog:
>    
>            * config/abi/pre/gnu.ver (GLIBCXX_3.4.29): Remove duplicate
>            patterns.
>            (CXXABI_1.3.13): Restore missing piece.
>
>diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver
>index 2648c813616..80994b203df 100644
>--- a/libstdc++-v3/config/abi/pre/gnu.ver
>+++ b/libstdc++-v3/config/abi/pre/gnu.ver
>@@ -2335,51 +2335,6 @@ GLIBCXX_3.4.29 {
>     # std::__throw_bad_array_new_length()
>     _ZSt28__throw_bad_array_new_lengthv;
> 
>-    # basic_stringbuf::basic_stringbuf(allocator const&)
>-    _ZNSt7__cxx1115basic_stringbufI[cw]St11char_traitsI[cw]ESaI[cw]EEC1ERKS3_;
>-
>-    # basic_stringbuf::basic_stringbuf(ios_base::openmode, allocator const&)
>-    _ZNSt7__cxx1115basic_stringbufI[cw]St11char_traitsI[cw]ESaI[cw]EEC1ESt13_Ios_OpenmodeRKS3;
>-
>-    # basic_stringbuf::basic_stringbuf(basic_string&&, ios_base::openmode)
>-    _ZNSt7__cxx1115basic_stringbufI[cw]St11char_traitsI[cw]ESaI[cw]EEC1EONS_12basic_stringI[cw]S2_S3_EESt13_Ios_Openmode;
>-
>-    # basic_stringbuf::basic_stringbuf(basic_stringbuf&&, allocator const&)
>-    _ZNSt7__cxx1115basic_stringbufI[cw]St11char_traitsI[cw]ESaIcEEC1EOS4_RKS3_;
>-
>-    # basic_stringbuf::get_allocator()
>-    _ZNKSt7__cxx1115basic_stringbufI[cw]St11char_traitsI[cw]ESaI[cw]EE13get_allocatorEv;
>-
>-    # basic_stringbuf::view()
>-    _ZNKSt7__cxx1115basic_stringbufI[cw]St11char_traitsI[cw]ESaI[cw]EE4viewEv;
>-
>-    # basic_istringstream::basic_istringstream(basic_string&&, ios_base::openmode)
>-    _ZNSt7__cxx1119basic_istringstreamI[cw]St11char_traitsI[cw]ESaIcEEC1EONS_12basic_stringI[cw]S2_S3_EESt13_Ios_Openmode;
>-
>-    # basic_istringstream::basic_istringstream(ios_base::openmode, allocator const&)
>-    _ZNSt7__cxx1119basic_istringstreamI[cw]St11char_traitsI[cw]ESaI[cw]EEC1ESt13_Ios_OpenmodeRKS3_;
>-
>-    # basic_istringstream::view()
>-    _ZNKSt7__cxx1119basic_istringstreamI[cw]St11char_traitsI[cw]ESaI[cw]EE4viewEv;
>-
>-    # basic_ostringstream::basic_ostringstream(basic_string&&, ios_base::openmode)
>-    _ZNSt7__cxx1119basic_ostringstreamI[cw]St11char_traitsI[cw]ESaIcEEC1EONS_12basic_stringI[cw]S2_S3_EESt13_Ios_Openmode;
>-
>-    # basic_ostringstream::basic_ostringstream(ios_base::openmode, allocator const&)
>-    _ZNSt7__cxx1119basic_ostringstreamI[cw]St11char_traitsI[cw]ESaIcEEC1ESt13_Ios_OpenmodeRKS3_;
>-
>-    # basic_ostringstream::view()
>-    _ZNKSt7__cxx1119basic_ostringstreamI[cw]St11char_traitsI[cw]ESaI[cw]EE4viewEv;
>-
>-    # basic_stringstream::basic_stringstream(basic_string&&, ios_base::openmode)
>-    _ZNSt7__cxx1119basic_stringstreamI[cw]St11char_traitsI[cw]ESaIcEEC1EONS_12basic_stringI[cw]S2_S3_EESt13_Ios_Openmode;
>-
>-    # basic_stringstream::basic_stringstream(ios_base::openmode, allocator const&)
>-    _ZNSt7__cxx1119basic_stringstreamI[cw]St11char_traitsI[cw]ESaIcEEC1ESt13_Ios_OpenmodeRKS3_;
>-
>-    # basic_stringstream::view()
>-    _ZNKSt7__cxx1119basic_stringstreamI[cw]St11char_traitsI[cw]ESaI[cw]EE4viewEv;
>-
>     # basic_stringbuf::basic_stringbuf(allocator const&)
>     _ZNSt7__cxx1115basic_stringbufI[cw]St11char_traitsI[cw]ESaI[cw]EEC[12]ERKS3_;
> 
>@@ -2398,13 +2353,13 @@ GLIBCXX_3.4.29 {
>     # basic_stringbuf::view()
>     _ZNKSt7__cxx1115basic_stringbufI[cw]St11char_traitsI[cw]ESaI[cw]EE4viewEv;
> 
>-    # basic_istringstream::basic_istringstream(basic_string&&, ios_base::openmode)
>+    # basic_[io]stringstream::basic_[io]stringstream(basic_string&&, ios_base::openmode)
>     _ZNSt7__cxx1119basic_[io]stringstreamI[cw]St11char_traitsI[cw]ESaI[cw]EEC[12]EONS_12basic_stringI[cw]S2_S3_EESt13_Ios_Openmode;
> 
>     # basic_[io]stringstream::basic_[io]stringstream(ios_base::openmode, allocator const&)
>     _ZNSt7__cxx1119basic_[io]stringstreamI[cw]St11char_traitsI[cw]ESaI[cw]EEC[12]ESt13_Ios_OpenmodeRKS3_;
> 
>-    # basic_istringstream::view()
>+    # basic_[io]stringstream::view()
>     _ZNKSt7__cxx1119basic_[io]stringstreamI[cw]St11char_traitsI[cw]ESaI[cw]EE4viewEv;
> 
>     # basic_stringstream::basic_stringstream(basic_string&&, ios_base::openmode)
>@@ -2716,6 +2671,15 @@ CXXABI_1.3.12 {
> 
> } CXXABI_1.3.11;
> 
>+CXXABI_1.3.13 {
>+
>+    # std::exception_ptr::_M_addref()
>+    _ZNSt15__exception_ptr13exception_ptr9_M_addrefEv;
>+    # std::exception_ptr::_M_release()
>+    _ZNSt15__exception_ptr13exception_ptr10_M_releaseEv;
>+
>+} CXXABI_1.3.12;
>+
> # Symbols in the support library (libsupc++) supporting transactional memory.
> CXXABI_TM_1 {
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: patch.txt
Type: text/x-patch
Size: 1065 bytes
Desc: not available
URL: <https://gcc.gnu.org/pipermail/gcc-patches/attachments/20201029/61783abf/attachment.bin>


More information about the Gcc-patches mailing list