Skip to content

Commit 2bd7317

Browse files
committed
try to fix the CUDA builds
1 parent 46fb495 commit 2bd7317

1 file changed

Lines changed: 33 additions & 13 deletions

File tree

include/stdexec/__detail/__atomic.hpp

Lines changed: 33 additions & 13 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+
#elif !STDEXEC_CLANG() || !STDEXEC_CUDA_COMPILATION()
114118
template <typename _Ty>
115119
struct __atomic_shared_ptr {
116120
using value_type = std::shared_ptr<_Ty>;
@@ -148,16 +152,17 @@ namespace STDEXEC::__std {
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 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+
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 atomic_exchange_explicit(
165+
&__ptr_, std::move(__ptr), static_cast<std::memory_order>(__order));
161166
}
162167

163168
bool compare_exchange_weak(
@@ -166,15 +171,23 @@ namespace STDEXEC::__std {
166171
memory_order __success,
167172
memory_order __failure) noexcept {
168173
return atomic_compare_exchange_weak_explicit(
169-
&__ptr_, &__expected, std::move(__desired), __success, __failure);
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 {
176185
return atomic_compare_exchange_weak_explicit(
177-
&__ptr_, &__expected, std::move(__desired), __order, __memory_order_load(__order));
186+
&__ptr_,
187+
&__expected,
188+
std::move(__desired),
189+
static_cast<std::memory_order>(__order),
190+
static_cast<std::memory_order>(__memory_order_load(__order)));
178191
}
179192

180193
bool compare_exchange_strong(
@@ -183,15 +196,23 @@ namespace STDEXEC::__std {
183196
memory_order __upon_success,
184197
memory_order __upon_failure) noexcept {
185198
return atomic_compare_exchange_strong_explicit(
186-
&__ptr_, &__expected, std::move(__desired), __upon_success, __upon_failure);
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 {
193210
return atomic_compare_exchange_strong_explicit(
194-
&__ptr_, &__expected, std::move(__desired), __order, __memory_order_load(__order));
211+
&__ptr_,
212+
&__expected,
213+
std::move(__desired),
214+
static_cast<std::memory_order>(__order),
215+
static_cast<std::memory_order>(__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)