When I added this explicit specialization in r14-1433-gf150a084e25eaa I
used the wrong value for the number of mantissa digits (I used 112
instead of 113). Then when I refactored it in r14-1582-g6261d10521f9fd I
used the value calculated from the incorrect value (35 instead of 36).

libstdc++-v3/ChangeLog:

        PR libstdc++/121374
        * include/std/limits (numeric_limits<__float128>::max_digits10):
        Fix value.
        * testsuite/18_support/numeric_limits/128bit.cc: Check value.
---

Tested x86_64-linux.

Pushed to trunk. Backports to gcc-14 and gcc-15 needed too.

 libstdc++-v3/include/std/limits                            | 2 +-
 libstdc++-v3/testsuite/18_support/numeric_limits/128bit.cc | 5 +++++
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/libstdc++-v3/include/std/limits b/libstdc++-v3/include/std/limits
index 3567a3284006..49ce7c935e9d 100644
--- a/libstdc++-v3/include/std/limits
+++ b/libstdc++-v3/include/std/limits
@@ -2128,7 +2128,7 @@ __glibcxx_float_n(128)
       static _GLIBCXX_USE_CONSTEXPR int digits = 113;
       static _GLIBCXX_USE_CONSTEXPR int digits10 = 33;
 #if __cplusplus >= 201103L
-      static constexpr int max_digits10 = 35;
+      static constexpr int max_digits10 = 36;
 #endif
       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
       static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/128bit.cc 
b/libstdc++-v3/testsuite/18_support/numeric_limits/128bit.cc
index b13d83776ba3..bf12b65f91a5 100644
--- a/libstdc++-v3/testsuite/18_support/numeric_limits/128bit.cc
+++ b/libstdc++-v3/testsuite/18_support/numeric_limits/128bit.cc
@@ -4,6 +4,11 @@
 
 #if __SIZEOF_FLOAT128__
 __extension__ template class std::numeric_limits<__float128>;
+
+# if __cplusplus >= 201103L
+static_assert( std::numeric_limits<__float128>::max_digits10 == 36,
+              "PR libstdc++/121374" );
+# endif
 #endif
 
 #if __SIZEOF_INT128__
-- 
2.50.1

Reply via email to