Another fix to define __cow_string(const std::string&) in cxx11-stdexcept.cc even if ! _GLIBCXX_USE_DUAL_ABI. On 13/08/2023 21:51, François Dumont wrote: > > Here is another version with enhanced sizeof/alignof static_assert in > string-inst.cc for the std::__cow_string definition from . > The assertions in cow-stdexcept.cc are now checking the definition > which is in the same file. > > On 13/08/2023 15:27, François Dumont wrote: >> >> Here is the fixed patch tested in all 3 modes: >> >> - _GLIBCXX_USE_DUAL_ABI >> >> - !_GLIBCXX_USE_DUAL_ABI && !_GLIBCXX_USE_CXX11_ABI >> >> - !_GLIBCXX_USE_DUAL_ABI && _GLIBCXX_USE_CXX11_ABI >> >> I don't know what you have in mind for the change below but I wanted >> to let you know that I tried to put COW std::basic_string into a >> nested __cow namespace when _GLIBCXX_USE_CXX11_ABI. But it had more >> impact on string-inst.cc so I preferred the macro substitution approach. >> >> There are some test failing when !_GLIBCXX_USE_CXX11_ABI that are >> unrelated with my changes. I'll propose fixes in coming days. >> >>     libstdc++: [_GLIBCXX_INLINE_VERSION] Use cxx11 abi [PR83077] >> >>     Use cxx11 abi when activating versioned namespace mode. To do support >>     a new configuration mode where !_GLIBCXX_USE_DUAL_ABI and >> _GLIBCXX_USE_CXX11_ABI. >> >>     The main change is that std::__cow_string is now defined whenever >> _GLIBCXX_USE_DUAL_ABI >>     or _GLIBCXX_USE_CXX11_ABI is true. Implementation is using >> available std::string in >>     case of dual abi and a subset of it when it's not. >> >>     On the other side std::__sso_string is defined only when >> _GLIBCXX_USE_DUAL_ABI is true >>     and _GLIBCXX_USE_CXX11_ABI is false. Meaning that >> std::__sso_string is a typedef for the >>     cow std::string implementation when dual abi is disabled and cow >> string is being used. >> >>     libstdcxx-v3/ChangeLog: >> >>             PR libstdc++/83077 >>             * acinclude.m4 [GLIBCXX_ENABLE_LIBSTDCXX_DUAL_ABI]: >> Default to "new" libstdcxx abi. >>             * config/locale/dragonfly/monetary_members.cc >> [!_GLIBCXX_USE_DUAL_ABI]: Define money_base >>             members. >>             * config/locale/generic/monetary_members.cc >> [!_GLIBCXX_USE_DUAL_ABI]: Likewise. >>             * config/locale/gnu/monetary_members.cc >> [!_GLIBCXX_USE_DUAL_ABI]: Likewise. >>             * config/locale/gnu/numeric_members.cc >> [!_GLIBCXX_USE_DUAL_ABI](__narrow_multibyte_chars): Define. >>             * configure: Regenerate. >>             * include/bits/c++config >> [_GLIBCXX_INLINE_VERSION](_GLIBCXX_NAMESPACE_CXX11, >> _GLIBCXX_BEGIN_NAMESPACE_CXX11): >>             Define empty. >> [_GLIBCXX_INLINE_VERSION](_GLIBCXX_END_NAMESPACE_CXX11, >> _GLIBCXX_DEFAULT_ABI_TAG): >>             Likewise. >>             * include/bits/cow_string.h [!_GLIBCXX_USE_CXX11_ABI]: >> Define a light version of COW >>             basic_string as __std_cow_string for use in stdexcept. >>             * include/std/stdexcept [_GLIBCXX_USE_CXX11_ABI]: Define >> __cow_string. >>             (__cow_string(const char*)): New. >>             (__cow_string::c_str()): New. >>             * python/libstdcxx/v6/printers.py >> (StdStringPrinter::__init__): Set self.new_string to True >>             when std::__8::basic_string type is found. >>             * src/Makefile.am >> [ENABLE_SYMVERS_GNU_NAMESPACE](ldbl_alt128_compat_sources): Define empty. >>             * src/Makefile.in: Regenerate. >>             * src/c++11/Makefile.am (cxx11_abi_sources): Rename into... >>             (dual_abi_sources): ...this. Also move cow-local_init.cc, >> cxx11-hash_tr1.cc, >>             cxx11-ios_failure.cc entries to... >>             (sources): ...this. >>             (extra_string_inst_sources): Move cow-fstream-inst.cc, >> cow-sstream-inst.cc, cow-string-inst.cc, >>             cow-string-io-inst.cc, cow-wtring-inst.cc, >> cow-wstring-io-inst.cc, cxx11-locale-inst.cc, >>             cxx11-wlocale-inst.cc entries to... >>             (inst_sources): ...this. >>             * src/c++11/Makefile.in: Regenerate. >>             * src/c++11/cow-fstream-inst.cc [_GLIBCXX_USE_CXX11_ABI]: >> Skip definitions. >>             * src/c++11/cow-locale_init.cc [_GLIBCXX_USE_CXX11_ABI]: >> Skip definitions. >>             * src/c++11/cow-sstream-inst.cc [_GLIBCXX_USE_CXX11_ABI]: >> Skip definitions. >>             * src/c++11/cow-stdexcept.cc [_GLIBCXX_USE_CXX11_ABI]: >> Include . >>             [_GLIBCXX_USE_DUAL_ABI || >> _GLIBCXX_USE_CXX11_ABI](__cow_string): Redefine before >>             including . Define >> _GLIBCXX_DEFINE_STDEXCEPT_INSTANTIATIONS so that >>             __cow_string definition in is skipped. >>             [_GLIBCXX_USE_CXX11_ABI]: Skip Transaction Memory TS >> definitions. >>             Move static_assert to check std::_cow_string abi layout to... >>             * src/c++11/string-inst.cc: ...here. >>             (_GLIBCXX_DEFINING_CXX11_ABI_INSTANTIATIONS): Define >> following _GLIBCXX_USE_CXX11_ABI >>             value. >>             [_GLIBCXX_USE_CXX11_ABI && >> !_GLIBCXX_DEFINING_CXX11_ABI_INSTANTIATIONS]: >>             Define _GLIBCXX_DEFINING_COW_STRING_INSTANTIATIONS. >> Include . >>             Define basic_string as __std_cow_string for the current >> translation unit. >>             * src/c++11/cow-string-inst.cc [_GLIBCXX_USE_CXX11_ABI]: >> Skip definitions. >>             * src/c++11/cow-string-io-inst.cc >> [_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>             * src/c++11/cow-wstring-inst.cc [_GLIBCXX_USE_CXX11_ABI]: >> Skip definitions. >>             * src/c++11/cow-wstring-io-inst.cc >> [_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>             * src/c++11/cxx11-hash_tr1.cc [!_GLIBCXX_USE_CXX11_ABI]: >> Skip definitions. >>             * src/c++11/cxx11-ios_failure.cc >> [!_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>             [!_GLIBCXX_USE_DUAL_ABI] (__ios_failure): Remove. >>             * src/c++11/cxx11-locale-inst.cc: Cleanup, just include >> locale-inst.cc. >>             * src/c++11/cxx11-stdexcept.cc [!_GLIBCXX_USE_CXX11_ABI]: >> Skip definitions. >>             * src/c++11/cxx11-wlocale-inst.cc >> [!_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>             * src/c++11/locale-inst-numeric.h >> [!_GLIBCXX_USE_DUAL_ABI](std::use_facet>, >> std::use_facet>): Instantiate. >> [!_GLIBCXX_USE_DUAL_ABI](std::has_facet>, >> std::has_facet>): Instantiate. >>             [!_GLIBCXX_USE_DUAL_ABI](std::num_get> istreambuf_iterator>): Instantiate. >>             [!_GLIBCXX_USE_DUAL_ABI](std::num_put> ostreambuf_iterator>): Instantiate. >>             * src/c++11/locale-inst.cc [!_GLIBCXX_USE_DUAL_ABI]: >> Build only when configured >>             _GLIBCXX_USE_CXX11_ABI is equal to currently built abi. >>             [!_GLIBCXX_USE_DUAL_ABI](__moneypunct_cache): >> Instantiate. >>             [!_GLIBCXX_USE_DUAL_ABI](__moneypunct_cache): >> Instantiate. >> [!_GLIBCXX_USE_DUAL_ABI](__numpunct_cache): Instantiate. >>             [!_GLIBCXX_USE_DUAL_ABI](__timepunct): Instantiate. >> [!_GLIBCXX_USE_DUAL_ABI](__timepunct_cache): Instantiate. >>             [!_GLIBCXX_USE_DUAL_ABI](time_put> ostreambuf_iterator>): Instantiate. >>             [!_GLIBCXX_USE_DUAL_ABI](time_put_byname> ostreambuf_iterator>): Instantiate. >> [!_GLIBCXX_USE_DUAL_ABI](__ctype_abstract_base): Instantiate. >>             [!_GLIBCXX_USE_DUAL_ABI](ctype_byname): Instantiate. >> [!_GLIBCXX_USE_DUAL_ABI](__codecvt_abstract_base> mbstate_t>): Instantiate. >>             [!_GLIBCXX_USE_DUAL_ABI](codecvt_byname> mbstate_t>): Instantiate. >> [!_GLIBCXX_USE_DUAL_ABI](use_facet>(const locale&)): >> Instantiate. >> [!_GLIBCXX_USE_DUAL_ABI](use_facet>(const >> locale&)): Instantiate. >> [!_GLIBCXX_USE_DUAL_ABI](use_facet<__timepunct>(const locale&)): >> Instantiate. >> [!_GLIBCXX_USE_DUAL_ABI](use_facet>(const locale&)): >> Instantiate. >> [!_GLIBCXX_USE_DUAL_ABI](has_facet>(const locale&)): >> Instantiate. >> [!_GLIBCXX_USE_DUAL_ABI](has_facet>(const >> locale&)): Instantiate. >> [!_GLIBCXX_USE_DUAL_ABI](has_facet<__timepunct>(const locale&)): >> Instantiate. >> [!_GLIBCXX_USE_DUAL_ABI](has_facet>(const locale&)): >> Instantiate. >>             [!_GLIBCXX_USE_DUAL_ABI](__add_grouping): Define. >>             [!_GLIBCXX_USE_DUAL_ABI](__pad>): >> Instantiate. >>             [!_GLIBCXX_USE_DUAL_ABI](__int_to_char(C*, unsigned long, >> const C*, >>             ios_base::fmtflags, bool)): Define. >>             [!_GLIBCXX_USE_DUAL_ABI](__int_to_char(C*, unsigned long >> long, const C*, >>             ios_base::fmtflags, bool)): Define. >>             * src/c++11/wlocale-inst.cc [!_GLIBCXX_USE_CXX11_ABI]: >> Skip definitions. >>             * src/c++98/Makefile.am (cxx11_abi_sources): Remove, >> unique cow-istream-string.cc entry >>             move to... >>             (inst_sources): ...this. >>             * src/c++98/Makefile.in: Regenerate. >>             * src/c++98/cow-istream-string.cc: Include >> . >>             [_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>             * src/c++98/hash_tr1.cc [_GLIBCXX_USE_CXX11_ABI]: Skip >> definitions. >>             * src/c++98/ios_failure.cc >> [_GLIBCXX_USE_CXX11_ABI][_GLIBCXX_USE_DUAL_ABI]: Skip definitions. >>             * src/c++98/istream-string.cc [!_GLIBCXX_USE_DUAL_ABI]: >> Build only when configured >>             _GLIBCXX_USE_CXX11_ABI is equal to currently built abi. >>             * src/c++98/locale_facets.cc >> [_GLIBCXX_USE_CXX11_ABI](__verify_grouping): Remove. >>             * src/c++98/stdexcept.cc >>             [_GLIBCXX_USE_CXX11_ABI](logic_error(const string&): Remove. >>             [_GLIBCXX_USE_CXX11_ABI](domain_error(const string&): Remove. >>             [_GLIBCXX_USE_CXX11_ABI](invalid_argument(const string&): >> Remove. >>             [_GLIBCXX_USE_CXX11_ABI](length_error(const string&): Remove. >>             [_GLIBCXX_USE_CXX11_ABI](out_of_range(const string&): Remove. >>             [_GLIBCXX_USE_CXX11_ABI](runtime_error(const string&): >> Remove. >>             [_GLIBCXX_USE_CXX11_ABI](range_error(const string&): Remove. >>             [_GLIBCXX_USE_CXX11_ABI](overflow_error(const string&): >> Remove. >>             [_GLIBCXX_USE_CXX11_ABI](underflow_error(const string&): >> Remove. >> >> Ok to commit ? >> >> François >> >> On 11/08/2023 09:51, Jonathan Wakely wrote: >>> >>> >>> On Fri, 11 Aug 2023, 06:44 François Dumont via Libstdc++, >>> > wrote: >>> >>> I hadn't tested the most basic default configuration and it is >>> failing, >>> >>> >>> I did wonder about that when you said which configurations you had >>> tested :) >>> >>> >>> >>> >>> I need some more time yet. >>> >>> >>> OK, no problem. >>> >>> I actually have an idea for replacing the __cow_string hack with >>> something better, which I will try to work on next week. That might >>> make things simpler for you, as you won't need the __std_cow_string >>> macro. >>> >>> >>> >>> >>> >>> François >>> >>> >>> On 10/08/2023 07:13, François Dumont wrote: >>> > Hi >>> > >>> > I've eventually completed this work. >>> > >>> > This evolution will allow to build libstdc++ without dual abi and >>> > using cxx11 abi. For the moment such a config is only accessible >>> > through the --enable-symvers=gnu-versioned-namespace >>> configuration. >>> > >>> >     libstdc++: [_GLIBCXX_INLINE_VERSION] Use cxx11 abi [PR83077] >>> > >>> >     Use cxx11 abi when activating versioned namespace mode. >>> > >>> >     libstdcxx-v3/ChangeLog: >>> > >>> >             PR libstdc++/83077 >>> >             * acinclude.m4 [GLIBCXX_ENABLE_LIBSTDCXX_DUAL_ABI]: >>> > Default to "new" libstdcxx abi. >>> >             * config/locale/dragonfly/monetary_members.cc >>> > [!_GLIBCXX_USE_DUAL_ABI]: Define money_base >>> >             members. >>> >             * config/locale/generic/monetary_members.cc >>> > [!_GLIBCXX_USE_DUAL_ABI]: Likewise. >>> >             * config/locale/gnu/monetary_members.cc >>> > [!_GLIBCXX_USE_DUAL_ABI]: Likewise. >>> >             * config/locale/gnu/numeric_members.cc >>> > [!_GLIBCXX_USE_DUAL_ABI](__narrow_multibyte_chars): Define. >>> >             * configure: Regenerate. >>> >             * include/bits/c++config >>> > [_GLIBCXX_INLINE_VERSION](_GLIBCXX_NAMESPACE_CXX11, >>> > _GLIBCXX_BEGIN_NAMESPACE_CXX11): >>> >             Define empty. >>> > [_GLIBCXX_INLINE_VERSION](_GLIBCXX_END_NAMESPACE_CXX11, >>> > _GLIBCXX_DEFAULT_ABI_TAG): >>> >             Likewise. >>> >             * include/bits/cow_string.h >>> [!_GLIBCXX_USE_CXX11_ABI]: >>> > Define a light version of COW >>> >             basic_string as __std_cow_string for use in stdexcept. >>> >             * include/std/stdexcept [_GLIBCXX_USE_CXX11_ABI]: >>> Define >>> > __cow_string. >>> >             (__cow_string(const char*)): New. >>> >             (__cow_string::c_str()): New. >>> >             * python/libstdcxx/v6/printers.py >>> > (StdStringPrinter::__init__): Set self.new_string to True >>> >             when std::__8::basic_string type is found. >>> >             * src/Makefile.am >>> > [ENABLE_SYMVERS_GNU_NAMESPACE](ldbl_alt128_compat_sources): >>> Define empty. >>> >             * src/Makefile.in: Regenerate. >>> >             * src/c++11/Makefile.am (cxx11_abi_sources): >>> Rename into... >>> >             (dual_abi_sources): ...this. Also move >>> cow-local_init.cc, >>> > cxx11-hash_tr1.cc, >>> >             cxx11-ios_failure.cc entries to... >>> >             (sources): ...this. >>> >             (extra_string_inst_sources): Move >>> cow-fstream-inst.cc, >>> > cow-sstream-inst.cc, cow-string-inst.cc, >>> >             cow-string-io-inst.cc, cow-wtring-inst.cc, >>> > cow-wstring-io-inst.cc, cxx11-locale-inst.cc, >>> >             cxx11-wlocale-inst.cc entries to... >>> >             (inst_sources): ...this. >>> >             * src/c++11/Makefile.in: Regenerate. >>> >             * src/c++11/cow-fstream-inst.cc >>> [_GLIBCXX_USE_CXX11_ABI]: >>> > Skip definitions. >>> >             * src/c++11/cow-locale_init.cc >>> [_GLIBCXX_USE_CXX11_ABI]: >>> > Skip definitions. >>> >             * src/c++11/cow-sstream-inst.cc >>> [_GLIBCXX_USE_CXX11_ABI]: >>> > Skip definitions. >>> >             * src/c++11/cow-stdexcept.cc >>> [_GLIBCXX_USE_CXX11_ABI]: >>> > Include . >>> >             [_GLIBCXX_USE_DUAL_ABI || >>> > _GLIBCXX_USE_CXX11_ABI](__cow_string): Redefine before including >>> >             . Define >>> > _GLIBCXX_DEFINE_STDEXCEPT_INSTANTIATIONS so that __cow_string >>> definition >>> >             in is skipped. >>> >             [_GLIBCXX_USE_CXX11_ABI]: Skip Transaction Memory TS >>> > definitions. >>> >             * src/c++11/cow-string-inst.cc >>> [_GLIBCXX_USE_CXX11_ABI]: >>> > Skip definitions. >>> >             * src/c++11/cow-string-io-inst.cc >>> > [_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>> >             * src/c++11/cow-wstring-inst.cc >>> [_GLIBCXX_USE_CXX11_ABI]: >>> > Skip definitions. >>> >             * src/c++11/cow-wstring-io-inst.cc >>> > [_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>> >             * src/c++11/cxx11-hash_tr1.cc >>> [!_GLIBCXX_USE_CXX11_ABI]: >>> > Skip definitions. >>> >             * src/c++11/cxx11-ios_failure.cc >>> > [!_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>> >             [!_GLIBCXX_USE_DUAL_ABI] (__ios_failure): Remove. >>> >             * src/c++11/cxx11-locale-inst.cc: Cleanup, just >>> include >>> > locale-inst.cc. >>> >             * src/c++11/cxx11-stdexcept.cc >>> [!_GLIBCXX_USE_CXX11_ABI]: >>> > Skip definitions. >>> >             * src/c++11/cxx11-wlocale-inst.cc >>> > [!_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>> >             * src/c++11/locale-inst-numeric.h >>> > [!_GLIBCXX_USE_DUAL_ABI](std::use_facet>, >>> > std::use_facet>): Instantiate. >>> > [!_GLIBCXX_USE_DUAL_ABI](std::has_facet>, >>> > std::has_facet>): Instantiate. >>> > [!_GLIBCXX_USE_DUAL_ABI](std::num_get>> > istreambuf_iterator>): Instantiate. >>> > [!_GLIBCXX_USE_DUAL_ABI](std::num_put>> > ostreambuf_iterator>): Instantiate. >>> >             * src/c++11/locale-inst.cc >>> [!_GLIBCXX_USE_DUAL_ABI]: Build >>> > only when configured >>> >             _GLIBCXX_USE_CXX11_ABI is equal to currently built >>> abi. >>> > [!_GLIBCXX_USE_DUAL_ABI](__moneypunct_cache): >>> > Instantiate. >>> > [!_GLIBCXX_USE_DUAL_ABI](__moneypunct_cache): >>> > Instantiate. >>> > [!_GLIBCXX_USE_DUAL_ABI](__numpunct_cache): Instantiate. >>> > [!_GLIBCXX_USE_DUAL_ABI](__timepunct): Instantiate. >>> > [!_GLIBCXX_USE_DUAL_ABI](__timepunct_cache): Instantiate. >>> > [!_GLIBCXX_USE_DUAL_ABI](time_put>> > ostreambuf_iterator>): Instantiate. >>> > [!_GLIBCXX_USE_DUAL_ABI](time_put_byname>> > ostreambuf_iterator>): Instantiate. >>> > [!_GLIBCXX_USE_DUAL_ABI](__ctype_abstract_base): Instantiate. >>> > [!_GLIBCXX_USE_DUAL_ABI](ctype_byname): Instantiate. >>> > [!_GLIBCXX_USE_DUAL_ABI](__codecvt_abstract_base>> > mbstate_t>): Instantiate. >>> > [!_GLIBCXX_USE_DUAL_ABI](codecvt_byname>> > mbstate_t>): Instantiate. >>> > [!_GLIBCXX_USE_DUAL_ABI](codecvt_byname>> > mbstate_t>): Instantiate. >>> > [!_GLIBCXX_USE_DUAL_ABI](use_facet>(const locale&)): >>> > Instantiate. >>> > [!_GLIBCXX_USE_DUAL_ABI](use_facet>> > mbstate_t>>(const locale&)): Instantiate. >>> > [!_GLIBCXX_USE_DUAL_ABI](use_facet<__timepunct>(const >>> locale&)): >>> > Instantiate. >>> > [!_GLIBCXX_USE_DUAL_ABI](use_facet>(const locale&)): >>> > Instantiate. >>> > [!_GLIBCXX_USE_DUAL_ABI](has_facet>(const locale&)): >>> > Instantiate. >>> > [!_GLIBCXX_USE_DUAL_ABI](has_facet>> > mbstate_t>>(const locale&)): Instantiate. >>> > [!_GLIBCXX_USE_DUAL_ABI](has_facet<__timepunct>(const >>> locale&)): >>> > Instantiate. >>> > [!_GLIBCXX_USE_DUAL_ABI](has_facet>(const locale&)): >>> > Instantiate. >>> > [!_GLIBCXX_USE_DUAL_ABI](__add_grouping): Define. >>> >             [!_GLIBCXX_USE_DUAL_ABI](__pad>): >>> > Instantiate. >>> > [!_GLIBCXX_USE_DUAL_ABI](__int_to_char(C*, unsigned long, >>> > const C*, >>> >             ios_base::fmtflags, bool)): Define. >>> > [!_GLIBCXX_USE_DUAL_ABI](__int_to_char(C*, unsigned long >>> > long, const C*, >>> >             ios_base::fmtflags, bool)): Define. >>> >             * src/c++11/string-inst.cc >>> > (_GLIBCXX_DEFINING_CXX11_ABI_INSTANTIATIONS): Define following >>> >             _GLIBCXX_USE_CXX11_ABI value. >>> >             [_GLIBCXX_USE_CXX11_ABI && >>> > !_GLIBCXX_DEFINING_CXX11_ABI_INSTANTIATIONS]: >>> >             Define _GLIBCXX_DEFINING_COW_STRING_INSTANTIATIONS. >>> > Include . >>> >             Define basic_string as __std_cow_string for the >>> current >>> > translation unit. >>> >             * src/c++11/wlocale-inst.cc >>> [!_GLIBCXX_USE_CXX11_ABI]: >>> > Skip definitions. >>> >             * src/c++98/Makefile.am (cxx11_abi_sources): Remove, >>> > unique cow-istream-string.cc entry >>> >             move to... >>> >             (inst_sources): ...this. >>> >             * src/c++98/Makefile.in: Regenerate. >>> >             * src/c++98/cow-istream-string.cc: Include >>> > . >>> >             [_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>> >             * src/c++98/hash_tr1.cc [_GLIBCXX_USE_CXX11_ABI]: >>> Skip >>> > definitions. >>> >             * src/c++98/ios_failure.cc >>> > [_GLIBCXX_USE_CXX11_ABI][_GLIBCXX_USE_DUAL_ABI]: Skip definitions. >>> >             * src/c++98/istream-string.cc >>> [!_GLIBCXX_USE_DUAL_ABI]: >>> > Build only when configured >>> >             _GLIBCXX_USE_CXX11_ABI is equal to currently built >>> abi. >>> >             * src/c++98/locale_facets.cc >>> > [_GLIBCXX_USE_CXX11_ABI](__verify_grouping): Remove. >>> >             * src/c++98/stdexcept.cc >>> > [_GLIBCXX_USE_CXX11_ABI](logic_error(const string&): Remove. >>> > [_GLIBCXX_USE_CXX11_ABI](domain_error(const string&): Remove. >>> > [_GLIBCXX_USE_CXX11_ABI](invalid_argument(const string&): >>> > Remove. >>> > [_GLIBCXX_USE_CXX11_ABI](length_error(const string&): Remove. >>> > [_GLIBCXX_USE_CXX11_ABI](out_of_range(const string&): Remove. >>> > [_GLIBCXX_USE_CXX11_ABI](runtime_error(const string&): >>> > Remove. >>> > [_GLIBCXX_USE_CXX11_ABI](range_error(const string&): Remove. >>> > [_GLIBCXX_USE_CXX11_ABI](overflow_error(const string&): >>> > Remove. >>> > [_GLIBCXX_USE_CXX11_ABI](underflow_error(const string&): >>> > Remove. >>> > >>> > Tested under linux x86_64 with following configs: >>> > >>> > --enable-symvers=gnu-versioned-namespace >>> > >>> > --disable-libstdcxx-dual-abi >>> > >>> > Ok to commit ? >>> > >>> > François >>> > >>> > >>>