Make flag type configurable by the compiler
llvm-svn: 115614
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: 772699070ee135ad98c65022f4eb3c3cd2ab767a
diff --git a/include/atomic b/include/atomic
index e55d092..a288120 100644
--- a/include/atomic
+++ b/include/atomic
@@ -12376,6 +12376,10 @@
// flag type and operations
+#if !__has_feature(__atomic_flag)
+ typedef bool __atomic_flag__;
+#endif
+
struct atomic_flag;
bool atomic_flag_test_and_set(volatile atomic_flag*);
@@ -12389,7 +12393,7 @@
typedef struct _LIBCPP_VISIBLE atomic_flag
{
- bool __flg_;
+ __atomic_flag__ __flg_;
_LIBCPP_INLINE_VISIBILITY
bool test_and_set() volatile
@@ -12441,7 +12445,8 @@
bool
atomic_flag_test_and_set(volatile atomic_flag* __f)
{
- return __choose_exchange_seq_cst(&__f->__flg_, true);
+ return __choose_exchange_seq_cst(&__f->__flg_, __atomic_flag__(true))
+ == __atomic_flag__(true);
}
inline _LIBCPP_INLINE_VISIBILITY
@@ -12458,17 +12463,23 @@
switch (__o)
{
case memory_order_relaxed:
- return __choose_exchange_relaxed(&__f->__flg_, true);
+ return __choose_exchange_relaxed(&__f->__flg_, __atomic_flag__(true))
+ == __atomic_flag__(true);
case memory_order_consume:
- return __choose_exchange_consume(&__f->__flg_, true);
+ return __choose_exchange_consume(&__f->__flg_, __atomic_flag__(true))
+ == __atomic_flag__(true);
case memory_order_acquire:
- return __choose_exchange_acquire(&__f->__flg_, true);
+ return __choose_exchange_acquire(&__f->__flg_, __atomic_flag__(true))
+ == __atomic_flag__(true);
case memory_order_release:
- return __choose_exchange_release(&__f->__flg_, true);
+ return __choose_exchange_release(&__f->__flg_, __atomic_flag__(true))
+ == __atomic_flag__(true);
case memory_order_acq_rel:
- return __choose_exchange_acq_rel(&__f->__flg_, true);
+ return __choose_exchange_acq_rel(&__f->__flg_, __atomic_flag__(true))
+ == __atomic_flag__(true);
case memory_order_seq_cst:
- return __choose_exchange_seq_cst(&__f->__flg_, true);
+ return __choose_exchange_seq_cst(&__f->__flg_, __atomic_flag__(true))
+ == __atomic_flag__(true);
}
}
@@ -12484,7 +12495,7 @@
void
atomic_flag_clear(volatile atomic_flag* __f)
{
- return __choose_store_seq_cst(&__f->__flg_, false);
+ __choose_store_seq_cst(&__f->__flg_, __atomic_flag__(false));
}
inline _LIBCPP_INLINE_VISIBILITY
@@ -12501,13 +12512,13 @@
switch (__o)
{
case memory_order_relaxed:
- __choose_store_relaxed(&__f->__flg_, false);
+ __choose_store_relaxed(&__f->__flg_, __atomic_flag__(false));
break;
case memory_order_release:
- __choose_store_release(&__f->__flg_, false);
+ __choose_store_release(&__f->__flg_, __atomic_flag__(false));
break;
case memory_order_seq_cst:
- __choose_store_seq_cst(&__f->__flg_, false);
+ __choose_store_seq_cst(&__f->__flg_, __atomic_flag__(false));
break;
}
}