aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrançois Dumont <fdumont@gcc.gnu.org>2018-03-20 21:45:14 +0000
committerFrançois Dumont <fdumont@gcc.gnu.org>2018-03-20 21:45:14 +0000
commit5dfb5e5be885ef50cf5a80aec09f9d8390ddc499 (patch)
tree0197f28ae7393c0f33b1de895e18d1263552d97a
parent6f21dc3c4f987a9d4abd3b0c1c46d8d8a16a3465 (diff)
downloadgcc-5dfb5e5be885ef50cf5a80aec09f9d8390ddc499.zip
gcc-5dfb5e5be885ef50cf5a80aec09f9d8390ddc499.tar.gz
gcc-5dfb5e5be885ef50cf5a80aec09f9d8390ddc499.tar.bz2
re PR libstdc++/84998 (std::hash<std::bitset<N>> fails in Debug Mode)
2018-03-20 François Dumont <fdumont@gcc.gnu.org> PR libstdc++/84998 * include/bits/stl_bvector.h: Fix std::hash friend declaration. * include/std/bitset: Likewise. * include/bits/stl_map.h (std::map<>): Fix _Rb_tree_merge_helper friend declaration. * include/bits/stl_multimap.h (std::multimap<>): Likewise. * include/bits/stl_multiset.h (std::multiset<>): Likewise. * include/bits/stl_set.h (std::set<>): Likewise. * include/bits/unordered_map.h (std::unordered_map<>): Fix _Hash_merge_helper friend declaration. (std::unordered_multimap<>): Likewise. * include/bits/unordered_set.h (std::unordered_set<>): Likewise. (std::unordered_multiset<>): Likewise. From-SVN: r258693
-rw-r--r--libstdc++-v3/ChangeLog19
-rw-r--r--libstdc++-v3/include/bits/stl_bvector.h5
-rw-r--r--libstdc++-v3/include/bits/stl_map.h2
-rw-r--r--libstdc++-v3/include/bits/stl_multimap.h2
-rw-r--r--libstdc++-v3/include/bits/stl_multiset.h2
-rw-r--r--libstdc++-v3/include/bits/stl_set.h2
-rw-r--r--libstdc++-v3/include/bits/unordered_map.h4
-rw-r--r--libstdc++-v3/include/bits/unordered_set.h4
-rw-r--r--libstdc++-v3/include/debug/vector4
-rw-r--r--libstdc++-v3/include/std/bitset8
10 files changed, 37 insertions, 15 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 2c5c6c6..7ac98fb 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,19 @@
+2018-03-20 François Dumont <fdumont@gcc.gnu.org>
+
+ PR libstdc++/84998
+ * include/bits/stl_bvector.h: Fix std::hash friend declaration.
+ * include/std/bitset: Likewise.
+ * include/bits/stl_map.h (std::map<>): Fix _Rb_tree_merge_helper friend
+ declaration.
+ * include/bits/stl_multimap.h (std::multimap<>): Likewise.
+ * include/bits/stl_multiset.h (std::multiset<>): Likewise.
+ * include/bits/stl_set.h (std::set<>): Likewise.
+ * include/bits/unordered_map.h (std::unordered_map<>): Fix
+ _Hash_merge_helper friend declaration.
+ (std::unordered_multimap<>): Likewise.
+ * include/bits/unordered_set.h (std::unordered_set<>): Likewise.
+ (std::unordered_multiset<>): Likewise.
+
2018-03-19 Gerald Pfeifer <gerald@pfeifer.com>
* doc/xml/api.xml: www.fsf.org has moved to https. Also omit
@@ -8,7 +24,8 @@
* doc/xml/manual/spine.xml: Ditto.
* doc/xml/spine.xml: Ditto.
-2018-03-19 Gerald Pfeifer <gerald@pfeifer.com>
+2018-03-19 Gerald Pfeifer <gerald@pfeifer.com>
+
* doc/xml/manual/documentation_hacking.xml: Adjust link to
docbook.org.
diff --git a/libstdc++-v3/include/bits/stl_bvector.h b/libstdc++-v3/include/bits/stl_bvector.h
index 00a179f..de723ed 100644
--- a/libstdc++-v3/include/bits/stl_bvector.h
+++ b/libstdc++-v3/include/bits/stl_bvector.h
@@ -58,6 +58,7 @@
#if __cplusplus >= 201103L
#include <initializer_list>
+#include <bits/functional_hash.h>
#endif
namespace std _GLIBCXX_VISIBILITY(default)
@@ -591,7 +592,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
typedef typename _Base::_Bit_alloc_traits _Bit_alloc_traits;
#if __cplusplus >= 201103L
- template<typename> friend struct hash;
+ friend struct std::hash<vector>;
#endif
public:
@@ -1313,8 +1314,6 @@ _GLIBCXX_END_NAMESPACE_VERSION
#if __cplusplus >= 201103L
-#include <bits/functional_hash.h>
-
namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
diff --git a/libstdc++-v3/include/bits/stl_map.h b/libstdc++-v3/include/bits/stl_map.h
index 24d7f42..a4a026e 100644
--- a/libstdc++-v3/include/bits/stl_map.h
+++ b/libstdc++-v3/include/bits/stl_map.h
@@ -633,7 +633,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{ return _M_t._M_reinsert_node_hint_unique(__hint, std::move(__nh)); }
template<typename, typename>
- friend class _Rb_tree_merge_helper;
+ friend class std::_Rb_tree_merge_helper;
template<typename _C2>
void
diff --git a/libstdc++-v3/include/bits/stl_multimap.h b/libstdc++-v3/include/bits/stl_multimap.h
index 38071fe..fc8f454 100644
--- a/libstdc++-v3/include/bits/stl_multimap.h
+++ b/libstdc++-v3/include/bits/stl_multimap.h
@@ -651,7 +651,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{ return _M_t._M_reinsert_node_hint_equal(__hint, std::move(__nh)); }
template<typename, typename>
- friend class _Rb_tree_merge_helper;
+ friend class std::_Rb_tree_merge_helper;
template<typename _C2>
void
diff --git a/libstdc++-v3/include/bits/stl_multiset.h b/libstdc++-v3/include/bits/stl_multiset.h
index 1039612..f41f56c 100644
--- a/libstdc++-v3/include/bits/stl_multiset.h
+++ b/libstdc++-v3/include/bits/stl_multiset.h
@@ -589,7 +589,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{ return _M_t._M_reinsert_node_hint_equal(__hint, std::move(__nh)); }
template<typename, typename>
- friend class _Rb_tree_merge_helper;
+ friend class std::_Rb_tree_merge_helper;
template<typename _Compare1>
void
diff --git a/libstdc++-v3/include/bits/stl_set.h b/libstdc++-v3/include/bits/stl_set.h
index 0a40f06..2e332ef 100644
--- a/libstdc++-v3/include/bits/stl_set.h
+++ b/libstdc++-v3/include/bits/stl_set.h
@@ -604,7 +604,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{ return _M_t._M_reinsert_node_hint_unique(__hint, std::move(__nh)); }
template<typename, typename>
- friend class _Rb_tree_merge_helper;
+ friend class std::_Rb_tree_merge_helper;
template<typename _Compare1>
void
diff --git a/libstdc++-v3/include/bits/unordered_map.h b/libstdc++-v3/include/bits/unordered_map.h
index b757ff2..07aad9e 100644
--- a/libstdc++-v3/include/bits/unordered_map.h
+++ b/libstdc++-v3/include/bits/unordered_map.h
@@ -862,7 +862,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#if __cplusplus > 201402L
template<typename, typename, typename>
- friend class _Hash_merge_helper;
+ friend class std::_Hash_merge_helper;
template<typename _H2, typename _P2>
void
@@ -1742,7 +1742,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#if __cplusplus > 201402L
template<typename, typename, typename>
- friend class _Hash_merge_helper;
+ friend class std::_Hash_merge_helper;
template<typename _H2, typename _P2>
void
diff --git a/libstdc++-v3/include/bits/unordered_set.h b/libstdc++-v3/include/bits/unordered_set.h
index 77942a3..c9ac4ad 100644
--- a/libstdc++-v3/include/bits/unordered_set.h
+++ b/libstdc++-v3/include/bits/unordered_set.h
@@ -588,7 +588,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#if __cplusplus > 201402L
template<typename, typename, typename>
- friend class _Hash_merge_helper;
+ friend class std::_Hash_merge_helper;
template<typename _H2, typename _P2>
void
@@ -1368,7 +1368,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#if __cplusplus > 201402L
template<typename, typename, typename>
- friend class _Hash_merge_helper;
+ friend class std::_Hash_merge_helper;
template<typename _H2, typename _P2>
void
diff --git a/libstdc++-v3/include/debug/vector b/libstdc++-v3/include/debug/vector
index fa79379..5289265 100644
--- a/libstdc++-v3/include/debug/vector
+++ b/libstdc++-v3/include/debug/vector
@@ -770,6 +770,8 @@ namespace __debug
} // namespace __debug
#if __cplusplus >= 201103L
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
// DR 1182.
/// std::hash specialization for vector<bool>.
template<typename _Alloc>
@@ -780,6 +782,8 @@ namespace __debug
operator()(const __debug::vector<bool, _Alloc>& __b) const noexcept
{ return std::hash<_GLIBCXX_STD_C::vector<bool, _Alloc>>()(__b); }
};
+
+_GLIBCXX_END_NAMESPACE_VERSION
#endif
} // namespace std
diff --git a/libstdc++-v3/include/std/bitset b/libstdc++-v3/include/std/bitset
index 630602d..e598ea3 100644
--- a/libstdc++-v3/include/std/bitset
+++ b/libstdc++-v3/include/std/bitset
@@ -50,6 +50,10 @@
#include <iosfwd>
#include <bits/cxxabi_forced.h>
+#if __cplusplus >= 201103L
+# include <bits/functional_hash.h>
+#endif
+
#define _GLIBCXX_BITSET_BITS_PER_WORD (__CHAR_BIT__ * __SIZEOF_LONG__)
#define _GLIBCXX_BITSET_WORDS(__n) \
((__n) / _GLIBCXX_BITSET_BITS_PER_WORD + \
@@ -779,7 +783,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
}
#if __cplusplus >= 201103L
- template<typename> friend struct hash;
+ friend struct std::hash<bitset>;
#endif
public:
@@ -1549,8 +1553,6 @@ _GLIBCXX_END_NAMESPACE_CONTAINER
#if __cplusplus >= 201103L
-#include <bits/functional_hash.h>
-
namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION