From 610d38ba6144edce9e4b13ae10b5737d11a0af0a Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 21 Sep 2019 19:50:05 -0700 Subject: [PATCH 01/11] Move memory_order to enum class --- stl/inc/xatomic.h | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/stl/inc/xatomic.h b/stl/inc/xatomic.h index 28357d8a313..598d21efd5d 100644 --- a/stl/inc/xatomic.h +++ b/stl/inc/xatomic.h @@ -56,14 +56,13 @@ _STL_DISABLE_CLANG_WARNINGS _STD_BEGIN // ENUM memory_order -enum memory_order { - memory_order_relaxed, - memory_order_consume, - memory_order_acquire, - memory_order_release, - memory_order_acq_rel, - memory_order_seq_cst -}; +enum class memory_order { relaxed, consume, acquire, release, acq_rel, seq_cst }; +inline constexpr memory_order memory_order_relaxed = memory_order::relaxed; +inline constexpr memory_order memory_order_consume = memory_order::consume; +inline constexpr memory_order memory_order_acquire = memory_order::acquire; +inline constexpr memory_order memory_order_release = memory_order::release; +inline constexpr memory_order memory_order_acq_rel = memory_order::acq_rel; +inline constexpr memory_order memory_order_seq_cst = memory_order::seq_cst; using _Atomic_counter_t = unsigned long; From a8ee4bb4548c63e152f77ed087cead0ca6cafd04 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 21 Sep 2019 20:24:59 -0700 Subject: [PATCH 02/11] Builds --- stl/inc/atomic | 8 ++++++++ stl/inc/xatomic.h | 26 ++++++++++++++++++-------- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/stl/inc/atomic b/stl/inc/atomic index 9b6d178f195..2c6d3c67609 100644 --- a/stl/inc/atomic +++ b/stl/inc/atomic @@ -161,7 +161,11 @@ _Ty kill_dependency(_Ty _Arg) noexcept { // "magic" template that kills dependen // FUNCTION _Check_memory_order inline void _Check_memory_order(const memory_order _Order) noexcept { // check that _Order is a valid memory_order +#if _HAS_CXX20 + if (_Order > memory_order_seq_cst) { +#else if (static_cast(_Order) > memory_order_seq_cst) { +#endif _INVALID_MEMORY_ORDER; } } @@ -230,7 +234,11 @@ _NODISCARD inline memory_order _Combine_cas_memory_orders( _Check_memory_order(_Success); _Check_load_memory_order(_Failure); +#if _HAS_CXX20 + return _Combined_memory_orders[static_cast(_Success)][static_cast(_Failure)]; +#else return _Combined_memory_orders[_Success][_Failure]; +#endif } // FUNCTION TEMPLATE _Atomic_reinterpret_as diff --git a/stl/inc/xatomic.h b/stl/inc/xatomic.h index 598d21efd5d..12338314e85 100644 --- a/stl/inc/xatomic.h +++ b/stl/inc/xatomic.h @@ -55,14 +55,24 @@ _STL_DISABLE_CLANG_WARNINGS _STD_BEGIN -// ENUM memory_order -enum class memory_order { relaxed, consume, acquire, release, acq_rel, seq_cst }; -inline constexpr memory_order memory_order_relaxed = memory_order::relaxed; -inline constexpr memory_order memory_order_consume = memory_order::consume; -inline constexpr memory_order memory_order_acquire = memory_order::acquire; -inline constexpr memory_order memory_order_release = memory_order::release; -inline constexpr memory_order memory_order_acq_rel = memory_order::acq_rel; -inline constexpr memory_order memory_order_seq_cst = memory_order::seq_cst; +//#if _HAS_CXX20 +//enum class memory_order : unsigned int { relaxed, consume, acquire, release, acq_rel, seq_cst }; +//inline constexpr memory_order memory_order_relaxed = memory_order::relaxed; +//inline constexpr memory_order memory_order_consume = memory_order::consume; +//inline constexpr memory_order memory_order_acquire = memory_order::acquire; +//inline constexpr memory_order memory_order_release = memory_order::release; +//inline constexpr memory_order memory_order_acq_rel = memory_order::acq_rel; +//inline constexpr memory_order memory_order_seq_cst = memory_order::seq_cst; +//#else +enum memory_order { + memory_order_relaxed, + memory_order_consume, + memory_order_acquire, + memory_order_release, + memory_order_acq_rel, + memory_order_seq_cst +}; +//#endif using _Atomic_counter_t = unsigned long; From cb1bab8601581b7869f712684544a93681abdfe1 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 21 Sep 2019 20:27:46 -0700 Subject: [PATCH 03/11] Uncomment the change --- stl/inc/xatomic.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/stl/inc/xatomic.h b/stl/inc/xatomic.h index 12338314e85..8077cde7fd7 100644 --- a/stl/inc/xatomic.h +++ b/stl/inc/xatomic.h @@ -55,15 +55,15 @@ _STL_DISABLE_CLANG_WARNINGS _STD_BEGIN -//#if _HAS_CXX20 -//enum class memory_order : unsigned int { relaxed, consume, acquire, release, acq_rel, seq_cst }; -//inline constexpr memory_order memory_order_relaxed = memory_order::relaxed; -//inline constexpr memory_order memory_order_consume = memory_order::consume; -//inline constexpr memory_order memory_order_acquire = memory_order::acquire; -//inline constexpr memory_order memory_order_release = memory_order::release; -//inline constexpr memory_order memory_order_acq_rel = memory_order::acq_rel; -//inline constexpr memory_order memory_order_seq_cst = memory_order::seq_cst; -//#else +#if _HAS_CXX20 +enum class memory_order : unsigned int { relaxed, consume, acquire, release, acq_rel, seq_cst }; +inline constexpr memory_order memory_order_relaxed = memory_order::relaxed; +inline constexpr memory_order memory_order_consume = memory_order::consume; +inline constexpr memory_order memory_order_acquire = memory_order::acquire; +inline constexpr memory_order memory_order_release = memory_order::release; +inline constexpr memory_order memory_order_acq_rel = memory_order::acq_rel; +inline constexpr memory_order memory_order_seq_cst = memory_order::seq_cst; +#else enum memory_order { memory_order_relaxed, memory_order_consume, From 78146fad697a8262be4fabeac9dcfdadb97665a4 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 21 Sep 2019 20:30:01 -0700 Subject: [PATCH 04/11] Restore comment --- stl/inc/xatomic.h | 1 + 1 file changed, 1 insertion(+) diff --git a/stl/inc/xatomic.h b/stl/inc/xatomic.h index 8077cde7fd7..31ce73f5c5d 100644 --- a/stl/inc/xatomic.h +++ b/stl/inc/xatomic.h @@ -55,6 +55,7 @@ _STL_DISABLE_CLANG_WARNINGS _STD_BEGIN +// ENUM memory_order #if _HAS_CXX20 enum class memory_order : unsigned int { relaxed, consume, acquire, release, acq_rel, seq_cst }; inline constexpr memory_order memory_order_relaxed = memory_order::relaxed; From ae2a09c51cc9d18d5e70ac924e87b63b63d9f0a0 Mon Sep 17 00:00:00 2001 From: Andrew Fogarty Date: Sat, 21 Sep 2019 20:36:56 -0700 Subject: [PATCH 05/11] Fix broken endif --- stl/inc/xatomic.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stl/inc/xatomic.h b/stl/inc/xatomic.h index 31ce73f5c5d..ede5ee558a1 100644 --- a/stl/inc/xatomic.h +++ b/stl/inc/xatomic.h @@ -73,7 +73,7 @@ enum memory_order { memory_order_acq_rel, memory_order_seq_cst }; -//#endif +#endif using _Atomic_counter_t = unsigned long; From 2bb0be6665f0f0c5bed3b26d71bc05599bbd0010 Mon Sep 17 00:00:00 2001 From: Andrew Fogarty Date: Mon, 23 Sep 2019 19:11:54 -0700 Subject: [PATCH 06/11] Variable comments --- stl/inc/xatomic.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/stl/inc/xatomic.h b/stl/inc/xatomic.h index ede5ee558a1..a1e444c7c8b 100644 --- a/stl/inc/xatomic.h +++ b/stl/inc/xatomic.h @@ -55,8 +55,8 @@ _STL_DISABLE_CLANG_WARNINGS _STD_BEGIN -// ENUM memory_order #if _HAS_CXX20 +// ENUM CLASS memory_order enum class memory_order : unsigned int { relaxed, consume, acquire, release, acq_rel, seq_cst }; inline constexpr memory_order memory_order_relaxed = memory_order::relaxed; inline constexpr memory_order memory_order_consume = memory_order::consume; @@ -65,6 +65,7 @@ inline constexpr memory_order memory_order_release = memory_order::release; inline constexpr memory_order memory_order_acq_rel = memory_order::acq_rel; inline constexpr memory_order memory_order_seq_cst = memory_order::seq_cst; #else +// ENUM memory_order enum memory_order { memory_order_relaxed, memory_order_consume, From 004c111b9407301c20bfe3c6de1884171bcd23f4 Mon Sep 17 00:00:00 2001 From: Andrew Fogarty Date: Mon, 23 Sep 2019 19:17:52 -0700 Subject: [PATCH 07/11] Cast in both modes --- stl/inc/atomic | 4 ---- 1 file changed, 4 deletions(-) diff --git a/stl/inc/atomic b/stl/inc/atomic index 2c6d3c67609..fb40cb1d306 100644 --- a/stl/inc/atomic +++ b/stl/inc/atomic @@ -234,11 +234,7 @@ _NODISCARD inline memory_order _Combine_cas_memory_orders( _Check_memory_order(_Success); _Check_load_memory_order(_Failure); -#if _HAS_CXX20 return _Combined_memory_orders[static_cast(_Success)][static_cast(_Failure)]; -#else - return _Combined_memory_orders[_Success][_Failure]; -#endif } // FUNCTION TEMPLATE _Atomic_reinterpret_as From abe805d684b2992b87bcad0097045db912c93700 Mon Sep 17 00:00:00 2001 From: Andrew Fogarty Date: Mon, 23 Sep 2019 19:46:14 -0700 Subject: [PATCH 08/11] Added to yvals --- stl/inc/yvals_core.h | 1 + 1 file changed, 1 insertion(+) diff --git a/stl/inc/yvals_core.h b/stl/inc/yvals_core.h index 2a40f1bb0f9..84213b67189 100644 --- a/stl/inc/yvals_core.h +++ b/stl/inc/yvals_core.h @@ -22,6 +22,7 @@ // P0020R6 atomic, atomic, atomic // P0318R1 unwrap_reference, unwrap_ref_decay // P0325R4 to_array() +// P0439R0 enum class memory_order // P0457R2 starts_with()/ends_with() For basic_string/basic_string_view // P0458R2 contains() For Ordered And Unordered Associative Containers // P0463R1 endian From aa11a35d44864fadd0332d43ad0a97c316b782fb Mon Sep 17 00:00:00 2001 From: Andrew Fogarty Date: Tue, 24 Sep 2019 18:32:50 -0700 Subject: [PATCH 09/11] Remove conditional casting --- stl/inc/atomic | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/stl/inc/atomic b/stl/inc/atomic index fb40cb1d306..b3ea81e808c 100644 --- a/stl/inc/atomic +++ b/stl/inc/atomic @@ -161,11 +161,7 @@ _Ty kill_dependency(_Ty _Arg) noexcept { // "magic" template that kills dependen // FUNCTION _Check_memory_order inline void _Check_memory_order(const memory_order _Order) noexcept { // check that _Order is a valid memory_order -#if _HAS_CXX20 - if (_Order > memory_order_seq_cst) { -#else - if (static_cast(_Order) > memory_order_seq_cst) { -#endif + if (static_cast(_Order) > static_cast(memory_order_seq_cst)) { _INVALID_MEMORY_ORDER; } } @@ -234,7 +230,7 @@ _NODISCARD inline memory_order _Combine_cas_memory_orders( _Check_memory_order(_Success); _Check_load_memory_order(_Failure); - return _Combined_memory_orders[static_cast(_Success)][static_cast(_Failure)]; + return _Combined_memory_orders[static_cast(_Success)][static_cast(_Failure)]; } // FUNCTION TEMPLATE _Atomic_reinterpret_as From 8c0f9b85685ad809819e4dfe4edba0da6bbfb9b0 Mon Sep 17 00:00:00 2001 From: Andrew Fogarty Date: Tue, 24 Sep 2019 18:33:06 -0700 Subject: [PATCH 10/11] Change type and add comment --- stl/inc/xatomic.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/stl/inc/xatomic.h b/stl/inc/xatomic.h index a1e444c7c8b..1562df01000 100644 --- a/stl/inc/xatomic.h +++ b/stl/inc/xatomic.h @@ -57,14 +57,14 @@ _STD_BEGIN #if _HAS_CXX20 // ENUM CLASS memory_order -enum class memory_order : unsigned int { relaxed, consume, acquire, release, acq_rel, seq_cst }; +enum class memory_order : int { relaxed, consume, acquire, release, acq_rel, seq_cst }; inline constexpr memory_order memory_order_relaxed = memory_order::relaxed; inline constexpr memory_order memory_order_consume = memory_order::consume; inline constexpr memory_order memory_order_acquire = memory_order::acquire; inline constexpr memory_order memory_order_release = memory_order::release; inline constexpr memory_order memory_order_acq_rel = memory_order::acq_rel; inline constexpr memory_order memory_order_seq_cst = memory_order::seq_cst; -#else +#else // _HAS_CXX20 // ENUM memory_order enum memory_order { memory_order_relaxed, @@ -74,7 +74,7 @@ enum memory_order { memory_order_acq_rel, memory_order_seq_cst }; -#endif +#endif // _HAS_CXX20 using _Atomic_counter_t = unsigned long; From ae5ecf2eb1d55d49b235dcf4e61f63f59d5076de Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Thu, 26 Sep 2019 14:44:36 -0700 Subject: [PATCH 11/11] static_cast in _Check_memory_order() --- stl/inc/atomic | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stl/inc/atomic b/stl/inc/atomic index b3ea81e808c..a8d5ceecb73 100644 --- a/stl/inc/atomic +++ b/stl/inc/atomic @@ -161,7 +161,7 @@ _Ty kill_dependency(_Ty _Arg) noexcept { // "magic" template that kills dependen // FUNCTION _Check_memory_order inline void _Check_memory_order(const memory_order _Order) noexcept { // check that _Order is a valid memory_order - if (static_cast(_Order) > static_cast(memory_order_seq_cst)) { + if (static_cast(_Order) > static_cast(memory_order_seq_cst)) { _INVALID_MEMORY_ORDER; } }