Deprecate numeric_limits::has_denorm, numeric_limits::has_denorm_loss,
and the float_denorm_style enum as specified by P2614R2 (C++23).

The deprecation uses _GLIBCXX23_DEPRECATED on the member declarations,
with #pragma GCC diagnostic push/pop to suppress warnings from the
deprecated float_denorm_style type within the header itself.  Internal
uses of has_denorm (e.g. in is_iec559 initialization) are also wrapped
with diagnostic suppression.

libstdc++-v3/ChangeLog:

        * include/std/limits (float_denorm_style): Deprecate.
        (has_denorm, has_denorm_loss): Deprecate in all specializations.
        Suppress deprecated warnings for internal uses in is_iec559.
        * include/bits/max_size_type.h (has_denorm, has_denorm_loss):
        Deprecate.
        * testsuite/18_support/numeric_limits/char16_32_t.cc: Suppress
        the deprecation warning.
        * testsuite/18_support/numeric_limits/char8_t.cc: Likewise.
        * testsuite/18_support/numeric_limits/denorm_min.cc: Likewise.
        * testsuite/18_support/numeric_limits/dr559.cc: Likewise.
        * testsuite/18_support/numeric_limits/requirements/constexpr_data.cc:
        Likewise.
        * testsuite/18_support/numeric_limits/specialization_default_values.cc:
        Likewise.
        * testsuite/std/ranges/iota/max_size_type.cc: Likewise.
        * testsuite/18_support/numeric_limits/deprecated-2b.cc: New test.

Signed-off-by: Fernando Pelliccioni <[email protected]>
---
 libstdc++-v3/include/bits/max_size_type.h     |  14 +-
 libstdc++-v3/include/std/limits               | 209 ++++++++++++++----
 .../18_support/numeric_limits/char16_32_t.cc  |   1 +
 .../18_support/numeric_limits/char8_t.cc      |   1 +
 .../18_support/numeric_limits/denorm_min.cc   |   1 +
 .../numeric_limits/deprecated-2b.cc           |  28 +++
 .../18_support/numeric_limits/dr559.cc        |   1 +
 .../requirements/constexpr_data.cc            |   1 +
 .../specialization_default_values.cc          |   1 +
 .../std/ranges/iota/max_size_type.cc          |   1 +
 10 files changed, 213 insertions(+), 45 deletions(-)
 create mode 100644 
libstdc++-v3/testsuite/18_support/numeric_limits/deprecated-2b.cc

diff --git a/libstdc++-v3/include/bits/max_size_type.h 
b/libstdc++-v3/include/bits/max_size_type.h
index 042aad10a13..cc7fe2d0396 100644
--- a/libstdc++-v3/include/bits/max_size_type.h
+++ b/libstdc++-v3/include/bits/max_size_type.h
@@ -791,9 +791,12 @@ namespace ranges
       static constexpr bool has_infinity = false;
       static constexpr bool has_quiet_NaN = false;
       static constexpr bool has_signaling_NaN = false;
-      static constexpr bool has_denorm_loss = false;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+      static constexpr bool has_denorm_loss _GLIBCXX23_DEPRECATED = false;
       static constexpr bool tinyness_before = false;
-      static constexpr float_denorm_style has_denorm = denorm_absent;
+      static constexpr float_denorm_style has_denorm _GLIBCXX23_DEPRECATED = 
denorm_absent;
+#pragma GCC diagnostic pop
       static constexpr float_round_style round_style = round_toward_zero;
 
       static constexpr _Sp
@@ -858,9 +861,12 @@ namespace ranges
       static constexpr bool has_infinity = false;
       static constexpr bool has_quiet_NaN = false;
       static constexpr bool has_signaling_NaN = false;
-      static constexpr bool has_denorm_loss = false;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+      static constexpr bool has_denorm_loss _GLIBCXX23_DEPRECATED = false;
       static constexpr bool tinyness_before = false;
-      static constexpr float_denorm_style has_denorm = denorm_absent;
+      static constexpr float_denorm_style has_denorm _GLIBCXX23_DEPRECATED = 
denorm_absent;
+#pragma GCC diagnostic pop
       static constexpr float_round_style round_style = round_toward_zero;
 
       static constexpr _Dp
diff --git a/libstdc++-v3/include/std/limits b/libstdc++-v3/include/std/limits
index f0ba2851a0a..b4f53866a20 100644
--- a/libstdc++-v3/include/std/limits
+++ b/libstdc++-v3/include/std/limits
@@ -186,7 +186,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
    *  These values represent the presence or absence of a variable number
    *  of exponent bits.  This type is used in the std::numeric_limits class.
   */
-  enum float_denorm_style
+  enum
+  _GLIBCXX23_DEPRECATED
+  float_denorm_style
   {
     /// Indeterminate at compile time whether denormalized values are allowed.
     denorm_indeterminate = -1,
@@ -270,11 +272,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
 
     /** See std::float_denorm_style for more information.  */
-    static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm = 
denorm_absent;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+    static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
+      _GLIBCXX23_DEPRECATED = denorm_absent;
 
     /** True if loss of accuracy is detected as a denormalization loss,
        rather than as an inexact result. */
-    static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+    static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
+      _GLIBCXX23_DEPRECATED = false;
+#pragma GCC diagnostic pop
 
     /** True if-and-only-if the type adheres to the IEC 559 standard, also
        known as IEEE 754.  (Only makes sense for floating point types.)  */
@@ -426,9 +433,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+       _GLIBCXX23_DEPRECATED = denorm_absent;
+      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
+       _GLIBCXX23_DEPRECATED = false;
+#pragma GCC diagnostic pop
 
       static _GLIBCXX_CONSTEXPR bool
       infinity() _GLIBCXX_USE_NOEXCEPT { return false; }
@@ -496,9 +507,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+       _GLIBCXX23_DEPRECATED = denorm_absent;
+      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
+       _GLIBCXX23_DEPRECATED = false;
+#pragma GCC diagnostic pop
 
       static _GLIBCXX_CONSTEXPR
       char infinity() _GLIBCXX_USE_NOEXCEPT { return char(); }
@@ -564,9 +579,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+       _GLIBCXX23_DEPRECATED = denorm_absent;
+      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
+       _GLIBCXX23_DEPRECATED = false;
+#pragma GCC diagnostic pop
 
       static _GLIBCXX_CONSTEXPR signed char
       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); }
@@ -635,9 +654,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+       _GLIBCXX23_DEPRECATED = denorm_absent;
+      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
+       _GLIBCXX23_DEPRECATED = false;
+#pragma GCC diagnostic pop
 
       static _GLIBCXX_CONSTEXPR unsigned char
       infinity() _GLIBCXX_USE_NOEXCEPT
@@ -707,9 +730,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+       _GLIBCXX23_DEPRECATED = denorm_absent;
+      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
+       _GLIBCXX23_DEPRECATED = false;
+#pragma GCC diagnostic pop
 
       static _GLIBCXX_CONSTEXPR wchar_t
       infinity() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
@@ -771,9 +798,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+       _GLIBCXX23_DEPRECATED = denorm_absent;
+      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
+       _GLIBCXX23_DEPRECATED = false;
+#pragma GCC diagnostic pop
 
       static _GLIBCXX_CONSTEXPR char8_t
       infinity() _GLIBCXX_USE_NOEXCEPT { return char8_t(); }
@@ -836,8 +867,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static constexpr bool has_infinity = false;
       static constexpr bool has_quiet_NaN = false;
       static constexpr bool has_signaling_NaN = false;
-      static constexpr float_denorm_style has_denorm = denorm_absent;
-      static constexpr bool has_denorm_loss = false;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+      static constexpr float_denorm_style has_denorm
+       _GLIBCXX23_DEPRECATED = denorm_absent;
+      static constexpr bool has_denorm_loss
+       _GLIBCXX23_DEPRECATED = false;
+#pragma GCC diagnostic pop
 
       static constexpr char16_t
       infinity() noexcept { return char16_t(); }
@@ -897,8 +933,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static constexpr bool has_infinity = false;
       static constexpr bool has_quiet_NaN = false;
       static constexpr bool has_signaling_NaN = false;
-      static constexpr float_denorm_style has_denorm = denorm_absent;
-      static constexpr bool has_denorm_loss = false;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+      static constexpr float_denorm_style has_denorm
+       _GLIBCXX23_DEPRECATED = denorm_absent;
+      static constexpr bool has_denorm_loss
+       _GLIBCXX23_DEPRECATED = false;
+#pragma GCC diagnostic pop
 
       static constexpr char32_t
       infinity() noexcept { return char32_t(); }
@@ -963,9 +1004,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+       _GLIBCXX23_DEPRECATED = denorm_absent;
+      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
+       _GLIBCXX23_DEPRECATED = false;
+#pragma GCC diagnostic pop
 
       static _GLIBCXX_CONSTEXPR short
       infinity() _GLIBCXX_USE_NOEXCEPT { return short(); }
@@ -1032,9 +1077,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+       _GLIBCXX23_DEPRECATED = denorm_absent;
+      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
+       _GLIBCXX23_DEPRECATED = false;
+#pragma GCC diagnostic pop
 
       static _GLIBCXX_CONSTEXPR unsigned short
       infinity() _GLIBCXX_USE_NOEXCEPT
@@ -1103,9 +1152,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+       _GLIBCXX23_DEPRECATED = denorm_absent;
+      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
+       _GLIBCXX23_DEPRECATED = false;
+#pragma GCC diagnostic pop
 
       static _GLIBCXX_CONSTEXPR int
       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
@@ -1172,9 +1225,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+       _GLIBCXX23_DEPRECATED = denorm_absent;
+      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
+       _GLIBCXX23_DEPRECATED = false;
+#pragma GCC diagnostic pop
 
       static _GLIBCXX_CONSTEXPR unsigned int
       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<unsigned int>(0); }
@@ -1242,9 +1299,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+       _GLIBCXX23_DEPRECATED = denorm_absent;
+      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
+       _GLIBCXX23_DEPRECATED = false;
+#pragma GCC diagnostic pop
 
       static _GLIBCXX_CONSTEXPR long
       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
@@ -1311,9 +1372,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+       _GLIBCXX23_DEPRECATED = denorm_absent;
+      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
+       _GLIBCXX23_DEPRECATED = false;
+#pragma GCC diagnostic pop
 
       static _GLIBCXX_CONSTEXPR unsigned long
       infinity() _GLIBCXX_USE_NOEXCEPT
@@ -1384,9 +1449,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+       _GLIBCXX23_DEPRECATED = denorm_absent;
+      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
+       _GLIBCXX23_DEPRECATED = false;
+#pragma GCC diagnostic pop
 
       static _GLIBCXX_CONSTEXPR long long
       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
@@ -1454,9 +1523,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
-       = denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+       _GLIBCXX23_DEPRECATED = denorm_absent;
+      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
+       _GLIBCXX23_DEPRECATED = false;
+#pragma GCC diagnostic pop
 
       static _GLIBCXX_CONSTEXPR unsigned long long
       infinity() _GLIBCXX_USE_NOEXCEPT
@@ -1523,9 +1596,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;         \
       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;                
\
       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;    \
+_Pragma("GCC diagnostic push")                                 \
+_Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")        \
       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm      \
+       _GLIBCXX23_DEPRECATED                                           \
        = denorm_absent;                                                \
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;      \
+      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss       \
+       _GLIBCXX23_DEPRECATED = false;  \
+_Pragma("GCC diagnostic pop")                                  \
                                                                        \
       static _GLIBCXX_CONSTEXPR TYPE                                   \
       infinity() _GLIBCXX_USE_NOEXCEPT                                 \
@@ -1592,9 +1670,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;         \
       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;                
\
       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;    \
+_Pragma("GCC diagnostic push")                                 \
+_Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")        \
       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm      \
+       _GLIBCXX23_DEPRECATED                                           \
        = denorm_absent;                                                \
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;      \
+      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss       \
+       _GLIBCXX23_DEPRECATED = false;  \
+_Pragma("GCC diagnostic pop")                                  \
                                                                        \
       static _GLIBCXX_CONSTEXPR unsigned TYPE                          \
       infinity() _GLIBCXX_USE_NOEXCEPT                                         
\
@@ -1713,10 +1796,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __FLT_HAS_INFINITY__;
       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __FLT_HAS_QUIET_NAN__;
       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
+       _GLIBCXX23_DEPRECATED
        = bool(__FLT_HAS_DENORM__) ? denorm_present : denorm_absent;
       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
+       _GLIBCXX23_DEPRECATED
        = __glibcxx_float_has_denorm_loss;
+#pragma GCC diagnostic pop
 
       static _GLIBCXX_CONSTEXPR float
       infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_valf(); }
@@ -1730,8 +1818,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static _GLIBCXX_CONSTEXPR float
       denorm_min() _GLIBCXX_USE_NOEXCEPT { return __FLT_DENORM_MIN__; }
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
       static _GLIBCXX_USE_CONSTEXPR bool is_iec559
        = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
+#pragma GCC diagnostic pop
       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
 
@@ -1788,10 +1879,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __DBL_HAS_INFINITY__;
       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __DBL_HAS_QUIET_NAN__;
       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
+       _GLIBCXX23_DEPRECATED
        = bool(__DBL_HAS_DENORM__) ? denorm_present : denorm_absent;
       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
+       _GLIBCXX23_DEPRECATED
         = __glibcxx_double_has_denorm_loss;
+#pragma GCC diagnostic pop
 
       static _GLIBCXX_CONSTEXPR double
       infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_val(); }
@@ -1805,8 +1901,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static _GLIBCXX_CONSTEXPR double
       denorm_min() _GLIBCXX_USE_NOEXCEPT { return __DBL_DENORM_MIN__; }
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
       static _GLIBCXX_USE_CONSTEXPR bool is_iec559
        = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
+#pragma GCC diagnostic pop
       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
 
@@ -1863,10 +1962,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __LDBL_HAS_INFINITY__;
       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = 
__LDBL_HAS_QUIET_NAN__;
       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
+       _GLIBCXX23_DEPRECATED
        = bool(__LDBL_HAS_DENORM__) ? denorm_present : denorm_absent;
       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
+       _GLIBCXX23_DEPRECATED
        = __glibcxx_long_double_has_denorm_loss;
+#pragma GCC diagnostic pop
 
       static _GLIBCXX_CONSTEXPR long double
       infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_vall(); }
@@ -1880,8 +1984,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static _GLIBCXX_CONSTEXPR long double
       denorm_min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_DENORM_MIN__; }
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
       static _GLIBCXX_USE_CONSTEXPR bool is_iec559
        = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
+#pragma GCC diagnostic pop
       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
 
@@ -1956,10 +2063,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        = __glibcxx_concat3 (__FLT, BITSIZE, _HAS_QUIET_NAN__);         \
       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN             \
        = has_quiet_NaN;                                                \
+_Pragma("GCC diagnostic push")                                         \
+_Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")                
\
       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm      \
+       _GLIBCXX23_DEPRECATED                                           \
        = bool(__glibcxx_concat3 (__FLT, BITSIZE, _HAS_DENORM__))       \
          ? denorm_present : denorm_absent;                             \
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;      \
+      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss               \
+       _GLIBCXX23_DEPRECATED = false;                                  \
+_Pragma("GCC diagnostic pop")                                          \
                                                                        \
       static _GLIBCXX_CONSTEXPR _Float##BITSIZE                                
\
       infinity() _GLIBCXX_USE_NOEXCEPT                                 \
@@ -1977,8 +2089,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       denorm_min() _GLIBCXX_USE_NOEXCEPT                               \
       { return __glibcxx_concat3 (__FLT, BITSIZE, _DENORM_MIN__); }    \
                                                                        \
+_Pragma("GCC diagnostic push")                                 \
+_Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")        \
       static _GLIBCXX_USE_CONSTEXPR bool is_iec559                     \
        = has_infinity && has_quiet_NaN && has_denorm == denorm_present;\
+_Pragma("GCC diagnostic pop")                                  \
       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;            \
       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;            \
                                                                        \
@@ -2055,9 +2170,14 @@ __glibcxx_float_n(128)
       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN
        = __BFLT16_HAS_QUIET_NAN__;
       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
+       _GLIBCXX23_DEPRECATED
        = bool(__BFLT16_HAS_DENORM__) ? denorm_present : denorm_absent;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
+       _GLIBCXX23_DEPRECATED = false;
+#pragma GCC diagnostic pop
 
       static _GLIBCXX_CONSTEXPR __gnu_cxx::__bfloat16_t
       infinity() _GLIBCXX_USE_NOEXCEPT
@@ -2075,8 +2195,11 @@ __glibcxx_float_n(128)
       denorm_min() _GLIBCXX_USE_NOEXCEPT
       { return __BFLT16_DENORM_MIN__; }
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
       static _GLIBCXX_USE_CONSTEXPR bool is_iec559
        = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
+#pragma GCC diagnostic pop
       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
 
@@ -2155,9 +2278,13 @@ __glibcxx_float_n(128)
 #else
       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
 #endif
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
-       = denorm_present;
-      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+       _GLIBCXX23_DEPRECATED = denorm_present;
+      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
+       _GLIBCXX23_DEPRECATED = false;
+#pragma GCC diagnostic pop
 
       static _GLIBCXX_CONSTEXPR __float128
       infinity() _GLIBCXX_USE_NOEXCEPT
diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/char16_32_t.cc 
b/libstdc++-v3/testsuite/18_support/numeric_limits/char16_32_t.cc
index 2c8712c861c..c36329b052d 100644
--- a/libstdc++-v3/testsuite/18_support/numeric_limits/char16_32_t.cc
+++ b/libstdc++-v3/testsuite/18_support/numeric_limits/char16_32_t.cc
@@ -1,5 +1,6 @@
 // { dg-do run { target c++11 } }
 // { dg-require-cstdint "" }
+// { dg-additional-options "-Wno-deprecated-declarations" { target c++23 } }
 
 // 2008-05-20  Paolo Carlini  <[email protected]>
 //
diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/char8_t.cc 
b/libstdc++-v3/testsuite/18_support/numeric_limits/char8_t.cc
index e23dbb7adbf..59a0bbbc160 100644
--- a/libstdc++-v3/testsuite/18_support/numeric_limits/char8_t.cc
+++ b/libstdc++-v3/testsuite/18_support/numeric_limits/char8_t.cc
@@ -1,6 +1,7 @@
 // { dg-do run { target c++11 } }
 // { dg-require-cstdint "" }
 // { dg-options "-fchar8_t" }
+// { dg-additional-options "-Wno-deprecated-declarations" { target c++23 } }
 
 // Copyright (C) 2017-2026 Free Software Foundation, Inc.
 //
diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/denorm_min.cc 
b/libstdc++-v3/testsuite/18_support/numeric_limits/denorm_min.cc
index b508d082b8e..619fe632c23 100644
--- a/libstdc++-v3/testsuite/18_support/numeric_limits/denorm_min.cc
+++ b/libstdc++-v3/testsuite/18_support/numeric_limits/denorm_min.cc
@@ -1,4 +1,5 @@
 // { dg-add-options ieee }
+// { dg-additional-options "-Wno-deprecated-declarations" { target c++23 } }
 
 // 1999-08-23 bkoz
 
diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/deprecated-2b.cc 
b/libstdc++-v3/testsuite/18_support/numeric_limits/deprecated-2b.cc
new file mode 100644
index 00000000000..5bc2fef977d
--- /dev/null
+++ b/libstdc++-v3/testsuite/18_support/numeric_limits/deprecated-2b.cc
@@ -0,0 +1,28 @@
+// Copyright (C) 2026 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-do compile { target c++23 } }
+
+#include <limits>
+
+std::float_denorm_style s; // { dg-warning "is deprecated" }
+auto a = std::numeric_limits<float>::has_denorm; // { dg-warning "is 
deprecated" }
+auto b = std::numeric_limits<float>::has_denorm_loss; // { dg-warning "is 
deprecated" }
+auto c = std::numeric_limits<int>::has_denorm; // { dg-warning "is deprecated" 
}
+auto d = std::numeric_limits<int>::has_denorm_loss; // { dg-warning "is 
deprecated" }
+
+// { dg-prune-output "declared here" }
diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/dr559.cc 
b/libstdc++-v3/testsuite/18_support/numeric_limits/dr559.cc
index 88c0ca505f2..5d67b0152d5 100644
--- a/libstdc++-v3/testsuite/18_support/numeric_limits/dr559.cc
+++ b/libstdc++-v3/testsuite/18_support/numeric_limits/dr559.cc
@@ -1,4 +1,5 @@
 // { dg-do run { target c++11 } }
+// { dg-additional-options "-Wno-deprecated-declarations" { target c++23 } }
 
 // 2010-02-17  Paolo Carlini  <[email protected]>
 //
diff --git 
a/libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_data.cc
 
b/libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_data.cc
index 43985b5b734..7b2cc7b5b40 100644
--- 
a/libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_data.cc
+++ 
b/libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_data.cc
@@ -1,4 +1,5 @@
 // { dg-do compile { target c++11 } }
+// { dg-additional-options "-Wno-deprecated-declarations" { target c++23 } }
 
 // Copyright (C) 2010-2026 Free Software Foundation, Inc.
 //
diff --git 
a/libstdc++-v3/testsuite/18_support/numeric_limits/specialization_default_values.cc
 
b/libstdc++-v3/testsuite/18_support/numeric_limits/specialization_default_values.cc
index 1bff0ad7f4d..896a2e485d7 100644
--- 
a/libstdc++-v3/testsuite/18_support/numeric_limits/specialization_default_values.cc
+++ 
b/libstdc++-v3/testsuite/18_support/numeric_limits/specialization_default_values.cc
@@ -1,4 +1,5 @@
 // { dg-add-options ieee }
+// { dg-additional-options "-Wno-deprecated-declarations" { target c++23 } }
 
 // 1999-08-23 bkoz
 
diff --git a/libstdc++-v3/testsuite/std/ranges/iota/max_size_type.cc 
b/libstdc++-v3/testsuite/std/ranges/iota/max_size_type.cc
index af53718a95b..64436942033 100644
--- a/libstdc++-v3/testsuite/std/ranges/iota/max_size_type.cc
+++ b/libstdc++-v3/testsuite/std/ranges/iota/max_size_type.cc
@@ -17,6 +17,7 @@
 
 // { dg-do run { target c++20 } }
 // { dg-timeout-factor 4 }
+// { dg-additional-options "-Wno-deprecated-declarations" { target c++23 } }
 
 #include <limits>
 #include <ranges>
-- 
2.52.0


Reply via email to