[libcxx-commits] [PATCH] D101183: [libc++] Make sure __bit_iterator does not use deprecated SMF generation
Arthur O'Dwyer via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Mon Apr 26 13:23:37 PDT 2021
This revision was automatically updated to reflect the committed changes.
Closed by commit rG70d94c3f2cae: [libc++] __bit_iterator mustn't rely on deprecated SMF generation. (authored by arthur.j.odwyer).
Changed prior to commit:
https://reviews.llvm.org/D101183?vs=340271&id=340622#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D101183/new/
https://reviews.llvm.org/D101183
Files:
libcxx/include/__bit_reference
libcxx/utils/libcxx/test/params.py
Index: libcxx/utils/libcxx/test/params.py
===================================================================
--- libcxx/utils/libcxx/test/params.py
+++ libcxx/utils/libcxx/test/params.py
@@ -13,7 +13,6 @@
'-Werror',
'-Wall',
'-Wextra',
- '-Wno-deprecated-copy',
'-Wshadow',
'-Wundef',
'-Wno-unused-command-line-argument',
Index: libcxx/include/__bit_reference
===================================================================
--- libcxx/include/__bit_reference
+++ libcxx/include/__bit_reference
@@ -1114,28 +1114,26 @@
#endif
{}
- // avoid re-declaring a copy constructor for the non-const version.
- using __type_for_copy_to_const =
- _If<_IsConst, __bit_iterator<_Cp, false>, struct __private_nat>;
-
+ // When _IsConst=false, this is the copy constructor.
+ // It is non-trivial. Making it trivial would break ABI.
+ // When _IsConst=true, this is a converting constructor;
+ // the copy and move constructors are implicitly generated
+ // and trivial.
_LIBCPP_INLINE_VISIBILITY
- __bit_iterator(const __type_for_copy_to_const& __it) _NOEXCEPT
+ __bit_iterator(const __bit_iterator<_Cp, false>& __it) _NOEXCEPT
: __seg_(__it.__seg_), __ctz_(__it.__ctz_) {}
- // The non-const __bit_iterator has historically had a non-trivial
- // copy constructor (as a quirk of its construction). We need to maintain
- // this for ABI purposes.
- using __type_for_abi_non_trivial_copy_ctor =
- _If<!_IsConst, __bit_iterator, struct __private_nat>;
-
- _LIBCPP_INLINE_VISIBILITY
- __bit_iterator(__type_for_abi_non_trivial_copy_ctor const& __it) _NOEXCEPT
- : __seg_(__it.__seg_), __ctz_(__it.__ctz_) {}
-
- // Always declare the copy assignment operator since the implicit declaration
- // is deprecated.
+ // When _IsConst=false, we have a user-provided copy constructor,
+ // so we must also provide a copy assignment operator because
+ // the implicit generation of a defaulted one is deprecated.
+ // When _IsConst=true, the assignment operators are
+ // implicitly generated and trivial.
_LIBCPP_INLINE_VISIBILITY
- __bit_iterator& operator=(__bit_iterator const&) = default;
+ __bit_iterator& operator=(const _If<_IsConst, struct __private_nat, __bit_iterator>& __it) {
+ __seg_ = __it.__seg_;
+ __ctz_ = __it.__ctz_;
+ return *this;
+ }
_LIBCPP_INLINE_VISIBILITY reference operator*() const _NOEXCEPT
{return reference(__seg_, __storage_type(1) << __ctz_);}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D101183.340622.patch
Type: text/x-patch
Size: 2532 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20210426/2dbe6627/attachment-0001.bin>
More information about the libcxx-commits
mailing list