PR libstdc++/79789 fix non-reserved names in headers
authorJonathan Wakely <jwakely@redhat.com>
Thu, 2 Mar 2017 03:43:49 +0000 (03:43 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Thu, 2 Mar 2017 03:43:49 +0000 (03:43 +0000)
PR libstdc++/79789
* include/bits/hashtable_policy.h (__clp2): Use reserved names for
parameters and local variables.
* include/bits/ios_base.h (make_error_code, make_error_condition):
Likewise.
* include/bits/list.tcc (list::sort): Likewise.
* include/bits/mask_array.h (mask_array): Likewise.
* include/bits/regex.h (regex_token_iterator): Likewise.
* include/bits/slice_array.h (slice_array): Likewise.
* include/bits/stl_algo.h (__sample): Likewise.
* include/std/memory (undeclare_no_pointers): Likewise.
* include/std/type_traits (is_callable_v, is_nothrow_callable_v):
Likewise.
* libsupc++/exception_ptr.h (__dest_thunk): Likewise.
* testsuite/17_intro/headers/names.cc: New test.

From-SVN: r245828

12 files changed:
libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/hashtable_policy.h
libstdc++-v3/include/bits/ios_base.h
libstdc++-v3/include/bits/list.tcc
libstdc++-v3/include/bits/mask_array.h
libstdc++-v3/include/bits/regex.h
libstdc++-v3/include/bits/slice_array.h
libstdc++-v3/include/bits/stl_algo.h
libstdc++-v3/include/std/memory
libstdc++-v3/include/std/type_traits
libstdc++-v3/libsupc++/exception_ptr.h
libstdc++-v3/testsuite/17_intro/headers/names.cc [new file with mode: 0644]

index 537d9d7a1c08d2b62475de03aa89ae1876cf479b..883cd9ad0cbe66779022f9e3c0a8d2789070cc2c 100644 (file)
@@ -1,5 +1,21 @@
 2017-03-02  Jonathan Wakely  <jwakely@redhat.com>
 
+       PR libstdc++/79789
+       * include/bits/hashtable_policy.h (__clp2): Use reserved names for
+       parameters and local variables.
+       * include/bits/ios_base.h (make_error_code, make_error_condition):
+       Likewise.
+       * include/bits/list.tcc (list::sort): Likewise.
+       * include/bits/mask_array.h (mask_array): Likewise.
+       * include/bits/regex.h (regex_token_iterator): Likewise.
+       * include/bits/slice_array.h (slice_array): Likewise.
+       * include/bits/stl_algo.h (__sample): Likewise.
+       * include/std/memory (undeclare_no_pointers): Likewise.
+       * include/std/type_traits (is_callable_v, is_nothrow_callable_v):
+       Likewise.
+       * libsupc++/exception_ptr.h (__dest_thunk): Likewise.
+       * testsuite/17_intro/headers/names.cc: New test.
+
        PR libstdc++/79798
        * include/std/functional (bind::_Res_type_impl): Fix incorrect use of
        result_of that loses top-level cv-qualifiers.
index cfa27a3dd6fb79d78a23457aaf3cbae065102c82..8af8c498de2bd97b53151b1a1fb66a9716f44be1 100644 (file)
@@ -521,24 +521,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   /// Compute closest power of 2.
   _GLIBCXX14_CONSTEXPR
   inline std::size_t
-  __clp2(std::size_t n) noexcept
+  __clp2(std::size_t __n) noexcept
   {
 #if __SIZEOF_SIZE_T__ >= 8
-    std::uint_fast64_t x = n;
+    std::uint_fast64_t __x = __n;
 #else
-    std::uint_fast32_t x = n;
+    std::uint_fast32_t __x = __n;
 #endif
     // Algorithm from Hacker's Delight, Figure 3-3.
-    x = x - 1;
-    x = x | (x >> 1);
-    x = x | (x >> 2);
-    x = x | (x >> 4);
-    x = x | (x >> 8);
-    x = x | (x >>16);
+    __x = __x - 1;
+    __x = __x | (__x >> 1);
+    __x = __x | (__x >> 2);
+    __x = __x | (__x >> 4);
+    __x = __x | (__x >> 8);
+    __x = __x | (__x >>16);
 #if __SIZEOF_SIZE_T__ >= 8
-    x = x | (x >>32);
+    __x = __x | (__x >>32);
 #endif
-    return x + 1;
+    return __x + 1;
   }
 
   /// Rehash policy providing power of 2 bucket numbers. Avoids modulo
index 965ec8a9e1881fd1702d957f6ce9bdc8fa216549..f1ebfccaca51a98e99aa40ad92c10cc60b1a4589 100644 (file)
@@ -207,12 +207,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   const error_category& iostream_category() noexcept;
 
   inline error_code
-  make_error_code(io_errc e) noexcept
-  { return error_code(static_cast<int>(e), iostream_category()); }
+  make_error_code(io_errc __e) noexcept
+  { return error_code(static_cast<int>(__e), iostream_category()); }
 
   inline error_condition
-  make_error_condition(io_errc e) noexcept
-  { return error_condition(static_cast<int>(e), iostream_category()); }
+  make_error_condition(io_errc __e) noexcept
+  { return error_condition(static_cast<int>(__e), iostream_category()); }
 #endif
 
   // 27.4.2  Class ios_base
index d80d569eaaf1a7a4a95814d707f93bfc260f4143..9623a139a70591077993110aed23203d62273f86 100644 (file)
@@ -500,8 +500,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
        __catch(...)
          {
            this->splice(this->end(), __carry);
-           for (int i = 0; i < sizeof(__tmp)/sizeof(__tmp[0]); ++i)
-             this->splice(this->end(), __tmp[i]);
+           for (int __i = 0; __i < sizeof(__tmp)/sizeof(__tmp[0]); ++__i)
+             this->splice(this->end(), __tmp[__i]);
            __throw_exception_again;
          }
       }
@@ -586,8 +586,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
            __catch(...)
              {
                this->splice(this->end(), __carry);
-               for (int i = 0; i < sizeof(__tmp)/sizeof(__tmp[0]); ++i)
-                 this->splice(this->end(), __tmp[i]);
+               for (int __i = 0; __i < sizeof(__tmp)/sizeof(__tmp[0]); ++__i)
+                 this->splice(this->end(), __tmp[__i]);
                __throw_exception_again;
              }
          }
index 9a03ba02c0c9741f6cf0b6c4630096c89a60ca67..5c4fcc67635bf0253994a6c189da43b327e0c26c 100644 (file)
@@ -136,8 +136,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     };
 
   template<typename _Tp>
-    inline mask_array<_Tp>::mask_array(const mask_array<_Tp>& a)
-    : _M_sz(a._M_sz), _M_mask(a._M_mask), _M_array(a._M_array) {}
+    inline mask_array<_Tp>::mask_array(const mask_array<_Tp>& __a)
+    : _M_sz(__a._M_sz), _M_mask(__a._M_mask), _M_array(__a._M_array) {}
 
   template<typename _Tp>
     inline
index 17a1ef47c2132a485d49ceb0bc520fc21688ab74..60837ea6cff88dd38db5a6a73b6ed3bcab907ea5 100644 (file)
@@ -2674,9 +2674,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
                           initializer_list<int>,
                           regex_constants::match_flag_type =
                           regex_constants::match_default) = delete;
-      template <std::size_t N>
+      template <std::size_t _Nm>
        regex_token_iterator(_Bi_iter, _Bi_iter, const regex_type&&,
-                            const int (&)[N],
+                            const int (&)[_Nm],
                             regex_constants::match_flag_type =
                             regex_constants::match_default) = delete;
 
index 870954e53378c96c287629116997a2dadfaaaec7..cd668fbc1d8ede784e5cd0d36040d1edc8fc9a37 100644 (file)
@@ -204,8 +204,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   template<typename _Tp>
     inline
-    slice_array<_Tp>::slice_array(const slice_array<_Tp>& a)
-    : _M_sz(a._M_sz), _M_stride(a._M_stride), _M_array(a._M_array) {}
+    slice_array<_Tp>::slice_array(const slice_array<_Tp>& __a)
+    : _M_sz(__a._M_sz), _M_stride(__a._M_stride), _M_array(__a._M_array) {}
 
   //    template<typename _Tp>
   //    inline slice_array<_Tp>::~slice_array () {}
index 938e61244de8212b29d9df57d4f2a9331aa25fa2..2cd5303a100b998f80369c0baf2cd39aedf14b52 100644 (file)
@@ -5748,11 +5748,11 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
         {
          while (__n != 0 && __unsampled_sz >= 2)
            {
-             const pair<_Size, _Size> p =
+             const pair<_Size, _Size> __p =
                __gen_two_uniform_ints(__unsampled_sz, __unsampled_sz - 1, __g);
 
              --__unsampled_sz;
-             if (p.first < __n)
+             if (__p.first < __n)
                {
                  *__out++ = *__first;
                  --__n;
@@ -5763,7 +5763,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
              if (__n == 0) break;
 
              --__unsampled_sz;
-             if (p.second < __n)
+             if (__p.second < __n)
                {
                  *__out++ = *__first;
                  --__n;
index 0222cecb5a92ea4c4fb053eb3d74737eaddf5dcb..2d2d6fa90f681abdb5302e96c3020ceb7420f2b6 100644 (file)
@@ -132,9 +132,9 @@ enum class pointer_safety { relaxed, preferred, strict };
 inline void
 declare_reachable(void*) { }
 
-template <class T>
-  inline T*
-  undeclare_reachable(T* __p) { return __p; }
+template <typename _Tp>
+  inline _Tp*
+  undeclare_reachable(_Tp* __p) { return __p; }
 
 inline void
 declare_no_pointers(char*, size_t) { }
index 3e2014e053cf7787a5cd98b374b5ac20151ced37..76865f44541b7753888a301a582922fc6c352a11 100644 (file)
@@ -2892,12 +2892,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     { };
 
   /// std::is_callable_v
-  template<typename T, typename _Ret = void>
-    constexpr bool is_callable_v = is_callable<T, _Ret>::value;
+  template<typename _Tp, typename _Ret = void>
+    constexpr bool is_callable_v = is_callable<_Tp, _Ret>::value;
 
   /// std::is_nothrow_callable_v
-  template<typename T, typename _Ret = void>
-    constexpr bool is_nothrow_callable_v = is_nothrow_callable<T, _Ret>::value;
+  template<typename _Tp, typename _Ret = void>
+    constexpr bool is_nothrow_callable_v
+      = is_nothrow_callable<_Tp, _Ret>::value;
 #endif // C++17
 
 
index 2447a5a4639532d1230d494816e6520712c97623..0ece81d8137a0db1910342a99b52d335a0b765da 100644 (file)
@@ -168,8 +168,8 @@ namespace std
 
     template<typename _Ex>
       inline void
-      __dest_thunk(void* x)
-      { static_cast<_Ex*>(x)->~_Ex(); }
+      __dest_thunk(void* __x)
+      { static_cast<_Ex*>(__x)->~_Ex(); }
 
   } // namespace __exception_ptr
 
diff --git a/libstdc++-v3/testsuite/17_intro/headers/names.cc b/libstdc++-v3/testsuite/17_intro/headers/names.cc
new file mode 100644 (file)
index 0000000..a7d9a6b
--- /dev/null
@@ -0,0 +1,101 @@
+// Copyright (C) 2017 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 }
+
+// Define macros for some common variables names that we must not use for
+// naming variables, parameters etc. in the library.
+#define tmp (
+#define A (
+#define B (
+#define C (
+#define D (
+#define E (
+#define F (
+#define G (
+#define H (
+#define I (
+#define J (
+#define K (
+#define L (
+#define M (
+#define N (
+#define O (
+#define P (
+#define Q (
+#define R (
+#define S (
+#define T (
+#define U (
+#define V (
+#define W (
+#define X (
+#define Y (
+#define Z (
+#if __cplusplus >= 201103L
+// <random> defines member functions called a() and b()
+#else
+#define a (
+#define b (
+#endif
+// <queue> and <stack> defined data members called c
+#define d (
+#define e (
+#define f (
+#define g (
+#if __cplusplus >= 201402L
+// <chrono> defines operator ""h in C++14
+// <complex> defines operator ""i in C++14
+#else
+#define h (
+#define i (
+#endif
+#define j (
+#if __cplusplus >= 201103L
+// <random> defines member functions called k()
+#else
+#define k (
+#endif
+#define l (
+#if __cplusplus >= 201103L
+// <random> defines member functions called m() and n()
+#else
+#define m (
+#define n (
+#endif
+#define o (
+#if __cplusplus >= 201103L
+// <random> defines member functions called p()
+#else
+#define p (
+#endif
+#define q (
+#define r (
+#if __cplusplus >= 201103L
+// <random> defines member functions called s() and t()
+// <chrono> and <string> define operator ""s in C++14
+#else
+#define s (
+#define t (
+#endif
+#define u (
+#define v (
+#define w (
+#define x (
+#define y (
+#define z (
+#include <bits/stdc++.h>