[libcxx-commits] [libcxx] [libcxx] Remove empty ~__no_destroy (PR #89882)
Vitaly Buka via libcxx-commits
libcxx-commits at lists.llvm.org
Wed Apr 24 13:04:48 PDT 2024
https://github.com/vitalybuka updated https://github.com/llvm/llvm-project/pull/89882
>From 65b62ad4ac4e9df6df84774532f898d0a4c078fc Mon Sep 17 00:00:00 2001
From: Vitaly Buka <vitalybuka at google.com>
Date: Wed, 24 Apr 2024 00:03:23 -0700
Subject: [PATCH 1/4] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20in?=
=?UTF-8?q?itial=20version?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Created using spr 1.3.4
---
libcxx/include/__utility/no_destroy.h | 28 ++++++++++-----------------
1 file changed, 10 insertions(+), 18 deletions(-)
diff --git a/libcxx/include/__utility/no_destroy.h b/libcxx/include/__utility/no_destroy.h
index f9c1eb7bed4569..833e16116c42d7 100644
--- a/libcxx/include/__utility/no_destroy.h
+++ b/libcxx/include/__utility/no_destroy.h
@@ -29,33 +29,25 @@ struct __uninitialized_tag {};
// initialization using __emplace.
template <class _Tp>
struct __no_destroy {
- _LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI explicit __no_destroy(__uninitialized_tag) : __dummy_() {
- if (__libcpp_is_constant_evaluated()) {
- __dummy_ = char();
- }
- }
- _LIBCPP_HIDE_FROM_ABI ~__no_destroy() {
- // nothing
- }
+ _LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI explicit __no_destroy(__uninitialized_tag) {}
template <class... _Args>
- _LIBCPP_CONSTEXPR _LIBCPP_HIDE_FROM_ABI explicit __no_destroy(_Args&&... __args)
- : __obj_(std::forward<_Args>(__args)...) {}
+ _LIBCPP_CONSTEXPR _LIBCPP_HIDE_FROM_ABI explicit __no_destroy(_Args&&... __args) {
+ new (&__obj_) _Tp(std::forward<_Args>(__args)...);
+ }
template <class... _Args>
_LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI _Tp& __emplace(_Args&&... __args) {
- new (&__obj_) _Tp(std::forward<_Args>(__args)...);
- return __obj_;
+ return *(new (&__obj_) _Tp(std::forward<_Args>(__args)...));
}
- _LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI _Tp& __get() { return __obj_; }
- _LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI _Tp const& __get() const { return __obj_; }
+ _LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI _Tp& __get() { return *reinterpret_cast<_Tp*>(__obj_); }
+ _LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI _Tp const& __get() const {
+ return *reinterpret_cast<const _Tp*>(__obj_);
+ }
private:
- union {
- _Tp __obj_;
- char __dummy_; // so we can initialize a member even with __uninitialized_tag for constexpr-friendliness
- };
+ alignas(_Tp) unsigned char __obj_[sizeof(_Tp)] = {};
};
_LIBCPP_END_NAMESPACE_STD
>From 22acc7f96a1990dea096f16447641077e447994b Mon Sep 17 00:00:00 2001
From: Vitaly Buka <vitalybuka at google.com>
Date: Wed, 24 Apr 2024 00:15:55 -0700
Subject: [PATCH 2/4] fix 99
Created using spr 1.3.4
---
libcxx/include/__utility/no_destroy.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libcxx/include/__utility/no_destroy.h b/libcxx/include/__utility/no_destroy.h
index 833e16116c42d7..1413256a07b11a 100644
--- a/libcxx/include/__utility/no_destroy.h
+++ b/libcxx/include/__utility/no_destroy.h
@@ -47,7 +47,7 @@ struct __no_destroy {
}
private:
- alignas(_Tp) unsigned char __obj_[sizeof(_Tp)] = {};
+ _ALIGNAS_TYPE(_Tp) unsigned char __obj_[sizeof(_Tp)] = {};
};
_LIBCPP_END_NAMESPACE_STD
>From 06b50eeaba5c9396b06087298b517d35c6026827 Mon Sep 17 00:00:00 2001
From: Vitaly Buka <vitalybuka at google.com>
Date: Wed, 24 Apr 2024 00:29:31 -0700
Subject: [PATCH 3/4] cast to void*
Created using spr 1.3.4
---
libcxx/include/__utility/no_destroy.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/libcxx/include/__utility/no_destroy.h b/libcxx/include/__utility/no_destroy.h
index 1413256a07b11a..9234ad8813db95 100644
--- a/libcxx/include/__utility/no_destroy.h
+++ b/libcxx/include/__utility/no_destroy.h
@@ -33,12 +33,12 @@ struct __no_destroy {
template <class... _Args>
_LIBCPP_CONSTEXPR _LIBCPP_HIDE_FROM_ABI explicit __no_destroy(_Args&&... __args) {
- new (&__obj_) _Tp(std::forward<_Args>(__args)...);
+ ::new ((void*)__obj_) _Tp(std::forward<_Args>(__args)...);
}
template <class... _Args>
_LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI _Tp& __emplace(_Args&&... __args) {
- return *(new (&__obj_) _Tp(std::forward<_Args>(__args)...));
+ return *(::new ((void*)__obj_) _Tp(std::forward<_Args>(__args)...));
}
_LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI _Tp& __get() { return *reinterpret_cast<_Tp*>(__obj_); }
>From 70045e8cd90e4eb866e93942b2716269c4378227 Mon Sep 17 00:00:00 2001
From: Vitaly Buka <vitalybuka at google.com>
Date: Wed, 24 Apr 2024 09:53:55 -0700
Subject: [PATCH 4/4] remove CONSTEXPRs
Created using spr 1.3.4
---
libcxx/include/__utility/no_destroy.h | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
diff --git a/libcxx/include/__utility/no_destroy.h b/libcxx/include/__utility/no_destroy.h
index 9234ad8813db95..a625a44c66598a 100644
--- a/libcxx/include/__utility/no_destroy.h
+++ b/libcxx/include/__utility/no_destroy.h
@@ -29,22 +29,20 @@ struct __uninitialized_tag {};
// initialization using __emplace.
template <class _Tp>
struct __no_destroy {
- _LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI explicit __no_destroy(__uninitialized_tag) {}
+ _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR explicit __no_destroy(__uninitialized_tag) {}
template <class... _Args>
- _LIBCPP_CONSTEXPR _LIBCPP_HIDE_FROM_ABI explicit __no_destroy(_Args&&... __args) {
+ _LIBCPP_HIDE_FROM_ABI explicit __no_destroy(_Args&&... __args) {
::new ((void*)__obj_) _Tp(std::forward<_Args>(__args)...);
}
template <class... _Args>
- _LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI _Tp& __emplace(_Args&&... __args) {
+ _LIBCPP_HIDE_FROM_ABI _Tp& __emplace(_Args&&... __args) {
return *(::new ((void*)__obj_) _Tp(std::forward<_Args>(__args)...));
}
- _LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI _Tp& __get() { return *reinterpret_cast<_Tp*>(__obj_); }
- _LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI _Tp const& __get() const {
- return *reinterpret_cast<const _Tp*>(__obj_);
- }
+ _LIBCPP_HIDE_FROM_ABI _Tp& __get() { return *reinterpret_cast<_Tp*>(__obj_); }
+ _LIBCPP_HIDE_FROM_ABI _Tp const& __get() const { return *reinterpret_cast<const _Tp*>(__obj_); }
private:
_ALIGNAS_TYPE(_Tp) unsigned char __obj_[sizeof(_Tp)] = {};
More information about the libcxx-commits
mailing list