diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 537d9d7a1c0..883cd9ad0cb 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,21 @@ 2017-03-02 Jonathan Wakely + 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. diff --git a/libstdc++-v3/include/bits/hashtable_policy.h b/libstdc++-v3/include/bits/hashtable_policy.h index cfa27a3dd6f..8af8c498de2 100644 --- a/libstdc++-v3/include/bits/hashtable_policy.h +++ b/libstdc++-v3/include/bits/hashtable_policy.h @@ -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 diff --git a/libstdc++-v3/include/bits/ios_base.h b/libstdc++-v3/include/bits/ios_base.h index 965ec8a9e18..f1ebfccaca5 100644 --- a/libstdc++-v3/include/bits/ios_base.h +++ b/libstdc++-v3/include/bits/ios_base.h @@ -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(e), iostream_category()); } + make_error_code(io_errc __e) noexcept + { return error_code(static_cast(__e), iostream_category()); } inline error_condition - make_error_condition(io_errc e) noexcept - { return error_condition(static_cast(e), iostream_category()); } + make_error_condition(io_errc __e) noexcept + { return error_condition(static_cast(__e), iostream_category()); } #endif // 27.4.2 Class ios_base diff --git a/libstdc++-v3/include/bits/list.tcc b/libstdc++-v3/include/bits/list.tcc index d80d569eaaf..9623a139a70 100644 --- a/libstdc++-v3/include/bits/list.tcc +++ b/libstdc++-v3/include/bits/list.tcc @@ -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; } } diff --git a/libstdc++-v3/include/bits/mask_array.h b/libstdc++-v3/include/bits/mask_array.h index 9a03ba02c0c..5c4fcc67635 100644 --- a/libstdc++-v3/include/bits/mask_array.h +++ b/libstdc++-v3/include/bits/mask_array.h @@ -136,8 +136,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION }; template - 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 inline diff --git a/libstdc++-v3/include/bits/regex.h b/libstdc++-v3/include/bits/regex.h index 17a1ef47c21..60837ea6cff 100644 --- a/libstdc++-v3/include/bits/regex.h +++ b/libstdc++-v3/include/bits/regex.h @@ -2674,9 +2674,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 initializer_list, regex_constants::match_flag_type = regex_constants::match_default) = delete; - template + template 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; diff --git a/libstdc++-v3/include/bits/slice_array.h b/libstdc++-v3/include/bits/slice_array.h index 870954e5337..cd668fbc1d8 100644 --- a/libstdc++-v3/include/bits/slice_array.h +++ b/libstdc++-v3/include/bits/slice_array.h @@ -204,8 +204,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template 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 // inline slice_array<_Tp>::~slice_array () {} diff --git a/libstdc++-v3/include/bits/stl_algo.h b/libstdc++-v3/include/bits/stl_algo.h index 938e61244de..2cd5303a100 100644 --- a/libstdc++-v3/include/bits/stl_algo.h +++ b/libstdc++-v3/include/bits/stl_algo.h @@ -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; diff --git a/libstdc++-v3/include/std/memory b/libstdc++-v3/include/std/memory index 0222cecb5a9..2d2d6fa90f6 100644 --- a/libstdc++-v3/include/std/memory +++ b/libstdc++-v3/include/std/memory @@ -132,9 +132,9 @@ enum class pointer_safety { relaxed, preferred, strict }; inline void declare_reachable(void*) { } -template - inline T* - undeclare_reachable(T* __p) { return __p; } +template + inline _Tp* + undeclare_reachable(_Tp* __p) { return __p; } inline void declare_no_pointers(char*, size_t) { } diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index 3e2014e053c..76865f44541 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -2892,12 +2892,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { }; /// std::is_callable_v - template - constexpr bool is_callable_v = is_callable::value; + template + constexpr bool is_callable_v = is_callable<_Tp, _Ret>::value; /// std::is_nothrow_callable_v - template - constexpr bool is_nothrow_callable_v = is_nothrow_callable::value; + template + constexpr bool is_nothrow_callable_v + = is_nothrow_callable<_Tp, _Ret>::value; #endif // C++17 diff --git a/libstdc++-v3/libsupc++/exception_ptr.h b/libstdc++-v3/libsupc++/exception_ptr.h index 2447a5a4639..0ece81d8137 100644 --- a/libstdc++-v3/libsupc++/exception_ptr.h +++ b/libstdc++-v3/libsupc++/exception_ptr.h @@ -168,8 +168,8 @@ namespace std template 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 index 00000000000..a7d9a6bced3 --- /dev/null +++ b/libstdc++-v3/testsuite/17_intro/headers/names.cc @@ -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 +// . + +// { 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 +// defines member functions called a() and b() +#else +#define a ( +#define b ( +#endif +// and defined data members called c +#define d ( +#define e ( +#define f ( +#define g ( +#if __cplusplus >= 201402L +// defines operator ""h in C++14 +// defines operator ""i in C++14 +#else +#define h ( +#define i ( +#endif +#define j ( +#if __cplusplus >= 201103L +// defines member functions called k() +#else +#define k ( +#endif +#define l ( +#if __cplusplus >= 201103L +// defines member functions called m() and n() +#else +#define m ( +#define n ( +#endif +#define o ( +#if __cplusplus >= 201103L +// defines member functions called p() +#else +#define p ( +#endif +#define q ( +#define r ( +#if __cplusplus >= 201103L +// defines member functions called s() and t() +// and 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