This is the mail archive of the 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: [v3 PATCH] Implement LWG 2221, No formatted output operator for nullptr

Hi Jonathan,

> On 04/12/17 23:04 +0000, Jonathan Wakely wrote:
>>On 03/12/17 23:08 +0200, Ville Voutilainen wrote:
>>>Tested on Linux-x64.
>>>2017-11-14  Ville Voutilainen  <>
>>>   Implement LWG 2221
>>>   * include/std/ostream (operator<<(nullptr_t)): New.
>>>   * testsuite/27_io/basic_ostream/inserters_other/char/ New.
>>>diff --git a/libstdc++-v3/include/std/ostream
>>> b/libstdc++-v3/include/std/ostream
>>>index f7cab03..18011bc 100644
>>>--- a/libstdc++-v3/include/std/ostream
>>>+++ b/libstdc++-v3/include/std/ostream
>>>@@ -245,6 +245,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>>>      operator<<(const void* __p)
>>>      { return _M_insert(__p); }
>>>+#if __cplusplus > 201402L
>>>+      __ostream_type&
>>>+      operator<<(nullptr_t)
>>>+      { return *this << "nullptr"; }
>>As discussed on IRC, this requires a new symbol to be exported for the
>>std::ostream and std::wostream explicit instantiations, or the new
>>test will fail to link at -O0.
>>That should wait for stage 1.
> This patch for a C++17 feature (posted over a year ago) should have
> gone in during stage 1. I've taken care of the symbol exports that
> were missing from the original patch.
> Tested x86_64-linux, committed to trunk.

this patch broke Solaris bootstrap:

ld: fatal: libstdc++-symbols.ver-sun: 7117: symbol 'std::basic_ostream<char, std::char_traits<char> >::operator<<(decltype(nullptr))': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 7119: symbol 'std::basic_ostream<wchar_t, std::char_traits<wchar_t> >::operator<<(decltype(nullptr))': symbol version conflict

ld: fatal: libstdc++-symbols.ver-sun: 7117: symbol '_ZNSolsEDn': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 7119: symbol '_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEDn': symbol version conflict

Again, there were two matches for those two symbols:

    ##_ZNSolsE*[^Dg] (glob)
    ##_ZNSolsEDn (glob)

    ##_ZNSt13basic_ostreamIwSt11char_traitsIwEElsE*[^Dg] (glob)
    ##_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEDn (glob)

ISTM that the patterns were backwards.  The following patch fixes this
and allowed i386-pc-solaris2.11 bootstrap to complete without
regressions relative to the last successful one.

Ok for mainline?


Rainer Orth, Center for Biotechnology, Bielefeld University

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

	* config/abi/pre/gnu.ver(GLIBCXX_3.4): Fix pattern.
	(GLIBCXX_3.4.21): Likewise.

# HG changeset patch
# Parent  f8d5e17fd8042e330c31d714b9c619c1807d93cb
Fix link on Solaris with C++17 LWG 2221 support

diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver
--- a/libstdc++-v3/config/abi/pre/gnu.ver
+++ b/libstdc++-v3/config/abi/pre/gnu.ver
@@ -495,7 +495,7 @@ GLIBCXX_3.4 {
-    _ZNSolsE*[^Dg];
+    _ZNSolsE[^Dg]*;
     # std::basic_ostream<wchar_t>
@@ -509,7 +509,7 @@ GLIBCXX_3.4 {
-    _ZNSt13basic_ostreamIwSt11char_traitsIwEElsE*[^Dg];
+    _ZNSt13basic_ostreamIwSt11char_traitsIwEElsE[^Dg]*;
     # std::ostream operators and inserters

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