diff mbox series

Forward declare debug containers so std::pmr aliases work

Message ID 20180824174305.GA7910@redhat.com
State New
Headers show
Series Forward declare debug containers so std::pmr aliases work | expand

Commit Message

Jonathan Wakely Aug. 24, 2018, 5:43 p.m. UTC
Prior to this change, including a <debug/xxx> header when _GLIBCXX_DEBUG
is also defined would fail to compile in C++17 or later. The <debug/xxx>
header would include the standard <xxx> header which defined
std::pmr::xxx as an alias for std::xxx. But in Debug Mode std::xxx
refers to std::__debug::xxx which has not been defined yet (because it
is in <debug/xxx> after the inclusion of <xxx>).

This adds declarations of the debug containers before including the
non-Debug Mode <xxx> header, so that the std::pmr::xxx aliases work.

	* include/debug/deque (std::__debug::deque): Declare.
	* include/debug/forward_list (std::__debug::forward_list): Declare.
	* include/debug/list (std::__debug::list): Declare.
	* include/debug/map (std::__debug::map): Declare.
	* include/debug/set (std::__debug::set): Declare.
	* include/debug/unordered_map (std::__debug::unordered_map): Declare.
	* include/debug/unordered_set (std::__debug::unordered_set): Declare.
	* include/debug/vector (std::__debug::vector): Declare.
	* testsuite/23_containers/deque/types/pmr_typedefs_debug.cc: New test.
	* testsuite/23_containers/forward_list/pmr_typedefs_debug.cc: New
	test.
	* testsuite/23_containers/list/pmr_typedefs_debug.cc: New test.
	* testsuite/23_containers/map/pmr_typedefs_debug.cc: New test.
	* testsuite/23_containers/multimap/pmr_typedefs_debug.cc: New test.
	* testsuite/23_containers/multiset/pmr_typedefs_debug.cc: New test.
	* testsuite/23_containers/set/pmr_typedefs_debug.cc: New test.
	* testsuite/23_containers/unordered_map/pmr_typedefs_debug.cc: New
	test.
	* testsuite/23_containers/unordered_multimap/pmr_typedefs_debug.cc:
	New test.
	* testsuite/23_containers/unordered_multiset/pmr_typedefs_debug.cc:
	New test.
	* testsuite/23_containers/unordered_set/pmr_typedefs_debug.cc: New
	test.
	* testsuite/23_containers/vector/cons/destructible_debug_neg.cc:
	Adjust dg-error lineno.
	* testsuite/23_containers/vector/types/pmr_typedefs_debug.cc: New
	test.

Tested x86_64-linux, committed to trunk.
commit 9ad665dca4632d82a6d699886f728b3aa395f481
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Fri Aug 24 17:47:32 2018 +0100

    Forward declare debug containers so std::pmr aliases work
    
    Prior to this change, including a <debug/xxx> header when _GLIBCXX_DEBUG
    is also defined would fail to compile in C++17 or later. The <debug/xxx>
    header would include the standard <xxx> header which defined
    std::pmr::xxx as an alias for std::xxx. But in Debug Mode std::xxx
    refers to std::__debug::xxx which has not been defined yet (because it
    is in <debug/xxx> after the inclusion of <xxx>).
    
    This adds declarations of the debug containers before including the
    non-Debug Mode <xxx> header, so that the std::pmr::xxx aliases work.
    
            * include/debug/deque (std::__debug::deque): Declare.
            * include/debug/forward_list (std::__debug::forward_list): Declare.
            * include/debug/list (std::__debug::list): Declare.
            * include/debug/map (std::__debug::map): Declare.
            * include/debug/set (std::__debug::set): Declare.
            * include/debug/unordered_map (std::__debug::unordered_map): Declare.
            * include/debug/unordered_set (std::__debug::unordered_set): Declare.
            * include/debug/vector (std::__debug::vector): Declare.
            * testsuite/23_containers/deque/types/pmr_typedefs_debug.cc: New test.
            * testsuite/23_containers/forward_list/pmr_typedefs_debug.cc: New
            test.
            * testsuite/23_containers/list/pmr_typedefs_debug.cc: New test.
            * testsuite/23_containers/map/pmr_typedefs_debug.cc: New test.
            * testsuite/23_containers/multimap/pmr_typedefs_debug.cc: New test.
            * testsuite/23_containers/multiset/pmr_typedefs_debug.cc: New test.
            * testsuite/23_containers/set/pmr_typedefs_debug.cc: New test.
            * testsuite/23_containers/unordered_map/pmr_typedefs_debug.cc: New
            test.
            * testsuite/23_containers/unordered_multimap/pmr_typedefs_debug.cc:
            New test.
            * testsuite/23_containers/unordered_multiset/pmr_typedefs_debug.cc:
            New test.
            * testsuite/23_containers/unordered_set/pmr_typedefs_debug.cc: New
            test.
            * testsuite/23_containers/vector/cons/destructible_debug_neg.cc:
            Adjust dg-error lineno.
            * testsuite/23_containers/vector/types/pmr_typedefs_debug.cc: New
            test.
diff mbox series

Patch

diff --git a/libstdc++-v3/include/debug/deque b/libstdc++-v3/include/debug/deque
index a6047dbed1b..ad86b5c8f38 100644
--- a/libstdc++-v3/include/debug/deque
+++ b/libstdc++-v3/include/debug/deque
@@ -31,6 +31,11 @@ 
 
 #pragma GCC system_header
 
+#include <bits/c++config.h>
+namespace std _GLIBCXX_VISIBILITY(default) { namespace __debug {
+  template<typename _Tp, typename _Allocator> class deque;
+} } // namespace std::__debug
+
 #include <deque>
 #include <debug/safe_sequence.h>
 #include <debug/safe_container.h>
diff --git a/libstdc++-v3/include/debug/forward_list b/libstdc++-v3/include/debug/forward_list
index 840ed093302..e542447badd 100644
--- a/libstdc++-v3/include/debug/forward_list
+++ b/libstdc++-v3/include/debug/forward_list
@@ -31,6 +31,11 @@ 
 
 #pragma GCC system_header
 
+#include <bits/c++config.h>
+namespace std _GLIBCXX_VISIBILITY(default) { namespace __debug {
+  template<typename _Tp, typename _Allocator> class forward_list;
+} } // namespace std::__debug
+
 #include <forward_list>
 #include <debug/safe_sequence.h>
 #include <debug/safe_container.h>
diff --git a/libstdc++-v3/include/debug/list b/libstdc++-v3/include/debug/list
index e6df4dc3396..8add1d596e0 100644
--- a/libstdc++-v3/include/debug/list
+++ b/libstdc++-v3/include/debug/list
@@ -31,6 +31,11 @@ 
 
 #pragma GCC system_header
 
+#include <bits/c++config.h>
+namespace std _GLIBCXX_VISIBILITY(default) { namespace __debug {
+  template<typename _Tp, typename _Allocator> class list;
+} } // namespace std::__debug
+
 #include <list>
 #include <debug/safe_sequence.h>
 #include <debug/safe_container.h>
diff --git a/libstdc++-v3/include/debug/map b/libstdc++-v3/include/debug/map
index 8bd513b13d3..7151e8ee832 100644
--- a/libstdc++-v3/include/debug/map
+++ b/libstdc++-v3/include/debug/map
@@ -31,6 +31,14 @@ 
 
 #pragma GCC system_header
 
+#include <bits/c++config.h>
+namespace std _GLIBCXX_VISIBILITY(default) { namespace __debug {
+  template<typename _Key, typename _Tp, typename _Cmp, typename _Allocator>
+    class map;
+  template<typename _Key, typename _Tp, typename _Cmp, typename _Allocator>
+    class multimap;
+} } // namespace std::__debug
+
 #include <map>
 #include <debug/map.h>
 #include <debug/multimap.h>
diff --git a/libstdc++-v3/include/debug/set b/libstdc++-v3/include/debug/set
index 08806ca5475..f5d41a20334 100644
--- a/libstdc++-v3/include/debug/set
+++ b/libstdc++-v3/include/debug/set
@@ -31,6 +31,12 @@ 
 
 #pragma GCC system_header
 
+#include <bits/c++config.h>
+namespace std _GLIBCXX_VISIBILITY(default) { namespace __debug {
+  template<typename _Key, typename _Cmp, typename _Allocator> class set;
+  template<typename _Key, typename _Cmp, typename _Allocator> class multiset;
+} } // namespace std::__debug
+
 #include <set>
 #include <debug/set.h>
 #include <debug/multiset.h>
diff --git a/libstdc++-v3/include/debug/unordered_map b/libstdc++-v3/include/debug/unordered_map
index 095a7521f04..e558f3957f7 100644
--- a/libstdc++-v3/include/debug/unordered_map
+++ b/libstdc++-v3/include/debug/unordered_map
@@ -34,6 +34,16 @@ 
 #if __cplusplus < 201103L
 # include <bits/c++0x_warning.h>
 #else
+# include <bits/c++config.h>
+namespace std _GLIBCXX_VISIBILITY(default) { namespace __debug {
+  template<typename _Key, typename _Tp, typename _Hash, typename _Pred,
+	   typename _Allocator>
+    class unordered_map;
+  template<typename _Key, typename _Tp, typename _Hash, typename _Pred,
+	   typename _Allocator>
+    class unordered_multimap;
+} } // namespace std::__debug
+
 # include <unordered_map>
 
 #include <debug/safe_unordered_container.h>
diff --git a/libstdc++-v3/include/debug/unordered_set b/libstdc++-v3/include/debug/unordered_set
index ced9b1854d7..a883d3204b0 100644
--- a/libstdc++-v3/include/debug/unordered_set
+++ b/libstdc++-v3/include/debug/unordered_set
@@ -34,6 +34,13 @@ 
 #if __cplusplus < 201103L
 # include <bits/c++0x_warning.h>
 #else
+# include <bits/c++config.h>
+namespace std _GLIBCXX_VISIBILITY(default) { namespace __debug {
+  template<typename _Key, typename _Hash, typename _Pred, typename _Allocator>
+    class unordered_set;
+  template<typename _Key, typename _Hash, typename _Pred, typename _Allocator>
+    class unordered_multiset;
+} } // namespace std::__debug
 # include <unordered_set>
 
 #include <debug/safe_unordered_container.h>
diff --git a/libstdc++-v3/include/debug/vector b/libstdc++-v3/include/debug/vector
index e8d0928c7c0..ff9f5f47c24 100644
--- a/libstdc++-v3/include/debug/vector
+++ b/libstdc++-v3/include/debug/vector
@@ -31,6 +31,11 @@ 
 
 #pragma GCC system_header
 
+#include <bits/c++config.h>
+namespace std _GLIBCXX_VISIBILITY(default) { namespace __debug {
+  template<typename _Tp, typename _Allocator> class vector;
+} } // namespace std::__debug
+
 #include <vector>
 #include <utility>
 #include <debug/safe_sequence.h>
diff --git a/libstdc++-v3/testsuite/23_containers/deque/types/pmr_typedefs_debug.cc b/libstdc++-v3/testsuite/23_containers/deque/types/pmr_typedefs_debug.cc
new file mode 100644
index 00000000000..85c725ad535
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/deque/types/pmr_typedefs_debug.cc
@@ -0,0 +1,25 @@ 
+// Copyright (C) 2018 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++17 -D_GLIBCXX_DEBUG" }
+// { dg-do compile { target c++17 } }
+
+#include <debug/deque>
+static_assert(std::is_same_v<
+    std::pmr::deque<int>,
+    __gnu_debug::deque<int, std::pmr::polymorphic_allocator<int>>
+    >);
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/pmr_typedefs_debug.cc b/libstdc++-v3/testsuite/23_containers/forward_list/pmr_typedefs_debug.cc
new file mode 100644
index 00000000000..410ed82deed
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/pmr_typedefs_debug.cc
@@ -0,0 +1,25 @@ 
+// Copyright (C) 2018 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++17 -D_GLIBCXX_DEBUG" }
+// { dg-do compile { target c++17 } }
+
+#include <debug/forward_list>
+static_assert(std::is_same_v<
+    std::pmr::forward_list<int>,
+    __gnu_debug::forward_list<int, std::pmr::polymorphic_allocator<int>>
+    >);
diff --git a/libstdc++-v3/testsuite/23_containers/list/pmr_typedefs_debug.cc b/libstdc++-v3/testsuite/23_containers/list/pmr_typedefs_debug.cc
new file mode 100644
index 00000000000..671c12e43d1
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/list/pmr_typedefs_debug.cc
@@ -0,0 +1,25 @@ 
+// Copyright (C) 2018 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++17 -D_GLIBCXX_DEBUG" }
+// { dg-do compile { target c++17 } }
+
+#include <debug/list>
+static_assert(std::is_same_v<
+    std::pmr::list<int>,
+    __gnu_debug::list<int, std::pmr::polymorphic_allocator<int>>
+    >);
diff --git a/libstdc++-v3/testsuite/23_containers/map/pmr_typedefs_debug.cc b/libstdc++-v3/testsuite/23_containers/map/pmr_typedefs_debug.cc
new file mode 100644
index 00000000000..e3978a1ec53
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/map/pmr_typedefs_debug.cc
@@ -0,0 +1,26 @@ 
+// Copyright (C) 2018 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++17 -D_GLIBCXX_DEBUG" }
+// { dg-do compile { target c++17 } }
+
+#include <debug/map>
+static_assert(std::is_same_v<
+    std::pmr::map<int, int>,
+    __gnu_debug::map<int, int, std::less<int>,
+      std::pmr::polymorphic_allocator<std::pair<const int, int>>>
+    >);
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/pmr_typedefs_debug.cc b/libstdc++-v3/testsuite/23_containers/multimap/pmr_typedefs_debug.cc
new file mode 100644
index 00000000000..cbd4d95176a
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multimap/pmr_typedefs_debug.cc
@@ -0,0 +1,26 @@ 
+// Copyright (C) 2018 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++17 -D_GLIBCXX_DEBUG" }
+// { dg-do compile { target c++17 } }
+
+#include <debug/map>
+static_assert(std::is_same_v<
+    std::pmr::multimap<int, int>,
+    __gnu_debug::multimap<int, int, std::less<int>,
+      std::pmr::polymorphic_allocator<std::pair<const int, int>>>
+    >);
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/pmr_typedefs_debug.cc b/libstdc++-v3/testsuite/23_containers/multiset/pmr_typedefs_debug.cc
new file mode 100644
index 00000000000..d8ff08d04b5
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multiset/pmr_typedefs_debug.cc
@@ -0,0 +1,26 @@ 
+// Copyright (C) 2018 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++17 -D_GLIBCXX_DEBUG" }
+// { dg-do compile { target c++17 } }
+
+#include <debug/set>
+static_assert(std::is_same_v<
+    std::pmr::multiset<int>,
+    __gnu_debug::multiset<int, std::less<int>,
+      std::pmr::polymorphic_allocator<int>>
+    >);
diff --git a/libstdc++-v3/testsuite/23_containers/set/pmr_typedefs_debug.cc b/libstdc++-v3/testsuite/23_containers/set/pmr_typedefs_debug.cc
new file mode 100644
index 00000000000..f44f68a49a4
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/set/pmr_typedefs_debug.cc
@@ -0,0 +1,26 @@ 
+// Copyright (C) 2018 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++17 -D_GLIBCXX_DEBUG" }
+// { dg-do compile { target c++17 } }
+
+#include <debug/set>
+static_assert(std::is_same_v<
+    std::pmr::set<int>,
+    __gnu_debug::set<int, std::less<int>,
+      std::pmr::polymorphic_allocator<int>>
+    >);
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/pmr_typedefs_debug.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/pmr_typedefs_debug.cc
new file mode 100644
index 00000000000..2c423bc79e2
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/pmr_typedefs_debug.cc
@@ -0,0 +1,26 @@ 
+// Copyright (C) 2018 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++17 -D_GLIBCXX_DEBUG" }
+// { dg-do compile { target c++17 } }
+
+#include <debug/unordered_map>
+static_assert(std::is_same_v<
+    std::pmr::unordered_map<int, int>,
+    __gnu_debug::unordered_map<int, int, std::hash<int>, std::equal_to<int>,
+      std::pmr::polymorphic_allocator<std::pair<const int, int>>>
+    >);
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/pmr_typedefs_debug.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/pmr_typedefs_debug.cc
new file mode 100644
index 00000000000..30ae2a732b6
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/pmr_typedefs_debug.cc
@@ -0,0 +1,27 @@ 
+// Copyright (C) 2018 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++17 -D_GLIBCXX_DEBUG" }
+// { dg-do compile { target c++17 } }
+
+#include <debug/unordered_map>
+static_assert(std::is_same_v<
+    std::pmr::unordered_multimap<int, int>,
+    __gnu_debug::unordered_multimap<int, int, std::hash<int>,
+      std::equal_to<int>,
+      std::pmr::polymorphic_allocator<std::pair<const int, int>>>
+    >);
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/pmr_typedefs_debug.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/pmr_typedefs_debug.cc
new file mode 100644
index 00000000000..5f0ed27a1d0
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/pmr_typedefs_debug.cc
@@ -0,0 +1,26 @@ 
+// Copyright (C) 2018 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++17 -D_GLIBCXX_DEBUG" }
+// { dg-do compile { target c++17 } }
+
+#include <debug/unordered_set>
+static_assert(std::is_same_v<
+    std::pmr::unordered_multiset<int>,
+    __gnu_debug::unordered_multiset<int, std::hash<int>, std::equal_to<int>,
+      std::pmr::polymorphic_allocator<int>>
+    >);
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/pmr_typedefs_debug.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/pmr_typedefs_debug.cc
new file mode 100644
index 00000000000..73ad1e0f01f
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/pmr_typedefs_debug.cc
@@ -0,0 +1,26 @@ 
+// Copyright (C) 2018 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++17 -D_GLIBCXX_DEBUG" }
+// { dg-do compile { target c++17 } }
+
+#include <debug/unordered_set>
+static_assert(std::is_same_v<
+    std::pmr::unordered_set<int>,
+    __gnu_debug::unordered_set<int, std::hash<int>, std::equal_to<int>,
+      std::pmr::polymorphic_allocator<int>>
+    >);
diff --git a/libstdc++-v3/testsuite/23_containers/vector/cons/destructible_debug_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/cons/destructible_debug_neg.cc
index a3acaf420a4..587c67fe936 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/cons/destructible_debug_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/cons/destructible_debug_neg.cc
@@ -45,4 +45,4 @@  test02()
 // { dg-error "value type is destructible" "" { target *-*-* } 0 }
 
 // In Debug Mode the "required from here" errors come from <debug/vector>
-// { dg-error "required from here" "" { target *-*-* } 158 }
+// { dg-error "required from here" "" { target *-*-* } 163 }
diff --git a/libstdc++-v3/testsuite/23_containers/vector/types/pmr_typedefs_debug.cc b/libstdc++-v3/testsuite/23_containers/vector/types/pmr_typedefs_debug.cc
new file mode 100644
index 00000000000..f0da4ca511f
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/types/pmr_typedefs_debug.cc
@@ -0,0 +1,25 @@ 
+// Copyright (C) 2018 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++17 -D_GLIBCXX_DEBUG" }
+// { dg-do compile { target c++17 } }
+
+#include <debug/vector>
+static_assert(std::is_same_v<
+    std::pmr::vector<int>,
+    __gnu_debug::vector<int, std::pmr::polymorphic_allocator<int>>
+    >);