On 28/11/22 19:35, Jonathan Wakely wrote:


On Mon, 28 Nov 2022 at 06:07, François Dumont via Libstdc++ <libstd...@gcc.gnu.org <mailto:libstdc%2b...@gcc.gnu.org>> wrote:

    This patch is fixing those tests:

    20_util/to_chars/float128_c++23.cc
    std/format/formatter/requirements.cc
    std/format/functions/format.cc
    std/format/functions/format_to_n.cc
    std/format/functions/size.cc
    std/format/functions/vformat_to.cc
    std/format/string.cc

    Note that symbols used in <format> for __ibm128 and __iee128 are
    untested.


We don't need to do this for those symbols, the ALT128 config is incompatible with versioned namespace. If you're using the versioned namespace, you don't need backwards compatibility with the old long double ABI.



Here is the simplified patch then.

    libstdc++: [_GLIBCXX_INLINE_VERSION] Add to_chars/from_chars symbols export

    libstdc++-v3/ChangeLog

            * include/std/format [_GLIBCXX_INLINE_VERSION](to_chars): Adapt __asm symbol
            specifications.
            * config/abi/pre/gnu-versioned-namespace.ver: Add to_chars/from_chars symbols
            export.

Ok to commit ?

François
diff --git a/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver b/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver
index 06ccaa80a58..7fc81514808 100644
--- a/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver
+++ b/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver
@@ -142,6 +142,12 @@ GLIBCXX_8.0 {
     _ZN14__gnu_parallel9_Settings3getEv;
     _ZN14__gnu_parallel9_Settings3setERS0_;
 
+    # to_chars/from_chars _Float128
+    _ZNSt3__88to_charsEPcS0_DF128_;
+    _ZNSt3__88to_charsEPcS0_DF128_NS_12chars_formatE;
+    _ZNSt3__88to_charsEPcS0_DF128_NS_12chars_formatEi;
+    _ZNSt3__810from_charsEPKcS1_RDF128_NS_12chars_formatE;
+
   local:
     *;
 };
diff --git a/libstdc++-v3/include/std/format b/libstdc++-v3/include/std/format
index 23ffbdabed8..fb7a02cec57 100644
--- a/libstdc++-v3/include/std/format
+++ b/libstdc++-v3/include/std/format
@@ -1288,15 +1288,27 @@ namespace __format
   // Make them available as std::__format::to_chars.
   to_chars_result
   to_chars(char*, char*, _Float128) noexcept
+#  if _GLIBCXX_INLINE_VERSION
+    __asm("_ZNSt3__88to_charsEPcS0_DF128_");
+#  else
     __asm("_ZSt8to_charsPcS_DF128_");
+#  endif
 
   to_chars_result
   to_chars(char*, char*, _Float128, chars_format) noexcept
+#  if _GLIBCXX_INLINE_VERSION
+    __asm("_ZNSt3__88to_charsEPcS0_DF128_NS_12chars_formatE");
+#  else
     __asm("_ZSt8to_charsPcS_DF128_St12chars_format");
+#  endif
 
   to_chars_result
   to_chars(char*, char*, _Float128, chars_format, int) noexcept
+#  if _GLIBCXX_INLINE_VERSION
+    __asm("_ZNSt3__88to_charsEPcS0_DF128_NS_12chars_formatEi");
+#  else
     __asm("_ZSt8to_charsPcS_DF128_St12chars_formati");
+#  endif
 # endif
 #endif
 

Reply via email to