Commit 9bc50282 by Jonathan Wakely Committed by Jonathan Wakely

Leave moved-from std::deque in a valid state

	PR libstdc++/67707
	* include/bits/stl_deque.h (_Deque_base::_M_move_impl): Initialize
	empty object.
	* testsuite/23_containers/deque/allocator/move.cc: Check moved-from
	deque.

From-SVN: r228090
parent 4f761179
2015-09-24 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/67707
* include/bits/stl_deque.h (_Deque_base::_M_move_impl): Initialize
empty object.
* testsuite/23_containers/deque/allocator/move.cc: Check moved-from
deque.
2015-09-23 Jonathan Wakely <jwakely@redhat.com>
* src/filesystem/ops.cc (canonical): Simplify error handling and
......
......@@ -644,6 +644,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_Tp_alloc_type __sink __attribute((__unused__)) {std::move(__alloc)};
// Create an empty map that allocates using the moved-from allocator.
_Deque_base __empty{__alloc};
__empty._M_initialize_map(0);
// Now safe to modify current allocator and perform non-throwing swaps.
_Deque_impl __ret{std::move(_M_get_Tp_allocator())};
_M_impl._M_swap_data(__ret);
......
......@@ -36,6 +36,11 @@ void test01()
VERIFY(1 == v1.get_allocator().get_personality());
VERIFY(1 == v2.get_allocator().get_personality());
VERIFY( it == v2.begin() );
// PR libstdc++/67707
VERIFY( v1.size() == 0 );
v1 = test_type();
VERIFY( v1.size() == 0 );
}
void test02()
......@@ -47,6 +52,11 @@ void test02()
test_type v2(std::move(v1), alloc_type(2));
VERIFY(1 == v1.get_allocator().get_personality());
VERIFY(2 == v2.get_allocator().get_personality());
// PR libstdc++/67707
VERIFY( v1.size() == 0 );
v1 = test_type();
VERIFY( v1.size() == 0 );
}
int main()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment