summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libcxx/include/ext/hash_map19
-rw-r--r--libcxx/include/ext/hash_set6
-rw-r--r--libcxx/test/libcxx/containers/gnu_cxx/hash_map.pass.cpp30
-rw-r--r--libcxx/test/libcxx/containers/gnu_cxx/hash_map_name_lookup.pass.cpp36
-rw-r--r--libcxx/test/libcxx/containers/gnu_cxx/hash_set.pass.cpp30
-rw-r--r--libcxx/test/libcxx/containers/gnu_cxx/hash_set_name_lookup.pass.cpp34
6 files changed, 113 insertions, 42 deletions
diff --git a/libcxx/include/ext/hash_map b/libcxx/include/ext/hash_map
index 24823c6bf0c..20f778be971 100644
--- a/libcxx/include/ext/hash_map
+++ b/libcxx/include/ext/hash_map
@@ -39,14 +39,17 @@ public:
typedef /unspecified/ iterator;
typedef /unspecified/ const_iterator;
- explicit hash_map(size_type n = 193, const hasher& hf = hasher(),
+ hash_map();
+ explicit hash_map(size_type n, const hasher& hf = hasher(),
const key_equal& eql = key_equal(),
const allocator_type& a = allocator_type());
template <class InputIterator>
- hash_map(InputIterator f, InputIterator l,
- size_type n = 193, const hasher& hf = hasher(),
- const key_equal& eql = key_equal(),
- const allocator_type& a = allocator_type());
+ hash_map(InputIterator f, InputIterator l);
+ template <class InputIterator>
+ hash_map(InputIterator f, InputIterator l,
+ size_type n, const hasher& hf = hasher(),
+ const key_equal& eql = key_equal(),
+ const allocator_type& a = allocator_type());
hash_map(const hash_map&);
~hash_map();
hash_map& operator=(const hash_map&);
@@ -502,7 +505,7 @@ public:
typedef __hash_map_iterator<typename __table::iterator> iterator;
typedef __hash_map_const_iterator<typename __table::const_iterator> const_iterator;
- _LIBCPP_INLINE_VISIBILITY hash_map() {__table_.rehash(193);}
+ _LIBCPP_INLINE_VISIBILITY hash_map() { }
explicit hash_map(size_type __n, const hasher& __hf = hasher(),
const key_equal& __eql = key_equal());
hash_map(size_type __n, const hasher& __hf,
@@ -623,7 +626,6 @@ template <class _InputIterator>
hash_map<_Key, _Tp, _Hash, _Pred, _Alloc>::hash_map(
_InputIterator __first, _InputIterator __last)
{
- __table_.rehash(193);
insert(__first, __last);
}
@@ -775,7 +777,7 @@ public:
typedef __hash_map_const_iterator<typename __table::const_iterator> const_iterator;
_LIBCPP_INLINE_VISIBILITY
- hash_multimap() {__table_.rehash(193);}
+ hash_multimap() { }
explicit hash_multimap(size_type __n, const hasher& __hf = hasher(),
const key_equal& __eql = key_equal());
hash_multimap(size_type __n, const hasher& __hf,
@@ -890,7 +892,6 @@ template <class _InputIterator>
hash_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>::hash_multimap(
_InputIterator __first, _InputIterator __last)
{
- __table_.rehash(193);
insert(__first, __last);
}
diff --git a/libcxx/include/ext/hash_set b/libcxx/include/ext/hash_set
index e5141824b60..f0ba8d8ded9 100644
--- a/libcxx/include/ext/hash_set
+++ b/libcxx/include/ext/hash_set
@@ -237,7 +237,7 @@ public:
typedef typename __table::const_iterator const_iterator;
_LIBCPP_INLINE_VISIBILITY
- hash_set() {__table_.rehash(193);}
+ hash_set() { }
explicit hash_set(size_type __n, const hasher& __hf = hasher(),
const key_equal& __eql = key_equal());
hash_set(size_type __n, const hasher& __hf, const key_equal& __eql,
@@ -347,7 +347,6 @@ template <class _InputIterator>
hash_set<_Value, _Hash, _Pred, _Alloc>::hash_set(
_InputIterator __first, _InputIterator __last)
{
- __table_.rehash(193);
insert(__first, __last);
}
@@ -459,7 +458,7 @@ public:
typedef typename __table::const_iterator const_iterator;
_LIBCPP_INLINE_VISIBILITY
- hash_multiset() {__table_.rehash(193);}
+ hash_multiset() { }
explicit hash_multiset(size_type __n, const hasher& __hf = hasher(),
const key_equal& __eql = key_equal());
hash_multiset(size_type __n, const hasher& __hf,
@@ -569,7 +568,6 @@ template <class _InputIterator>
hash_multiset<_Value, _Hash, _Pred, _Alloc>::hash_multiset(
_InputIterator __first, _InputIterator __last)
{
- __table_.rehash(193);
insert(__first, __last);
}
diff --git a/libcxx/test/libcxx/containers/gnu_cxx/hash_map.pass.cpp b/libcxx/test/libcxx/containers/gnu_cxx/hash_map.pass.cpp
index bfcb8aeda3f..2c72acd7143 100644
--- a/libcxx/test/libcxx/containers/gnu_cxx/hash_map.pass.cpp
+++ b/libcxx/test/libcxx/containers/gnu_cxx/hash_map.pass.cpp
@@ -6,31 +6,31 @@
//
//===----------------------------------------------------------------------===//
+
// Prevent emission of the deprecated warning.
#ifdef __clang__
#pragma clang diagnostic ignored "-W#warnings"
#endif
-// Poison the std:: names we might use inside __gnu_cxx to ensure they're
-// properly qualified.
-struct allocator;
-struct pair;
-struct equal_to;
-struct unique_ptr;
#include <ext/hash_map>
+#include <cassert>
#include "test_macros.h"
+#include "count_new.hpp"
-
-namespace __gnu_cxx {
-template class hash_map<int, int>;
+void test_default_does_not_allocate() {
+ DisableAllocationGuard g;
+ ((void)g);
+ {
+ __gnu_cxx::hash_map<int, int> h;
+ assert(h.bucket_count() == 0);
+ }
+ {
+ __gnu_cxx::hash_multimap<int, int> h;
+ assert(h.bucket_count() == 0);
+ }
}
int main(int, char**) {
- typedef __gnu_cxx::hash_map<int, int> Map;
- Map m;
- Map m2(m);
- ((void)m2);
-
- return 0;
+ test_default_does_not_allocate();
}
diff --git a/libcxx/test/libcxx/containers/gnu_cxx/hash_map_name_lookup.pass.cpp b/libcxx/test/libcxx/containers/gnu_cxx/hash_map_name_lookup.pass.cpp
new file mode 100644
index 00000000000..bfcb8aeda3f
--- /dev/null
+++ b/libcxx/test/libcxx/containers/gnu_cxx/hash_map_name_lookup.pass.cpp
@@ -0,0 +1,36 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Prevent emission of the deprecated warning.
+#ifdef __clang__
+#pragma clang diagnostic ignored "-W#warnings"
+#endif
+
+// Poison the std:: names we might use inside __gnu_cxx to ensure they're
+// properly qualified.
+struct allocator;
+struct pair;
+struct equal_to;
+struct unique_ptr;
+#include <ext/hash_map>
+
+#include "test_macros.h"
+
+
+namespace __gnu_cxx {
+template class hash_map<int, int>;
+}
+
+int main(int, char**) {
+ typedef __gnu_cxx::hash_map<int, int> Map;
+ Map m;
+ Map m2(m);
+ ((void)m2);
+
+ return 0;
+}
diff --git a/libcxx/test/libcxx/containers/gnu_cxx/hash_set.pass.cpp b/libcxx/test/libcxx/containers/gnu_cxx/hash_set.pass.cpp
index b3e1e195663..6626fc6f0a9 100644
--- a/libcxx/test/libcxx/containers/gnu_cxx/hash_set.pass.cpp
+++ b/libcxx/test/libcxx/containers/gnu_cxx/hash_set.pass.cpp
@@ -6,29 +6,31 @@
//
//===----------------------------------------------------------------------===//
+
// Prevent emission of the deprecated warning.
#ifdef __clang__
#pragma clang diagnostic ignored "-W#warnings"
#endif
-// Poison the std:: names we might use inside __gnu_cxx to ensure they're
-// properly qualified.
-struct allocator;
-struct pair;
-struct equal_to;
-struct unique_ptr;
+
#include <ext/hash_set>
+#include <cassert>
#include "test_macros.h"
+#include "count_new.hpp"
-namespace __gnu_cxx {
-template class hash_set<int>;
+void test_default_does_not_allocate() {
+ DisableAllocationGuard g;
+ ((void)g);
+ {
+ __gnu_cxx::hash_set<int> h;
+ assert(h.bucket_count() == 0);
+ }
+ {
+ __gnu_cxx::hash_multiset<int> h;
+ assert(h.bucket_count() == 0);
+ }
}
int main(int, char**) {
- typedef __gnu_cxx::hash_set<int> Set;
- Set s;
- Set s2(s);
- ((void)s2);
-
- return 0;
+ test_default_does_not_allocate();
}
diff --git a/libcxx/test/libcxx/containers/gnu_cxx/hash_set_name_lookup.pass.cpp b/libcxx/test/libcxx/containers/gnu_cxx/hash_set_name_lookup.pass.cpp
new file mode 100644
index 00000000000..b3e1e195663
--- /dev/null
+++ b/libcxx/test/libcxx/containers/gnu_cxx/hash_set_name_lookup.pass.cpp
@@ -0,0 +1,34 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Prevent emission of the deprecated warning.
+#ifdef __clang__
+#pragma clang diagnostic ignored "-W#warnings"
+#endif
+// Poison the std:: names we might use inside __gnu_cxx to ensure they're
+// properly qualified.
+struct allocator;
+struct pair;
+struct equal_to;
+struct unique_ptr;
+#include <ext/hash_set>
+
+#include "test_macros.h"
+
+namespace __gnu_cxx {
+template class hash_set<int>;
+}
+
+int main(int, char**) {
+ typedef __gnu_cxx::hash_set<int> Set;
+ Set s;
+ Set s2(s);
+ ((void)s2);
+
+ return 0;
+}
OpenPOWER on IntegriCloud