forked from OSchip/llvm-project
[libc++] Implement P0174R2 (Deprecating Vestigial Library Parts in C++17)
Reviewed By: ldionne, Mordante, #libc Spies: jwakely, libcxx-commits Differential Revision: https://reviews.llvm.org/D127387
This commit is contained in:
parent
6d5fc1e3d5
commit
2fcf99d703
|
@ -44,6 +44,8 @@ Implemented Papers
|
||||||
- P0980R1 (Making ``std::string`` constexpr)
|
- P0980R1 (Making ``std::string`` constexpr)
|
||||||
- P2216R3 (std::format improvements)
|
- P2216R3 (std::format improvements)
|
||||||
|
|
||||||
|
- Implemented P0174R2 (Deprecating Vestigial Library Parts in C++17)
|
||||||
|
|
||||||
- Marked the following papers as "Complete" (note that some of those might have
|
- Marked the following papers as "Complete" (note that some of those might have
|
||||||
been implemented in a previous release but not marked as such):
|
been implemented in a previous release but not marked as such):
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
"`p0088r3 <https://wg21.link/p0088r3>`__","LWG","Variant: a type-safe union for C++17","Oulu","|Complete|","4.0"
|
"`p0088r3 <https://wg21.link/p0088r3>`__","LWG","Variant: a type-safe union for C++17","Oulu","|Complete|","4.0"
|
||||||
"`p0137r1 <https://wg21.link/p0137r1>`__","CWG","Core Issue 1776: Replacement of class objects containing reference members","Oulu","|Complete|","6.0"
|
"`p0137r1 <https://wg21.link/p0137r1>`__","CWG","Core Issue 1776: Replacement of class objects containing reference members","Oulu","|Complete|","6.0"
|
||||||
"`p0163r0 <https://wg21.link/p0163r0>`__","LWG","shared_ptr::weak_type","Oulu","|Complete|","3.9"
|
"`p0163r0 <https://wg21.link/p0163r0>`__","LWG","shared_ptr::weak_type","Oulu","|Complete|","3.9"
|
||||||
"`p0174r2 <https://wg21.link/p0174r2>`__","LWG","Deprecating Vestigial Library Parts in C++17","Oulu","|Partial|",""
|
"`p0174r2 <https://wg21.link/p0174r2>`__","LWG","Deprecating Vestigial Library Parts in C++17","Oulu","|Complete|","15.0"
|
||||||
"`p0175r1 <https://wg21.link/p0175r1>`__","LWG","Synopses for the C library","Oulu","",""
|
"`p0175r1 <https://wg21.link/p0175r1>`__","LWG","Synopses for the C library","Oulu","",""
|
||||||
"`p0180r2 <https://wg21.link/p0180r2>`__","LWG","Reserve a New Library Namespace for Future Standardization","Oulu","|Nothing To Do|","n/a"
|
"`p0180r2 <https://wg21.link/p0180r2>`__","LWG","Reserve a New Library Namespace for Future Standardization","Oulu","|Nothing To Do|","n/a"
|
||||||
"`p0181r1 <https://wg21.link/p0181r1>`__","LWG","Ordered by Default","Oulu","*Removed in Kona*","n/a"
|
"`p0181r1 <https://wg21.link/p0181r1>`__","LWG","Ordered by Default","Oulu","*Removed in Kona*","n/a"
|
||||||
|
|
|
|
@ -211,7 +211,10 @@ inplace_merge(_BidirectionalIterator __first, _BidirectionalIterator __middle, _
|
||||||
difference_type __len1 = _VSTD::distance(__first, __middle);
|
difference_type __len1 = _VSTD::distance(__first, __middle);
|
||||||
difference_type __len2 = _VSTD::distance(__middle, __last);
|
difference_type __len2 = _VSTD::distance(__middle, __last);
|
||||||
difference_type __buf_size = _VSTD::min(__len1, __len2);
|
difference_type __buf_size = _VSTD::min(__len1, __len2);
|
||||||
|
// TODO: Remove the use of std::get_temporary_buffer
|
||||||
|
_LIBCPP_SUPPRESS_DEPRECATED_PUSH
|
||||||
pair<value_type*, ptrdiff_t> __buf = _VSTD::get_temporary_buffer<value_type>(__buf_size);
|
pair<value_type*, ptrdiff_t> __buf = _VSTD::get_temporary_buffer<value_type>(__buf_size);
|
||||||
|
_LIBCPP_SUPPRESS_DEPRECATED_POP
|
||||||
unique_ptr<value_type, __return_temporary_buffer> __h(__buf.first);
|
unique_ptr<value_type, __return_temporary_buffer> __h(__buf.first);
|
||||||
typedef typename __comp_ref_type<_Compare>::type _Comp_ref;
|
typedef typename __comp_ref_type<_Compare>::type _Comp_ref;
|
||||||
return _VSTD::__inplace_merge<_Comp_ref>(__first, __middle, __last, __comp, __len1, __len2,
|
return _VSTD::__inplace_merge<_Comp_ref>(__first, __middle, __last, __comp, __len1, __len2,
|
||||||
|
|
|
@ -132,7 +132,10 @@ __stable_partition(_ForwardIterator __first, _ForwardIterator __last, _Predicate
|
||||||
unique_ptr<value_type, __return_temporary_buffer> __h;
|
unique_ptr<value_type, __return_temporary_buffer> __h;
|
||||||
if (__len >= __alloc_limit)
|
if (__len >= __alloc_limit)
|
||||||
{
|
{
|
||||||
|
// TODO: Remove the use of std::get_temporary_buffer
|
||||||
|
_LIBCPP_SUPPRESS_DEPRECATED_PUSH
|
||||||
__p = _VSTD::get_temporary_buffer<value_type>(__len);
|
__p = _VSTD::get_temporary_buffer<value_type>(__len);
|
||||||
|
_LIBCPP_SUPPRESS_DEPRECATED_POP
|
||||||
__h.reset(__p.first);
|
__h.reset(__p.first);
|
||||||
}
|
}
|
||||||
return _VSTD::__stable_partition<_Predicate&>(__first, __last, __pred, __len, __p, forward_iterator_tag());
|
return _VSTD::__stable_partition<_Predicate&>(__first, __last, __pred, __len, __p, forward_iterator_tag());
|
||||||
|
@ -278,7 +281,10 @@ __stable_partition(_BidirectionalIterator __first, _BidirectionalIterator __last
|
||||||
unique_ptr<value_type, __return_temporary_buffer> __h;
|
unique_ptr<value_type, __return_temporary_buffer> __h;
|
||||||
if (__len >= __alloc_limit)
|
if (__len >= __alloc_limit)
|
||||||
{
|
{
|
||||||
|
// TODO: Remove the use of std::get_temporary_buffer
|
||||||
|
_LIBCPP_SUPPRESS_DEPRECATED_PUSH
|
||||||
__p = _VSTD::get_temporary_buffer<value_type>(__len);
|
__p = _VSTD::get_temporary_buffer<value_type>(__len);
|
||||||
|
_LIBCPP_SUPPRESS_DEPRECATED_POP
|
||||||
__h.reset(__p.first);
|
__h.reset(__p.first);
|
||||||
}
|
}
|
||||||
return _VSTD::__stable_partition<_Predicate&>(__first, __last, __pred, __len, __p, bidirectional_iterator_tag());
|
return _VSTD::__stable_partition<_Predicate&>(__first, __last, __pred, __len, __p, bidirectional_iterator_tag());
|
||||||
|
|
|
@ -210,7 +210,10 @@ stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compar
|
||||||
unique_ptr<value_type, __return_temporary_buffer> __h;
|
unique_ptr<value_type, __return_temporary_buffer> __h;
|
||||||
if (__len > static_cast<difference_type>(__stable_sort_switch<value_type>::value))
|
if (__len > static_cast<difference_type>(__stable_sort_switch<value_type>::value))
|
||||||
{
|
{
|
||||||
|
// TODO: Remove the use of std::get_temporary_buffer
|
||||||
|
_LIBCPP_SUPPRESS_DEPRECATED_PUSH
|
||||||
__buf = _VSTD::get_temporary_buffer<value_type>(__len);
|
__buf = _VSTD::get_temporary_buffer<value_type>(__len);
|
||||||
|
_LIBCPP_SUPPRESS_DEPRECATED_POP
|
||||||
__h.reset(__buf.first);
|
__h.reset(__buf.first);
|
||||||
}
|
}
|
||||||
typedef typename __comp_ref_type<_Compare>::type _Comp_ref;
|
typedef typename __comp_ref_type<_Compare>::type _Comp_ref;
|
||||||
|
|
|
@ -28,6 +28,8 @@ _LIBCPP_BEGIN_NAMESPACE_STD
|
||||||
template <class _Tp> class allocator;
|
template <class _Tp> class allocator;
|
||||||
|
|
||||||
#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_ALLOCATOR_VOID_SPECIALIZATION)
|
#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_ALLOCATOR_VOID_SPECIALIZATION)
|
||||||
|
// These specializations shouldn't be marked _LIBCPP_DEPRECATED_IN_CXX17.
|
||||||
|
// Specializing allocator<void> is deprecated, but not using it.
|
||||||
template <>
|
template <>
|
||||||
class _LIBCPP_TEMPLATE_VIS allocator<void>
|
class _LIBCPP_TEMPLATE_VIS allocator<void>
|
||||||
{
|
{
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
_LIBCPP_BEGIN_NAMESPACE_STD
|
_LIBCPP_BEGIN_NAMESPACE_STD
|
||||||
|
|
||||||
template <class _Tp>
|
template <class _Tp>
|
||||||
_LIBCPP_NODISCARD_EXT _LIBCPP_NO_CFI
|
_LIBCPP_NODISCARD_EXT _LIBCPP_NO_CFI _LIBCPP_DEPRECATED_IN_CXX17
|
||||||
pair<_Tp*, ptrdiff_t>
|
pair<_Tp*, ptrdiff_t>
|
||||||
get_temporary_buffer(ptrdiff_t __n) _NOEXCEPT
|
get_temporary_buffer(ptrdiff_t __n) _NOEXCEPT
|
||||||
{
|
{
|
||||||
|
@ -67,7 +67,7 @@ get_temporary_buffer(ptrdiff_t __n) _NOEXCEPT
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class _Tp>
|
template <class _Tp>
|
||||||
inline _LIBCPP_INLINE_VISIBILITY
|
inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_DEPRECATED_IN_CXX17
|
||||||
void return_temporary_buffer(_Tp* __p) _NOEXCEPT
|
void return_temporary_buffer(_Tp* __p) _NOEXCEPT
|
||||||
{
|
{
|
||||||
_VSTD::__libcpp_deallocate_unsized((void*)__p, _LIBCPP_ALIGNOF(_Tp));
|
_VSTD::__libcpp_deallocate_unsized((void*)__p, _LIBCPP_ALIGNOF(_Tp));
|
||||||
|
@ -75,8 +75,10 @@ void return_temporary_buffer(_Tp* __p) _NOEXCEPT
|
||||||
|
|
||||||
struct __return_temporary_buffer
|
struct __return_temporary_buffer
|
||||||
{
|
{
|
||||||
|
_LIBCPP_SUPPRESS_DEPRECATED_PUSH
|
||||||
template <class _Tp>
|
template <class _Tp>
|
||||||
_LIBCPP_INLINE_VISIBILITY void operator()(_Tp* __p) const {_VSTD::return_temporary_buffer(__p);}
|
_LIBCPP_INLINE_VISIBILITY void operator()(_Tp* __p) const {_VSTD::return_temporary_buffer(__p);}
|
||||||
|
_LIBCPP_SUPPRESS_DEPRECATED_POP
|
||||||
};
|
};
|
||||||
|
|
||||||
_LIBCPP_END_NAMESPACE_STD
|
_LIBCPP_END_NAMESPACE_STD
|
||||||
|
|
|
@ -20,6 +20,8 @@
|
||||||
// trigger -Wunused-value warnings.
|
// trigger -Wunused-value warnings.
|
||||||
// ADDITIONAL_COMPILE_FLAGS: -fno-builtin
|
// ADDITIONAL_COMPILE_FLAGS: -fno-builtin
|
||||||
|
|
||||||
|
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <bit> // bit_cast
|
#include <bit> // bit_cast
|
||||||
#include <cstddef> // to_integer
|
#include <cstddef> // to_integer
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
// be listed in `UsingLibcxx.rst` in the documentation for the extension.
|
// be listed in `UsingLibcxx.rst` in the documentation for the extension.
|
||||||
|
|
||||||
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_NODISCARD
|
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_NODISCARD
|
||||||
|
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <bit> // bit_cast
|
#include <bit> // bit_cast
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
//
|
||||||
|
// 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
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
// REQUIRES: c++17
|
||||||
|
|
||||||
|
// Ensure allocator<void> is deprecated
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
void test() {
|
||||||
|
auto a = std::get_temporary_buffer<int>(1); // expected-warning {{'get_temporary_buffer<int>' is deprecated}}
|
||||||
|
std::return_temporary_buffer(a.first); // expected-warning {{'return_temporary_buffer<int>' is deprecated}}
|
||||||
|
}
|
|
@ -13,6 +13,7 @@
|
||||||
// we won't pass prior to c++17.
|
// we won't pass prior to c++17.
|
||||||
// UNSUPPORTED: use_system_cxx_lib && target={{.+}}-apple-macosx10.{{9|10|11|12}}
|
// UNSUPPORTED: use_system_cxx_lib && target={{.+}}-apple-macosx10.{{9|10|11|12}}
|
||||||
|
|
||||||
|
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS
|
||||||
|
|
||||||
// <memory>
|
// <memory>
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
|
|
||||||
// <memory>
|
// <memory>
|
||||||
|
|
||||||
|
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS
|
||||||
|
|
||||||
// template <class T>
|
// template <class T>
|
||||||
// pair<T*, ptrdiff_t>
|
// pair<T*, ptrdiff_t>
|
||||||
// get_temporary_buffer(ptrdiff_t n);
|
// get_temporary_buffer(ptrdiff_t n);
|
||||||
|
|
Loading…
Reference in New Issue