Skip to content

Commit 4f61c55

Browse files
committed
try to fix the CUDA builds
1 parent 0e1164c commit 4f61c55

1 file changed

Lines changed: 38 additions & 18 deletions

File tree

include/stdexec/__detail/__atomic.hpp

Lines changed: 38 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828

2929
#include <memory>
3030

31+
//#include <stdatomic.h> // IWYU pragma: keep for atomic_* functions
32+
3133
namespace STDEXEC::__std {
3234
#if STDEXEC_HAS_CUDA_STD_ATOMIC()
3335

@@ -44,7 +46,7 @@ namespace STDEXEC::__std {
4446
using cuda::std::atomic_thread_fence;
4547
using cuda::std::atomic_signal_fence;
4648

47-
#else
49+
#else // ^^^ STDEXEC_HAS_CUDA_STD_ATOMIC() / vvv !STDEXEC_HAS_CUDA_STD_ATOMIC()
4850

4951
using std::atomic;
5052
using std::atomic_flag;
@@ -99,18 +101,20 @@ namespace STDEXEC::__std {
99101
__atomic_store_n(__ptr_, __desired, __map_memory_order(__order));
100102
}
101103
};
102-
# endif
104+
# endif // ^^^ __cpp_lib_atomic_ref < 2018'06L
105+
106+
#endif // ^^^ !STDEXEC_HAS_CUDA_STD_ATOMIC()
103107

104108
constexpr memory_order __memory_order_load(memory_order __order) noexcept {
105109
return __order == memory_order_acq_rel ? memory_order_acquire
106110
: __order == memory_order_release ? memory_order_relaxed
107111
: __order;
108112
}
109113

110-
# if __cpp_lib_atomic_shared_ptr >= 2017'11L
114+
#if __cpp_lib_atomic_shared_ptr >= 2017'11L
111115
template <class _Ty>
112116
using __atomic_shared_ptr = std::atomic<std::shared_ptr<_Ty>>;
113-
# else
117+
#else
114118
template <typename _Ty>
115119
struct __atomic_shared_ptr {
116120
using value_type = std::shared_ptr<_Ty>;
@@ -144,54 +148,71 @@ namespace STDEXEC::__std {
144148

145149
[[nodiscard]]
146150
bool is_lock_free() const noexcept {
147-
return atomic_is_lock_free(&__ptr_);
151+
return std::atomic_is_lock_free(&__ptr_);
148152
}
149153

150154
std::shared_ptr<_Ty> load(memory_order __order = memory_order_seq_cst) const noexcept {
151-
return atomic_load_explicit(&__ptr_, __order);
155+
return std::atomic_load_explicit(&__ptr_, static_cast<std::memory_order>(__order));
152156
}
153157

154158
void store(std::shared_ptr<_Ty> __ptr, memory_order __order = memory_order_seq_cst) noexcept {
155-
atomic_store_explicit(&__ptr_, std::move(__ptr), __order);
159+
std::atomic_store_explicit(&__ptr_, std::move(__ptr), static_cast<std::memory_order>(__order));
156160
}
157161

158162
std::shared_ptr<_Ty>
159163
exchange(std::shared_ptr<_Ty> __ptr, memory_order __order = memory_order_seq_cst) noexcept {
160-
return atomic_exchange_explicit(&__ptr_, std::move(__ptr), __order);
164+
return std::atomic_exchange_explicit(
165+
&__ptr_, std::move(__ptr), static_cast<std::memory_order>(__order));
161166
}
162167

163168
bool compare_exchange_weak(
164169
std::shared_ptr<_Ty>& __expected,
165170
std::shared_ptr<_Ty> __desired,
166171
memory_order __success,
167172
memory_order __failure) noexcept {
168-
return atomic_compare_exchange_weak_explicit(
169-
&__ptr_, &__expected, std::move(__desired), __success, __failure);
173+
return std::atomic_compare_exchange_weak_explicit(
174+
&__ptr_,
175+
&__expected,
176+
std::move(__desired),
177+
static_cast<std::memory_order>(__success),
178+
static_cast<std::memory_order>(__failure));
170179
}
171180

172181
bool compare_exchange_weak(
173182
std::shared_ptr<_Ty>& __expected,
174183
std::shared_ptr<_Ty> __desired,
175184
memory_order __order = memory_order_seq_cst) noexcept {
176-
return atomic_compare_exchange_weak_explicit(
177-
&__ptr_, &__expected, std::move(__desired), __order, __memory_order_load(__order));
185+
return std::atomic_compare_exchange_weak_explicit(
186+
&__ptr_,
187+
&__expected,
188+
std::move(__desired),
189+
static_cast<std::memory_order>(__order),
190+
static_cast<std::memory_order>(__std::__memory_order_load(__order)));
178191
}
179192

180193
bool compare_exchange_strong(
181194
std::shared_ptr<_Ty>& __expected,
182195
std::shared_ptr<_Ty> __desired,
183196
memory_order __upon_success,
184197
memory_order __upon_failure) noexcept {
185-
return atomic_compare_exchange_strong_explicit(
186-
&__ptr_, &__expected, std::move(__desired), __upon_success, __upon_failure);
198+
return std::atomic_compare_exchange_strong_explicit(
199+
&__ptr_,
200+
&__expected,
201+
std::move(__desired),
202+
static_cast<std::memory_order>(__upon_success),
203+
static_cast<std::memory_order>(__upon_failure));
187204
}
188205

189206
bool compare_exchange_strong(
190207
std::shared_ptr<_Ty>& __expected,
191208
std::shared_ptr<_Ty> __desired,
192209
memory_order __order = memory_order_seq_cst) noexcept {
193-
return atomic_compare_exchange_strong_explicit(
194-
&__ptr_, &__expected, std::move(__desired), __order, __memory_order_load(__order));
210+
return std::atomic_compare_exchange_strong_explicit(
211+
&__ptr_,
212+
&__expected,
213+
std::move(__desired),
214+
static_cast<std::memory_order>(__order),
215+
static_cast<std::memory_order>(__std::__memory_order_load(__order)));
195216
}
196217

197218
private:
@@ -201,7 +222,6 @@ namespace STDEXEC::__std {
201222
template <typename _Ty>
202223
__atomic_shared_ptr(std::shared_ptr<_Ty>) -> __atomic_shared_ptr<_Ty>;
203224

204-
# endif
225+
#endif // ^^^ __cpp_lib_atomic_shared_ptr < 2017'11L
205226

206-
#endif
207227
} // namespace STDEXEC::__std

0 commit comments

Comments
 (0)