From 5eb55483ebd183985e6f397491ac822304e3a893 Mon Sep 17 00:00:00 2001 From: zoecarver Date: Mon, 11 May 2020 22:42:49 -0700 Subject: [PATCH] Revert "[libcxx] shared_ptr changes from library fundamentals (P0414R2)." This reverts commit e8c13c182a562f45287d6b8da612264d09027087. --- libcxx/include/memory | 128 ++++++++------------- .../util.smartptr.shared/types.pass.cpp | 36 +----- .../const_pointer_cast.pass.cpp | 10 +- .../dynamic_pointer_cast.pass.cpp | 10 +- .../reinterpret_pointer_cast.pass.cpp | 52 --------- .../static_pointer_cast.pass.cpp | 16 +-- .../util.smartptr.shared.const/default.pass.cpp | 20 +--- .../util.smartptr.shared.const/pointer.pass.cpp | 18 +-- .../shared_ptr_copy_move.fail.cpp | 50 -------- .../shared_ptr_pointer.pass.cpp | 36 +----- .../util.smartptr.shared.const/unique_ptr.pass.cpp | 33 +----- .../make_shared.protected.fail.cpp | 3 +- .../util.smartptr.shared.obs/op_arrow.fail.cpp | 36 ------ .../util.smartptr.shared.obs/op_bool.pass.cpp | 21 +--- .../util.smartptr.shared.obs/op_bracket.fail.cpp | 29 ----- .../util.smartptr.shared.obs/op_bracket.pass.cpp | 51 -------- .../shared_ptr_Y.pass.cpp | 1 - libcxx/www/cxx1z_status.html | 2 +- 18 files changed, 67 insertions(+), 485 deletions(-) delete mode 100644 libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/reinterpret_pointer_cast.pass.cpp delete mode 100644 libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_copy_move.fail.cpp delete mode 100644 libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/op_arrow.fail.cpp delete mode 100644 libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/op_bracket.fail.cpp delete mode 100644 libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/op_bracket.pass.cpp diff --git a/libcxx/include/memory b/libcxx/include/memory index 4962714..29c5e98 100644 --- a/libcxx/include/memory +++ b/libcxx/include/memory @@ -3702,25 +3702,15 @@ public: template class _LIBCPP_TEMPLATE_VIS enable_shared_from_this; -template -struct __compatible_with -#if _LIBCPP_STD_VER > 14 - : is_convertible*, remove_extent_t<_Up>*> {}; -#else - : is_convertible<_Tp*, _Up*> {}; -#endif // _LIBCPP_STD_VER > 14 - template class _LIBCPP_TEMPLATE_VIS shared_ptr { public: + typedef _Tp element_type; + #if _LIBCPP_STD_VER > 14 typedef weak_ptr<_Tp> weak_type; - typedef remove_extent_t<_Tp> element_type; -#else - typedef _Tp element_type; #endif - private: element_type* __ptr_; __shared_weak_count* __cntrl_; @@ -3733,13 +3723,13 @@ public: _LIBCPP_CONSTEXPR shared_ptr(nullptr_t) _NOEXCEPT; template explicit shared_ptr(_Yp* __p, - typename enable_if<__compatible_with<_Yp, element_type>::value, __nat>::type = __nat()); + typename enable_if::value, __nat>::type = __nat()); template shared_ptr(_Yp* __p, _Dp __d, - typename enable_if<__compatible_with<_Yp, element_type>::value, __nat>::type = __nat()); + typename enable_if::value, __nat>::type = __nat()); template shared_ptr(_Yp* __p, _Dp __d, _Alloc __a, - typename enable_if<__compatible_with<_Yp, element_type>::value, __nat>::type = __nat()); + typename enable_if::value, __nat>::type = __nat()); template shared_ptr(nullptr_t __p, _Dp __d); template shared_ptr(nullptr_t __p, _Dp __d, _Alloc __a); template _LIBCPP_INLINE_VISIBILITY shared_ptr(const shared_ptr<_Yp>& __r, element_type* __p) _NOEXCEPT; @@ -3748,13 +3738,13 @@ public: template _LIBCPP_INLINE_VISIBILITY shared_ptr(const shared_ptr<_Yp>& __r, - typename enable_if<__compatible_with<_Yp, element_type>::value, __nat>::type = __nat()) + typename enable_if::value, __nat>::type = __nat()) _NOEXCEPT; #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES _LIBCPP_INLINE_VISIBILITY shared_ptr(shared_ptr&& __r) _NOEXCEPT; template _LIBCPP_INLINE_VISIBILITY shared_ptr(shared_ptr<_Yp>&& __r, - typename enable_if<__compatible_with<_Yp, element_type>::value, __nat>::type = __nat()) + typename enable_if::value, __nat>::type = __nat()) _NOEXCEPT; #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES template explicit shared_ptr(const weak_ptr<_Yp>& __r, @@ -3817,7 +3807,7 @@ public: template typename enable_if < - __compatible_with<_Yp, element_type>::value, + is_convertible<_Yp*, element_type*>::value, shared_ptr& >::type _LIBCPP_INLINE_VISIBILITY @@ -3828,8 +3818,8 @@ public: template typename enable_if < - __compatible_with<_Yp, element_type>::value, - shared_ptr& + is_convertible<_Yp*, element_type*>::value, + shared_ptr<_Tp>& >::type _LIBCPP_INLINE_VISIBILITY operator=(shared_ptr<_Yp>&& __r); @@ -3879,7 +3869,7 @@ public: template typename enable_if < - __compatible_with<_Yp, element_type>::value, + is_convertible<_Yp*, element_type*>::value, void >::type _LIBCPP_INLINE_VISIBILITY @@ -3887,7 +3877,7 @@ public: template typename enable_if < - __compatible_with<_Yp, element_type>::value, + is_convertible<_Yp*, element_type*>::value, void >::type _LIBCPP_INLINE_VISIBILITY @@ -3895,7 +3885,7 @@ public: template typename enable_if < - __compatible_with<_Yp, element_type>::value, + is_convertible<_Yp*, element_type*>::value, void >::type _LIBCPP_INLINE_VISIBILITY @@ -3907,12 +3897,7 @@ public: typename add_lvalue_reference::type operator*() const _NOEXCEPT {return *__ptr_;} _LIBCPP_INLINE_VISIBILITY - element_type* operator->() const _NOEXCEPT - { - static_assert(!_VSTD::is_array<_Tp>::value, - "std::shared_ptr::operator-> is only valid when T is not an array type."); - return __ptr_; - } + element_type* operator->() const _NOEXCEPT {return __ptr_;} _LIBCPP_INLINE_VISIBILITY long use_count() const _NOEXCEPT {return __cntrl_ ? __cntrl_->use_count() : 0;} _LIBCPP_INLINE_VISIBILITY @@ -3932,17 +3917,6 @@ public: __owner_equivalent(const shared_ptr& __p) const {return __cntrl_ == __p.__cntrl_;} -#if _LIBCPP_STD_VER > 14 - typename add_lvalue_reference::type - _LIBCPP_INLINE_VISIBILITY - operator[](ptrdiff_t __i) const - { - static_assert(_VSTD::is_array<_Tp>::value, - "std::shared_ptr::operator[] is only valid when T is an array type."); - return __ptr_[__i]; - } -#endif - #ifndef _LIBCPP_NO_RTTI template _LIBCPP_INLINE_VISIBILITY @@ -3995,18 +3969,6 @@ private: _LIBCPP_INLINE_VISIBILITY void __enable_weak_this(...) _NOEXCEPT {} - template - struct __shared_ptr_default_delete - : default_delete<_Yp> {}; - - template - struct __shared_ptr_default_delete<_Yp[_Sz], _Un> - : default_delete<_Yp[]> {}; - - template - struct __shared_ptr_default_delete<_Yp[], _Un> - : default_delete<_Yp[]> {}; - template friend class _LIBCPP_TEMPLATE_VIS shared_ptr; template friend class _LIBCPP_TEMPLATE_VIS weak_ptr; }; @@ -4039,13 +4001,13 @@ shared_ptr<_Tp>::shared_ptr(nullptr_t) _NOEXCEPT template template shared_ptr<_Tp>::shared_ptr(_Yp* __p, - typename enable_if<__compatible_with<_Yp, element_type>::value, __nat>::type) + typename enable_if::value, __nat>::type) : __ptr_(__p) { unique_ptr<_Yp> __hold(__p); typedef typename __shared_ptr_default_allocator<_Yp>::type _AllocT; - typedef __shared_ptr_pointer<_Yp*, __shared_ptr_default_delete<_Tp, _Yp>, _AllocT > _CntrlBlk; - __cntrl_ = new _CntrlBlk(__p, __shared_ptr_default_delete<_Tp, _Yp>(), _AllocT()); + typedef __shared_ptr_pointer<_Yp*, default_delete<_Yp>, _AllocT > _CntrlBlk; + __cntrl_ = new _CntrlBlk(__p, default_delete<_Yp>(), _AllocT()); __hold.release(); __enable_weak_this(__p, __p); } @@ -4053,7 +4015,7 @@ shared_ptr<_Tp>::shared_ptr(_Yp* __p, template template shared_ptr<_Tp>::shared_ptr(_Yp* __p, _Dp __d, - typename enable_if<__compatible_with<_Yp, element_type>::value, __nat>::type) + typename enable_if::value, __nat>::type) : __ptr_(__p) { #ifndef _LIBCPP_NO_EXCEPTIONS @@ -4099,7 +4061,7 @@ shared_ptr<_Tp>::shared_ptr(nullptr_t __p, _Dp __d) template template shared_ptr<_Tp>::shared_ptr(_Yp* __p, _Dp __d, _Alloc __a, - typename enable_if<__compatible_with<_Yp, element_type>::value, __nat>::type) + typename enable_if::value, __nat>::type) : __ptr_(__p) { #ifndef _LIBCPP_NO_EXCEPTIONS @@ -4177,7 +4139,7 @@ template template inline shared_ptr<_Tp>::shared_ptr(const shared_ptr<_Yp>& __r, - typename enable_if<__compatible_with<_Yp, element_type>::value, __nat>::type) + typename enable_if::value, __nat>::type) _NOEXCEPT : __ptr_(__r.__ptr_), __cntrl_(__r.__cntrl_) @@ -4202,7 +4164,7 @@ template template inline shared_ptr<_Tp>::shared_ptr(shared_ptr<_Yp>&& __r, - typename enable_if<__compatible_with<_Yp, element_type>::value, __nat>::type) + typename enable_if::value, __nat>::type) _NOEXCEPT : __ptr_(__r.__ptr_), __cntrl_(__r.__cntrl_) @@ -4314,7 +4276,7 @@ template inline typename enable_if < - __compatible_with<_Yp, typename shared_ptr<_Tp>::element_type>::value, + is_convertible<_Yp*, typename shared_ptr<_Tp>::element_type*>::value, shared_ptr<_Tp>& >::type shared_ptr<_Tp>::operator=(const shared_ptr<_Yp>& __r) _NOEXCEPT @@ -4339,7 +4301,7 @@ template inline typename enable_if < - __compatible_with<_Yp, typename shared_ptr<_Tp>::element_type>::value, + is_convertible<_Yp*, typename shared_ptr<_Tp>::element_type*>::value, shared_ptr<_Tp>& >::type shared_ptr<_Tp>::operator=(shared_ptr<_Yp>&& __r) @@ -4440,7 +4402,7 @@ template inline typename enable_if < - __compatible_with<_Yp, typename shared_ptr<_Tp>::element_type>::value, + is_convertible<_Yp*, typename shared_ptr<_Tp>::element_type*>::value, void >::type shared_ptr<_Tp>::reset(_Yp* __p) @@ -4453,7 +4415,7 @@ template inline typename enable_if < - __compatible_with<_Yp, typename shared_ptr<_Tp>::element_type>::value, + is_convertible<_Yp*, typename shared_ptr<_Tp>::element_type*>::value, void >::type shared_ptr<_Tp>::reset(_Yp* __p, _Dp __d) @@ -4466,7 +4428,7 @@ template inline typename enable_if < - __compatible_with<_Yp, typename shared_ptr<_Tp>::element_type>::value, + is_convertible<_Yp*, typename shared_ptr<_Tp>::element_type*>::value, void >::type shared_ptr<_Tp>::reset(_Yp* __p, _Dp __d, _Alloc __a) @@ -4680,41 +4642,41 @@ swap(shared_ptr<_Tp>& __x, shared_ptr<_Tp>& __y) _NOEXCEPT template inline _LIBCPP_INLINE_VISIBILITY -shared_ptr<_Tp> +typename enable_if +< + !is_array<_Tp>::value && !is_array<_Up>::value, + shared_ptr<_Tp> +>::type static_pointer_cast(const shared_ptr<_Up>& __r) _NOEXCEPT { - return shared_ptr<_Tp>(__r, - static_cast< - typename shared_ptr<_Tp>::element_type*>(__r.get())); + return shared_ptr<_Tp>(__r, static_cast<_Tp*>(__r.get())); } template inline _LIBCPP_INLINE_VISIBILITY -shared_ptr<_Tp> +typename enable_if +< + !is_array<_Tp>::value && !is_array<_Up>::value, + shared_ptr<_Tp> +>::type dynamic_pointer_cast(const shared_ptr<_Up>& __r) _NOEXCEPT { - typedef typename shared_ptr<_Tp>::element_type _ET; - _ET* __p = dynamic_cast<_ET*>(__r.get()); + _Tp* __p = dynamic_cast<_Tp*>(__r.get()); return __p ? shared_ptr<_Tp>(__r, __p) : shared_ptr<_Tp>(); } template -shared_ptr<_Tp> +typename enable_if +< + is_array<_Tp>::value == is_array<_Up>::value, + shared_ptr<_Tp> +>::type const_pointer_cast(const shared_ptr<_Up>& __r) _NOEXCEPT { - typedef typename shared_ptr<_Tp>::element_type _RTp; + typedef typename remove_extent<_Tp>::type _RTp; return shared_ptr<_Tp>(__r, const_cast<_RTp*>(__r.get())); } -template -shared_ptr<_Tp> -reinterpret_pointer_cast(const shared_ptr<_Up>& __r) _NOEXCEPT -{ - return shared_ptr<_Tp>(__r, - reinterpret_cast< - typename shared_ptr<_Tp>::element_type*>(__r.get())); -} - #ifndef _LIBCPP_NO_RTTI template @@ -5118,7 +5080,7 @@ struct _LIBCPP_TEMPLATE_VIS hash > _LIBCPP_INLINE_VISIBILITY result_type operator()(const argument_type& __ptr) const _NOEXCEPT { - return hash::element_type*>()(__ptr.get()); + return hash<_Tp*>()(__ptr.get()); } }; diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/types.pass.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/types.pass.cpp index b33f404..c3aedd5 100644 --- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/types.pass.cpp +++ b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/types.pass.cpp @@ -20,42 +20,14 @@ #include "test_macros.h" -#if TEST_STD_VER > 14 -template > -struct has_less : std::false_type {}; - -template -struct has_less() < std::declval())> > - : std::true_type {}; -#endif - struct A; // purposefully incomplete -struct B { - int x; - B() = default; -}; -template -void test() { - ASSERT_SAME_TYPE(typename std::shared_ptr::element_type, T); +int main(int, char**) +{ + static_assert((std::is_same::element_type, A>::value), ""); #if TEST_STD_VER > 14 - ASSERT_SAME_TYPE(typename std::shared_ptr::weak_type, std::weak_ptr); - static_assert(std::is_copy_constructible >::value, ""); - static_assert(std::is_copy_assignable >::value, ""); - static_assert(has_less >::value); - static_assert( - std::is_same::element_type, T>::value, ""); - static_assert( - std::is_same::element_type, T>::value, ""); + static_assert((std::is_same::weak_type, std::weak_ptr>::value), ""); #endif -} - -int main(int, char**) { - test(); - test(); - test(); - test(); return 0; } diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/const_pointer_cast.pass.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/const_pointer_cast.pass.cpp index 588a79f..e2bb126 100644 --- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/const_pointer_cast.pass.cpp +++ b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/const_pointer_cast.pass.cpp @@ -55,14 +55,6 @@ int main(int, char**) assert(pB.get() == pA.get()); assert(!pB.owner_before(pA) && !pA.owner_before(pB)); } -#if TEST_STD_VER > 14 - { - const std::shared_ptr pA; - std::shared_ptr pB = std::const_pointer_cast(pA); - assert(pB.get() == pA.get()); - assert(!pB.owner_before(pA) && !pA.owner_before(pB)); - } -#endif // TEST_STD_VER > 14 - return 0; + return 0; } diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/dynamic_pointer_cast.pass.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/dynamic_pointer_cast.pass.cpp index de268eb..d6d5da1 100644 --- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/dynamic_pointer_cast.pass.cpp +++ b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/dynamic_pointer_cast.pass.cpp @@ -55,14 +55,6 @@ int main(int, char**) assert(pA.get() == 0); assert(pA.use_count() == 0); } -#if TEST_STD_VER > 14 - { - const std::shared_ptr pB(new B[8]); - std::shared_ptr pA = std::dynamic_pointer_cast(pB); - assert(pA.get() == 0); - assert(pA.use_count() == 0); - } -#endif // TEST_STD_VER > 14 - return 0; + return 0; } diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/reinterpret_pointer_cast.pass.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/reinterpret_pointer_cast.pass.cpp deleted file mode 100644 index 221001f..0000000 --- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/reinterpret_pointer_cast.pass.cpp +++ /dev/null @@ -1,52 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -// - -// shared_ptr - -// template -// shared_ptr reinterpret_pointer_cast(const shared_ptr& r) noexcept; - -#include "test_macros.h" - -#include -#include -#include - -struct A { - int x; -}; - -int main(int, char**) { - { - const std::shared_ptr pA(new A); - std::shared_ptr pi = std::reinterpret_pointer_cast(pA); - std::shared_ptr pA2 = std::reinterpret_pointer_cast(pi); - assert(pA2.get() == pA.get()); - assert(!pi.owner_before(pA) && !pA.owner_before(pi)); - } - { - const std::shared_ptr pA; - std::shared_ptr pi = std::reinterpret_pointer_cast(pA); - std::shared_ptr pA2 = std::reinterpret_pointer_cast(pi); - assert(pA2.get() == pA.get()); - assert(!pi.owner_before(pA) && !pA.owner_before(pi)); - } -#if TEST_STD_VER > 14 - { - const std::shared_ptr pA; - std::shared_ptr pi = std::reinterpret_pointer_cast(pA); - std::shared_ptr pA2 = std::reinterpret_pointer_cast(pi); - assert(pA2.get() == pA.get()); - assert(!pi.owner_before(pA) && !pA.owner_before(pi)); - } -#endif // TEST_STD_VER > 14 - - return 0; -} diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/static_pointer_cast.pass.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/static_pointer_cast.pass.cpp index 8f8dade..1fe674f 100644 --- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/static_pointer_cast.pass.cpp +++ b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/static_pointer_cast.pass.cpp @@ -67,20 +67,6 @@ int main(int, char**) assert(pB.get() == pA.get()); assert(!pB.owner_before(pA) && !pA.owner_before(pB)); } -#if TEST_STD_VER > 14 - { - const std::shared_ptr pA; - std::shared_ptr pB = std::static_pointer_cast(pA); - assert(pB.get() == pA.get()); - assert(!pB.owner_before(pA) && !pA.owner_before(pB)); - } - { - const std::shared_ptr pA; - std::shared_ptr pB = std::static_pointer_cast(pA); - assert(pB.get() == pA.get()); - assert(!pB.owner_before(pA) && !pA.owner_before(pB)); - } -#endif // TEST_STD_VER > 14 - return 0; + return 0; } diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/default.pass.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/default.pass.cpp index 4efa18f..17b346d 100644 --- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/default.pass.cpp +++ b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/default.pass.cpp @@ -15,21 +15,11 @@ #include "test_macros.h" -struct A {}; - -template -void test() { - std::shared_ptr p; - assert(p.use_count() == 0); - assert(p.get() == 0); -} - -int main(int, char**) { - test(); - test(); - test(); - test(); - test(); +int main(int, char**) +{ + std::shared_ptr p; + assert(p.use_count() == 0); + assert(p.get() == 0); return 0; } diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer.pass.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer.pass.cpp index b055543..6eceb55 100644 --- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer.pass.cpp +++ b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer.pass.cpp @@ -45,21 +45,5 @@ int main(int, char**) } assert(A::count == 0); -#if TEST_STD_VER > 14 - { - std::shared_ptr pA(new A[8]); - assert(pA.use_count() == 1); - assert(A::count == 8); - } - assert(A::count == 0); - - { - std::shared_ptr pA(new A[8]); - assert(pA.use_count() == 1); - assert(A::count == 8); - } - assert(A::count == 0); -#endif - - return 0; + return 0; } diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_copy_move.fail.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_copy_move.fail.cpp deleted file mode 100644 index 41452fd..0000000 --- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_copy_move.fail.cpp +++ /dev/null @@ -1,50 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -// - -// shared_ptr - -// template shared_ptr(const shared_ptr& r); - -#include -#include - -struct A { - int x = 42; -}; - -struct ADel : std::default_delete { - typedef A* pointer; -}; - -int main(int, char**) { - static_assert(!(std::is_convertible::value), ""); - - { - std::shared_ptr pA; - std::shared_ptr pi(pA); // expected-error {{no matching constructor for initialization of 'std::shared_ptr'}} - } - { - std::shared_ptr pA; - std::shared_ptr pi(std::move(pA)); // expected-error {{no matching constructor for initialization of 'std::shared_ptr'}} - } - { - std::weak_ptr pA; - std::shared_ptr pi(std::move(pA)); // expected-error {{no matching constructor for initialization of 'std::shared_ptr'}} - } - -#if TEST_STD_VER > 14 - { - std::unique_ptr ui; - std::shared_ptr pi(std::move(ui)); // expected-error {{no matching constructor for initialization of 'std::shared_ptr'}} - } -#endif - - return 0; -} diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_pointer.pass.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_pointer.pass.cpp index d4a783a..3a600f8 100644 --- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_pointer.pass.cpp +++ b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_pointer.pass.cpp @@ -44,7 +44,6 @@ int main(int, char**) { std::shared_ptr pA(new A); assert(pA.use_count() == 1); - { B b; std::shared_ptr pB(pA, &b); @@ -61,38 +60,5 @@ int main(int, char**) assert(A::count == 0); assert(B::count == 0); - { - std::shared_ptr p1(nullptr); - std::shared_ptr p2(p1, new int); - assert(p2.get() != nullptr); - } - { - std::shared_ptr p1(new int); - std::shared_ptr p2(p1, nullptr); - assert(p2.get() == nullptr); - } - -#if TEST_STD_VER > 17 - { - std::shared_ptr pA(new A); - assert(pA.use_count() == 1); - - { - B b; - std::shared_ptr pB(std::move(pA), &b); - assert(A::count == 1); - assert(B::count == 1); - assert(pA.use_count() == 2); - assert(pB.use_count() == 2); - assert(pB.get() == &b); - } - assert(pA.use_count() == 1); - assert(A::count == 1); - assert(B::count == 0); - } - assert(A::count == 0); - assert(B::count == 0); -#endif - - return 0; + return 0; } diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/unique_ptr.pass.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/unique_ptr.pass.cpp index 40b68f6..91716fc 100644 --- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/unique_ptr.pass.cpp +++ b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/unique_ptr.pass.cpp @@ -56,19 +56,6 @@ struct D { void ref(D); } -template -struct StatefulDeleter { - int state = 0; - - StatefulDeleter(int val = 0) : state(val) {} - StatefulDeleter(StatefulDeleter const&) { assert(false); } - - void operator()(T* ptr) { - assert(state == 42); - delete ptr; - } -}; - int main(int, char**) { { @@ -103,29 +90,11 @@ int main(int, char**) assert(A::count == 0); assert(B::count == 0); assert(ptr.get() == 0); -#endif // TEST_STD_VER >= 11 - } - } #endif - -#if TEST_STD_VER > 14 - { - std::unique_ptr ptr; - std::shared_ptr p(std::move(ptr)); - assert(p.get() == 0); - assert(p.use_count() == 0); + } } #endif - - { - StatefulDeleter d; - std::unique_ptr&> u(new A, d); - std::shared_ptr p(std::move(u)); - d.state = 42; - assert(A::count == 1); - } assert(A::count == 0); - { // LWG 2399 fn(std::unique_ptr(new int)); } diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared.protected.fail.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared.protected.fail.cpp index 75bb497..d708743 100644 --- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared.protected.fail.cpp +++ b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared.protected.fail.cpp @@ -27,8 +27,7 @@ protected: int main(int, char**) { - std::shared_ptr p = std::make_shared< - S>(); // expected-error@memory:* {{static_assert failed due to requirement 'is_constructible::value' "Can't construct object in make_shared"}} + std::shared_ptr p = std::make_shared(); // expected-error-re@memory:* {{static_assert failed{{.*}} "Can't construct object in make_shared"}} return 0; } diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/op_arrow.fail.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/op_arrow.fail.cpp deleted file mode 100644 index c4ed32c..0000000 --- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/op_arrow.fail.cpp +++ /dev/null @@ -1,36 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -// - -// UNSUPPORTED: c++98, c++03, c++11, c++14 - -// shared_ptr - -// element_type& operator[](ptrdiff_t i) const; - -#include "test_macros.h" - -#include -#include - -struct Foo { - void call() {} -}; - -int main(int, char**) { - // Check that we get a static assertion when we try to use the bracket - // operator on shared_ptr when T is not an array type. - const std::shared_ptr p1; - (void)p1 - ->call(); // expected-error@memory:* {{std::shared_ptr::operator-> is only valid when T is not an array type.}} - const std::shared_ptr p2; - (void)p2 - ->call(); // expected-error@memory:* {{std::shared_ptr::operator-> is only valid when T is not an array type.}} - return 0; -} diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/op_bool.pass.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/op_bool.pass.cpp index 8016224..69b0ff3 100644 --- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/op_bool.pass.cpp +++ b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/op_bool.pass.cpp @@ -17,27 +17,16 @@ #include "test_macros.h" -struct A { - int a; - virtual ~A(){}; -}; -struct B : A {}; - int main(int, char**) { { - const std::shared_ptr p(new int(32)); - assert(p); - } - { - const std::shared_ptr p; - assert(!p); + const std::shared_ptr p(new int(32)); + assert(p); } { - std::shared_ptr basePtr = std::make_shared(); - std::shared_ptr sp = std::dynamic_pointer_cast(basePtr); - assert(sp); + const std::shared_ptr p; + assert(!p); } - return 0; + return 0; } diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/op_bracket.fail.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/op_bracket.fail.cpp deleted file mode 100644 index aef8ef7..0000000 --- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/op_bracket.fail.cpp +++ /dev/null @@ -1,29 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -// - -// UNSUPPORTED: c++98, c++03, c++11, c++14 - -// shared_ptr - -// element_type& operator[](ptrdiff_t i) const; - -#include "test_macros.h" - -#include -#include - -int main(int, char**) { - // Check that we get a static assertion when we try to use the bracket - // operator on shared_ptr when T is not an array type. - const std::shared_ptr p; - (void)p - [0]; // expected-error@memory:* {{std::shared_ptr::operator[] is only valid when T is an array type.}} - return 0; -} diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/op_bracket.pass.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/op_bracket.pass.cpp deleted file mode 100644 index 4a976fa..0000000 --- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/op_bracket.pass.cpp +++ /dev/null @@ -1,51 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -// - -// UNSUPPORTED: c++98, c++03, c++11, c++14 - -// shared_ptr - -// element_type& operator[](ptrdiff_t i) const; - -#include "test_macros.h" - -#include -#include - -int main(int, char**) { - { - const std::shared_ptr p(new int[8]); - - for (int i = 0; i < 8; ++i) - p[i] = i; - for (int i = 0; i < 8; ++i) - assert(p[i] == i); - } - { - int* iptr = new int[8]; - for (int i = 0; i < 8; ++i) - iptr[i] = i; - - const std::shared_ptr p(iptr); - - for (int i = 0; i < 8; ++i) - assert(p[i] == i); - } - { - const std::shared_ptr p(new int[8]); - - for (int i = 0; i < 8; ++i) - p[i] = i; - for (int i = 0; i < 8; ++i) - assert(p[i] == i); - } - - return 0; -} diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.assign/shared_ptr_Y.pass.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.assign/shared_ptr_Y.pass.cpp index f899dc4..6d6f4e1 100644 --- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.assign/shared_ptr_Y.pass.cpp +++ b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.assign/shared_ptr_Y.pass.cpp @@ -45,7 +45,6 @@ int main(int, char**) { { const std::shared_ptr pA(new A); - assert(pA.use_count() == 1); { std::weak_ptr pB; pB = pA; diff --git a/libcxx/www/cxx1z_status.html b/libcxx/www/cxx1z_status.html index 83aedb9..8f3f883 100644 --- a/libcxx/www/cxx1z_status.html +++ b/libcxx/www/cxx1z_status.html @@ -128,7 +128,7 @@ P0003R5LWGRemoving Deprecated Exception Specifications from C++17IssaquahComplete5.0 P0067R5LWGElementary string conversions, revision 5IssaquahPartially done P0403R1LWGLiteral suffixes for basic_string_viewIssaquahComplete4.0 - P0414R2LWGMerging shared_ptr changes from Library Fundamentals to C++17IssaquahComplete11.0 + P0414R2LWGMerging shared_ptr changes from Library Fundamentals to C++17Issaquah P0418R2LWGFail or succeed: there is no atomic latticeIssaquah P0426R1LWGConstexpr for std::char_traitsIssaquahComplete4.0 P0435R1LWGResolving LWG Issues re common_typeIssaquahComplete4.0 -- 2.7.4