aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2018-08-22 23:54:33 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2018-08-22 23:54:33 +0100
commit1bc7a28f9424f4abe021f1831c8f07c0f8f62b3f (patch)
treeda495d90be79538037a589639cba305dcc02f0a0
parentaf55b3af33f0a35fecd2117a43ee93468925e98c (diff)
downloadgcc-1bc7a28f9424f4abe021f1831c8f07c0f8f62b3f.zip
gcc-1bc7a28f9424f4abe021f1831c8f07c0f8f62b3f.tar.gz
gcc-1bc7a28f9424f4abe021f1831c8f07c0f8f62b3f.tar.bz2
PR libstdc++/87061 remove pmr type aliases for COW strings
The pmr aliases for basic_string and match_results are incompatible with the gcc4-compatible ABI because the Copy-On-Write basic_string class doesn't support C++11 allocators. PR libstdc++/87061 * include/experimental/regex [!_GLIBCXX_USE_CXX11_ABI] (experimental::pmr::match_results, experimental::pmr::cmatch) (experimental::pmr::smatch, experimental::pmr::wcmatch) (experimental::pmr::wsmatch): Do not declare for gcc4-compatible ABI, because COW strings don't support C++11 allocator model. * include/experimental/string [!_GLIBCXX_USE_CXX11_ABI] (experimental::pmr::basic_string, experimental::pmr::string) (experimental::pmr::u16string, experimental::pmr::u32string) (experimental::pmr::wstring): Likewise. * include/std/regex [!_GLIBCXX_USE_CXX11_ABI] (pmr::match_results) (pmr::cmatch, pmr::smatch, pmr::wcmatch, pmr::wsmatch): Likewise. * include/std/string [!_GLIBCXX_USE_CXX11_ABI] (pmr::basic_string) (pmr::string, pmr::u16string, pmr::u32string, pmr::wstring): Likewise. * testsuite/21_strings/basic_string/types/pmr_typedefs.cc: Require cxx11-abi. * testsuite/28_regex/match_results/pmr_typedefs.cc: Likewise. From-SVN: r263791
-rw-r--r--libstdc++-v3/ChangeLog18
-rw-r--r--libstdc++-v3/include/experimental/regex3
-rw-r--r--libstdc++-v3/include/experimental/string2
-rw-r--r--libstdc++-v3/include/std/regex2
-rw-r--r--libstdc++-v3/include/std/string2
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/types/pmr_typedefs.cc1
-rw-r--r--libstdc++-v3/testsuite/28_regex/match_results/pmr_typedefs.cc1
7 files changed, 26 insertions, 3 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index dfe3a52..e703ffb5 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,23 @@
2018-08-22 Jonathan Wakely <jwakely@redhat.com>
+ PR libstdc++/87061
+ * include/experimental/regex [!_GLIBCXX_USE_CXX11_ABI]
+ (experimental::pmr::match_results, experimental::pmr::cmatch)
+ (experimental::pmr::smatch, experimental::pmr::wcmatch)
+ (experimental::pmr::wsmatch): Do not declare for gcc4-compatible ABI,
+ because COW strings don't support C++11 allocator model.
+ * include/experimental/string [!_GLIBCXX_USE_CXX11_ABI]
+ (experimental::pmr::basic_string, experimental::pmr::string)
+ (experimental::pmr::u16string, experimental::pmr::u32string)
+ (experimental::pmr::wstring): Likewise.
+ * include/std/regex [!_GLIBCXX_USE_CXX11_ABI] (pmr::match_results)
+ (pmr::cmatch, pmr::smatch, pmr::wcmatch, pmr::wsmatch): Likewise.
+ * include/std/string [!_GLIBCXX_USE_CXX11_ABI] (pmr::basic_string)
+ (pmr::string, pmr::u16string, pmr::u32string, pmr::wstring): Likewise.
+ * testsuite/21_strings/basic_string/types/pmr_typedefs.cc: Require
+ cxx11-abi.
+ * testsuite/28_regex/match_results/pmr_typedefs.cc: Likewise.
+
PR libstdc++/78448
* include/bits/deque.tcc (deque::_M_range_initialize): Use
_S_check_init_len to check size.
diff --git a/libstdc++-v3/include/experimental/regex b/libstdc++-v3/include/experimental/regex
index eb2af15..633b396 100644
--- a/libstdc++-v3/include/experimental/regex
+++ b/libstdc++-v3/include/experimental/regex
@@ -44,6 +44,7 @@ namespace experimental
{
inline namespace fundamentals_v2
{
+#if _GLIBCXX_USE_CXX11_ABI
namespace pmr
{
template<typename _BidirectionalIterator>
@@ -57,7 +58,7 @@ namespace pmr
typedef match_results<wstring::const_iterator> wsmatch;
} // namespace pmr
-
+#endif
} // namespace fundamentals_v2
} // namespace experimental
_GLIBCXX_END_NAMESPACE_VERSION
diff --git a/libstdc++-v3/include/experimental/string b/libstdc++-v3/include/experimental/string
index f101255..5a96bf7 100644
--- a/libstdc++-v3/include/experimental/string
+++ b/libstdc++-v3/include/experimental/string
@@ -62,6 +62,7 @@ inline namespace fundamentals_v2
__cont.end());
}
+#if _GLIBCXX_USE_CXX11_ABI
namespace pmr
{
// basic_string using polymorphic allocator in namespace pmr
@@ -77,6 +78,7 @@ inline namespace fundamentals_v2
typedef basic_string<wchar_t> wstring;
} // namespace pmr
+#endif
} // namespace fundamentals_v2
} // namespace experimental
diff --git a/libstdc++-v3/include/std/regex b/libstdc++-v3/include/std/regex
index f0dfa3f..fd15565 100644
--- a/libstdc++-v3/include/std/regex
+++ b/libstdc++-v3/include/std/regex
@@ -62,7 +62,7 @@
#include <bits/regex.h>
#include <bits/regex_executor.h>
-#if __cplusplus >= 201703L
+#if __cplusplus >= 201703L && _GLIBCXX_USE_CXX11_ABI
#include <memory_resource>
namespace std _GLIBCXX_VISIBILITY(default)
{
diff --git a/libstdc++-v3/include/std/string b/libstdc++-v3/include/std/string
index d3cc03a..dd60df2 100644
--- a/libstdc++-v3/include/std/string
+++ b/libstdc++-v3/include/std/string
@@ -52,7 +52,7 @@
#include <bits/basic_string.h>
#include <bits/basic_string.tcc>
-#if __cplusplus >= 201703L
+#if __cplusplus >= 201703L && _GLIBCXX_USE_CXX11_ABI
namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/types/pmr_typedefs.cc b/libstdc++-v3/testsuite/21_strings/basic_string/types/pmr_typedefs.cc
index d20fc42..2395667 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/types/pmr_typedefs.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/types/pmr_typedefs.cc
@@ -17,6 +17,7 @@
// { dg-options "-std=gnu++17" }
// { dg-do compile { target c++17 } }
+// { dg-require-effective-target cxx11-abi }
#include <string>
#include <memory_resource>
diff --git a/libstdc++-v3/testsuite/28_regex/match_results/pmr_typedefs.cc b/libstdc++-v3/testsuite/28_regex/match_results/pmr_typedefs.cc
index 23aef39..d97fcfe 100644
--- a/libstdc++-v3/testsuite/28_regex/match_results/pmr_typedefs.cc
+++ b/libstdc++-v3/testsuite/28_regex/match_results/pmr_typedefs.cc
@@ -17,6 +17,7 @@
// { dg-options "-std=gnu++17" }
// { dg-do compile { target c++17 } }
+// { dg-require-effective-target cxx11-abi }
#include <regex>
#include <memory_resource>