mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
4f761179ed
commit
9bc5028273
|
|
@ -1,3 +1,11 @@
|
|||
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()
|
||||
|
|
|
|||
Loading…
Reference in New Issue