libstdc++: Suppress pedantic warnings about __int128
authorJonathan Wakely <jwakely@redhat.com>
Thu, 15 Jul 2021 14:36:34 +0000 (15:36 +0100)
committerJonathan Wakely <jwakely@redhat.com>
Fri, 16 Jul 2021 07:40:43 +0000 (08:40 +0100)
With -std=c++NN -pedantic -Wsystem-headers there are warnings about the
use of __int128, which can be suppressed using diagnostic pragmas.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* include/bits/cpp_type_traits.h: Add diagnostic pragmas around
uses of non-standard integer types.
* include/bits/functional_hash.h: Likewise.
* include/bits/iterator_concepts.h: Likewise.
* include/bits/max_size_type.h: Likewise.
* include/bits/std_abs.h: Likewise.
* include/bits/stl_algobase.h: Likewise.
* include/bits/uniform_int_dist.h: Likewise.
* include/ext/numeric_traits.h: Likewise.
* include/std/type_traits: Likewise.

libstdc++-v3/include/bits/cpp_type_traits.h
libstdc++-v3/include/bits/functional_hash.h
libstdc++-v3/include/bits/iterator_concepts.h
libstdc++-v3/include/bits/max_size_type.h
libstdc++-v3/include/bits/std_abs.h
libstdc++-v3/include/bits/stl_algobase.h
libstdc++-v3/include/bits/uniform_int_dist.h
libstdc++-v3/include/ext/numeric_traits.h
libstdc++-v3/include/std/type_traits

index ca0d68c..8f8dd81 100644 (file)
@@ -266,6 +266,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       typedef __true_type __type;      \
     };
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+
 #ifdef __GLIBCXX_TYPE_INT_N_0
 __INT_N(__GLIBCXX_TYPE_INT_N_0)
 #endif
@@ -279,6 +282,8 @@ __INT_N(__GLIBCXX_TYPE_INT_N_2)
 __INT_N(__GLIBCXX_TYPE_INT_N_3)
 #endif
 
+#pragma GCC diagnostic pop
+
 #undef __INT_N
 
   //
index 7be8ebf..78e3644 100644 (file)
@@ -171,6 +171,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   /// Explicit specialization for unsigned long long.
   _Cxx_hashtable_define_trivial_hash(unsigned long long)
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+
 #ifdef __GLIBCXX_TYPE_INT_N_0
   _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_0)
   _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_0 unsigned)
@@ -188,6 +191,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_3 unsigned)
 #endif
 
+#pragma GCC diagnostic pop
+
 #undef _Cxx_hashtable_define_trivial_hash
 
   struct _Hash_impl
index c273056..97c0b80 100644 (file)
@@ -553,6 +553,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     class __max_diff_type;
     class __max_size_type;
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+
     template<typename _Tp>
       concept __is_signed_int128
 #if __SIZEOF_INT128__
@@ -569,6 +572,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        = false;
 #endif
 
+#pragma GCC diagnostic pop
+
     template<typename _Tp>
       concept __cv_bool = same_as<const volatile _Tp, const volatile bool>;
 
index 153b1bf..24237cc 100644 (file)
@@ -417,7 +417,10 @@ namespace ranges
 #endif
 
 #if __SIZEOF_INT128__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
       using __rep = unsigned __int128;
+#pragma GCC diagnostic pop
 #else
       using __rep = unsigned long long;
 #endif
@@ -771,7 +774,10 @@ namespace ranges
       static constexpr bool is_integer = true;
       static constexpr bool is_exact = true;
 #if __SIZEOF_INT128__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
       static_assert(same_as<_Sp::__rep, unsigned __int128>);
+#pragma GCC diagnostic pop
       static constexpr int digits = 129;
 #else
       static_assert(same_as<_Sp::__rep, unsigned long long>);
index ae6bfc1..c65ebb6 100644 (file)
@@ -80,6 +80,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   { return __builtin_fabsl(__x); }
 #endif
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+
 #if defined(__GLIBCXX_TYPE_INT_N_0)
   inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_0
   abs(__GLIBCXX_TYPE_INT_N_0 __x) { return __x >= 0 ? __x : -__x; }
@@ -104,6 +107,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   { return __x < 0 ? -__x : __x; }
 #endif
 
+#pragma GCC diagnostic pop
+
 _GLIBCXX_END_NAMESPACE_VERSION
 } // namespace
 } // extern "C"++"
index d001b5f..7f920db 100644 (file)
@@ -1013,6 +1013,9 @@ _GLIBCXX_END_NAMESPACE_CONTAINER
   inline _GLIBCXX_CONSTEXPR unsigned long long
   __size_to_integer(unsigned long long __n) { return __n; }
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+
 #if defined(__GLIBCXX_TYPE_INT_N_0)
   inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_0
   __size_to_integer(__GLIBCXX_TYPE_INT_N_0 __n) { return __n; }
@@ -1038,6 +1041,8 @@ _GLIBCXX_END_NAMESPACE_CONTAINER
   __size_to_integer(unsigned __GLIBCXX_TYPE_INT_N_3 __n) { return __n; }
 #endif
 
+#pragma GCC diagnostic pop
+
   inline _GLIBCXX_CONSTEXPR long long
   __size_to_integer(float __n) { return (long long)__n; }
   inline _GLIBCXX_CONSTEXPR long long
index 2d83524..8ee3345 100644 (file)
@@ -299,6 +299,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
 #if defined __UINT64_TYPE__ && defined __UINT32_TYPE__
 #if __SIZEOF_INT128__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
            if _GLIBCXX17_CONSTEXPR (__urngrange == __UINT64_MAX__)
              {
                // __urng produces values that use exactly 64-bits,
@@ -307,6 +309,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
                __ret = _S_nd<unsigned __int128>(__urng, __u64erange);
              }
            else
+#pragma GCC diagnostic pop
 #endif
            if _GLIBCXX17_CONSTEXPR (__urngrange == __UINT32_MAX__)
              {
index a81fa6f..0dc1bc6 100644 (file)
@@ -123,9 +123,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 #endif
 
 #if defined __STRICT_ANSI__ && defined __SIZEOF_INT128__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
   // In strict modes __is_integer<__int128> is false,
   // but we still want to define __numeric_traits_integer<__int128>.
   _GLIBCXX_INT_N_TRAITS(__int128, 128)
+#pragma GCC diagnostic pop
 #endif
 
 #undef _GLIBCXX_INT_N_TRAITS
index cccc6ee..91d6523 100644 (file)
@@ -347,6 +347,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     struct __is_integral_helper<unsigned long long>
     : public true_type { };
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+
   // Conditionalizing on __STRICT_ANSI__ here will break any port that
   // uses one of these types for size_t.
 #if defined(__GLIBCXX_TYPE_INT_N_0)
@@ -385,6 +388,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     struct __is_integral_helper<unsigned __GLIBCXX_TYPE_INT_N_3>
     : public true_type { };
 #endif
+#pragma GCC diagnostic pop
   /// @endcond
 
   /// is_integral
@@ -617,6 +621,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   template<typename _Tp, typename... _Types>
     using __is_one_of = __or_<is_same<_Tp, _Types>...>;
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+
   // Check if a type is one of the signed integer types.
   template<typename _Tp>
     using __is_signed_integer = __is_one_of<__remove_cv_t<_Tp>,
@@ -654,6 +661,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
          , unsigned __GLIBCXX_TYPE_INT_N_3
 #endif
          >;
+#pragma GCC diagnostic pop
 
   // Check if a type is one of the signed or unsigned integer types.
   template<typename _Tp>
@@ -1717,6 +1725,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     struct __make_unsigned<long long>
     { typedef unsigned long long __type; };
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+
 #if defined(__GLIBCXX_TYPE_INT_N_0)
   template<>
     struct __make_unsigned<__GLIBCXX_TYPE_INT_N_0>
@@ -1738,6 +1749,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     { typedef unsigned __GLIBCXX_TYPE_INT_N_3 __type; };
 #endif
 
+#pragma GCC diagnostic pop
+
   // Select between integral and enum: not possible to be both.
   template<typename _Tp,
           bool _IsInt = is_integral<_Tp>::value,
@@ -1873,6 +1886,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     struct __make_signed<unsigned long long>
     { typedef signed long long __type; };
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+
 #if defined(__GLIBCXX_TYPE_INT_N_0)
   template<>
     struct __make_signed<unsigned __GLIBCXX_TYPE_INT_N_0>
@@ -1894,6 +1910,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     { typedef __GLIBCXX_TYPE_INT_N_3 __type; };
 #endif
 
+#pragma GCC diagnostic pop
+
   // Select between integral and enum: not possible to be both.
   template<typename _Tp,
           bool _IsInt = is_integral<_Tp>::value,