[Bug libstdc++/68737] FAIL: 22_locale/num_put/put/char/14220.cc execution test

redi at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Sep 4 16:35:00 GMT 2018


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68737

--- Comment #18 from Jonathan Wakely <redi at gcc dot gnu.org> ---
I don't think we care about glibc < 2.0.6 though.

__max_digits * 4 is not enough for:

  std::cout << std::fixed << std::numeric_limits<long double>::max();

That needs 4940 bytes, but we don't want to unconditionally alloca that amount.

Maybe:

--- a/libstdc++-v3/include/bits/locale_facets.tcc
+++ b/libstdc++-v3/include/bits/locale_facets.tcc
@@ -1008,6 +1008,11 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
          __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
                                        __fbuf, __v);

+#ifdef __hpux
+       if (__len == -1)
+         __len = __cs_size = 5000;
+#endif
+
        // If the buffer was not large enough, try again with the correct size.
        if (__len >= __cs_size)
          {
@@ -1020,6 +1025,11 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
              __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
                                            __fbuf, __v);
          }
+
+#ifdef __hpux
+       if (__len == -1)
+         return __s;
+#endif
 #else
        // Consider the possibility of long ios_base::fixed outputs
        const bool __fixed = __io.flags() & ios_base::fixed;


More information about the Gcc-bugs mailing list