[libc++][nfc] Test std::unique_ptr self move assignment.

The post-conditions for the self move assignment of `std::unique_ptr`
were changed. This requires no implementation changes. A test was added
to validate the new post-conditions.

Addresses
- LWG-3455: Incorrect Postconditions on `unique_ptr` move assignment

Reviewed By: #libc, ldionne

Differential Revision: https://reviews.llvm.org/D103764
This commit is contained in:
Mark de Wever 2021-06-06 13:44:10 +02:00
parent 62bd7da889
commit e7c621a607
3 changed files with 13 additions and 2 deletions

View File

@ -47,4 +47,4 @@ Library Working Group Issues Status
:header-rows: 1
:widths: auto
Last Updated: 01-Mar-2021
Last Updated: 6-June-2021

View File

@ -36,7 +36,7 @@
"`3448 <https://wg21.link/LWG3448>`__","``transform_view``'s sentinel<false> not comparable with ``iterator<true>``","November 2020","",""
"`3449 <https://wg21.link/LWG3449>`__","take_view and take_while_view's ``sentinel<false>`` not comparable with their const iterator","November 2020","",""
"`3453 <https://wg21.link/LWG3453>`__","Generic code cannot call ``ranges::advance(i, s)``","November 2020","",""
"`3455 <https://wg21.link/LWG3455>`__","Incorrect Postconditions on ``unique_ptr`` move assignment","November 2020","",""
"`3455 <https://wg21.link/LWG3455>`__","Incorrect Postconditions on ``unique_ptr`` move assignment","November 2020","|Nothing To Do|",""
"`3460 <https://wg21.link/LWG3460>`__","Unimplementable ``noop_coroutine_handle`` guarantees","November 2020","",""
"`3461 <https://wg21.link/LWG3461>`__","``convertible_to``'s description mishandles cv-qualified void","November 2020","",""
"`3465 <https://wg21.link/LWG3465>`__","compare_partial_order_fallback requires ``F < E``","November 2020","",""

1 Issue # Issue Name Meeting Status First released version
36 `3448 <https://wg21.link/LWG3448>`__ ``transform_view``'s sentinel<false> not comparable with ``iterator<true>`` November 2020
37 `3449 <https://wg21.link/LWG3449>`__ take_view and take_while_view's ``sentinel<false>`` not comparable with their const iterator November 2020
38 `3453 <https://wg21.link/LWG3453>`__ Generic code cannot call ``ranges::advance(i, s)`` November 2020
39 `3455 <https://wg21.link/LWG3455>`__ Incorrect Postconditions on ``unique_ptr`` move assignment November 2020 |Nothing To Do|
40 `3460 <https://wg21.link/LWG3460>`__ Unimplementable ``noop_coroutine_handle`` guarantees November 2020
41 `3461 <https://wg21.link/LWG3461>`__ ``convertible_to``'s description mishandles cv-qualified void November 2020
42 `3465 <https://wg21.link/LWG3465>`__ compare_partial_order_fallback requires ``F < E`` November 2020

View File

@ -8,6 +8,9 @@
// UNSUPPORTED: c++03
// Self assignement post-conditions are tested.
// ADDITIONAL_COMPILE_FLAGS: -Wno-self-move
// <memory>
// unique_ptr
@ -72,6 +75,14 @@ void test_basic() {
assert(d2.state() == 5);
}
assert(A::count == 0);
{
std::unique_ptr<VT> s(newValue<VT>(expect_alive));
A* p = s.get();
s = std::move(s);
assert(A::count == expect_alive);
assert(s.get() == p);
}
assert(A::count == 0);
}
template <bool IsArray>