diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2019-04-26 16:02:02 +0100 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2019-04-26 16:02:02 +0100 |
commit | 53e6927367683761193f3bb6a7009f8ba04572ff (patch) | |
tree | 3483cca098f25a370342467c9ec9ff4a2b6b5d0e | |
parent | 69dad6faf9f00b0b22a822f0a0bcc57e7256959e (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/20_util/variant/run.cc | 28 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/21_strings/basic_string/hash/hash.cc | 16 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/21_strings/basic_string/hash/hash_char8_t.cc | 4 |
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 |