aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2019-04-26 16:02:02 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2019-04-26 16:02:02 +0100
commit53e6927367683761193f3bb6a7009f8ba04572ff (patch)
tree3483cca098f25a370342467c9ec9ff4a2b6b5d0e
parent69dad6faf9f00b0b22a822f0a0bcc57e7256959e (diff)
downloadgcc-53e6927367683761193f3bb6a7009f8ba04572ff.zip
gcc-53e6927367683761193f3bb6a7009f8ba04572ff.tar.gz
gcc-53e6927367683761193f3bb6a7009f8ba04572ff.tar.bz2
Fix tests that fail with _GLIBCXX_USE_CXX11_ABI=0
The pmr::string typedef isn't available for the old COW string, so some tests that use it were failing. * testsuite/20_util/variant/run.cc: Use a new Hashable type to test hashing, because pmr::string depends on _GLIBCXX_USE_CXX11_ABI==1. * testsuite/21_strings/basic_string/hash/hash.cc [!_GLIBCXX_USE_CXX11_ABI]: Don't test pmr strings. * testsuite/21_strings/basic_string/hash/hash_char8_t.cc [!_GLIBCXX_USE_CXX11_ABI]: Likewise. From-SVN: r270604
-rw-r--r--libstdc++-v3/ChangeLog7
-rw-r--r--libstdc++-v3/testsuite/20_util/variant/run.cc28
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/hash/hash.cc16
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/hash/hash_char8_t.cc4
4 files changed, 47 insertions, 8 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 61841e8..7862683 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,12 @@
2019-04-26 Jonathan Wakely <jwakely@redhat.com>
+ * testsuite/20_util/variant/run.cc: Use a new Hashable type to test
+ hashing, because pmr::string depends on _GLIBCXX_USE_CXX11_ABI==1.
+ * testsuite/21_strings/basic_string/hash/hash.cc
+ [!_GLIBCXX_USE_CXX11_ABI]: Don't test pmr strings.
+ * testsuite/21_strings/basic_string/hash/hash_char8_t.cc
+ [!_GLIBCXX_USE_CXX11_ABI]: Likewise.
+
* config/abi/pre/gnu.ver (GLIBCXX_3.4): Replace wildcard that matches
wstring::_M_replace_dispatch with more specific patterns.
* include/bits/fs_path.h (path::_S_convert_loc<_InputIterator>):
diff --git a/libstdc++-v3/testsuite/20_util/variant/run.cc b/libstdc++-v3/testsuite/20_util/variant/run.cc
index f7353ad..0416fba 100644
--- a/libstdc++-v3/testsuite/20_util/variant/run.cc
+++ b/libstdc++-v3/testsuite/20_util/variant/run.cc
@@ -22,7 +22,6 @@
#include <string>
#include <vector>
#include <unordered_set>
-#include <memory_resource>
#include <ext/throw_allocator.h>
#include <testsuite_hooks.h>
@@ -433,9 +432,30 @@ void test_visit()
}
}
+struct Hashable
+{
+ Hashable(const char* s) : s(s) { }
+ // Non-trivial special member functions:
+ Hashable(const Hashable&) { }
+ Hashable(Hashable&&) noexcept { }
+ ~Hashable() { }
+
+ string s;
+
+ bool operator==(const Hashable& rhs) const noexcept
+ { return s == rhs.s; }
+};
+
+namespace std {
+ template<> struct hash<Hashable> {
+ size_t operator()(const Hashable& h) const noexcept
+ { return hash<std::string>()(h.s); }
+ };
+}
+
void test_hash()
{
- unordered_set<variant<int, pmr::string>> s;
+ unordered_set<variant<int, Hashable>> s;
VERIFY(s.emplace(3).second);
VERIFY(s.emplace("asdf").second);
VERIFY(s.emplace().second);
@@ -447,12 +467,12 @@ void test_hash()
{
struct A
{
- operator pmr::string()
+ operator Hashable()
{
throw nullptr;
}
};
- variant<int, pmr::string> v;
+ variant<int, Hashable> v;
try
{
v.emplace<1>(A{});
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/hash/hash.cc b/libstdc++-v3/testsuite/21_strings/basic_string/hash/hash.cc
index 9bdf9bd..413c22b 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/hash/hash.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/hash/hash.cc
@@ -39,19 +39,29 @@ void
test01()
{
VERIFY( test(std::string("a narrow string")) );
- VERIFY( test(std::pmr::string("a narrow string, but with PMR!")) );
VERIFY( test(std::u16string(u"a utf-16 string")) );
- VERIFY( test(std::pmr::u16string(u"a utf-16 string, but with PMR!")) );
VERIFY( test(std::u32string(U"a utf-32 string")) );
- VERIFY( test(std::pmr::u32string(U"a utf-32 string, but with PMR!")) );
#if _GLIBCXX_USE_WCHAR_T
VERIFY( test(std::wstring(L"a wide string")) );
+#endif
+}
+
+void
+test02()
+{
+#if _GLIBCXX_USE_CXX11_ABI
+ VERIFY( test(std::pmr::string("a narrow string, but with PMR!")) );
+ VERIFY( test(std::pmr::u16string(u"a utf-16 string, but with PMR!")) );
+ VERIFY( test(std::pmr::u32string(U"a utf-32 string, but with PMR!")) );
+#if _GLIBCXX_USE_WCHAR_T
VERIFY( test(std::pmr::wstring(L"a wide string, but with PMR!")) );
#endif
+#endif
}
int
main()
{
test01();
+ test02();
}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/hash/hash_char8_t.cc b/libstdc++-v3/testsuite/21_strings/basic_string/hash/hash_char8_t.cc
index 0e4cfae..ad02fcc 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/hash/hash_char8_t.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/hash/hash_char8_t.cc
@@ -39,9 +39,11 @@ void
test01()
{
VERIFY( test(std::string("a narrow string")) );
- VERIFY( test(std::pmr::string("a narrow string, but with PMR!")) );
VERIFY( test(std::u8string(u8"a utf-8 string")) );
+#if _GLIBCXX_USE_CXX11_ABI
+ VERIFY( test(std::pmr::string("a narrow string, but with PMR!")) );
VERIFY( test(std::pmr::u8string(u8"a utf-8 string, but with PMR!")) );
+#endif
}
void