bionic: libc: avoid -Wdeprecated-declarations via std::atomic_init
std::atomic_init is deprecated in C++20, and is slated for removal in C++26.
Replace the usage of std::atomic_init with std::atomic_store_explicit with
std::memory_ordering_relaxed.
Link: https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0883r2.pdf
Link: https://github.com/llvm/llvm-project/commit/56aac567acfd696f54163e33d8df02dc2ad3a72e
Test: mmma bionic
Change-Id: Idf42aea193cfacf8dd7f8528560a396c6064468c
diff --git a/libc/bionic/posix_timers.cpp b/libc/bionic/posix_timers.cpp
index 65749a4..9516059 100644
--- a/libc/bionic/posix_timers.cpp
+++ b/libc/bionic/posix_timers.cpp
@@ -141,7 +141,7 @@
// Otherwise, this must be SIGEV_THREAD timer...
timer->callback = evp->sigev_notify_function;
timer->callback_argument = evp->sigev_value;
- atomic_init(&timer->deleted, false);
+ atomic_store_explicit(&timer->deleted, false, memory_order_relaxed);
// Check arguments that the kernel doesn't care about but we do.
if (timer->callback == nullptr) {
diff --git a/libc/bionic/pthread_barrier.cpp b/libc/bionic/pthread_barrier.cpp
index 1618222..ff048a6 100644
--- a/libc/bionic/pthread_barrier.cpp
+++ b/libc/bionic/pthread_barrier.cpp
@@ -95,8 +95,8 @@
return EINVAL;
}
barrier->init_count = count;
- atomic_init(&barrier->state, WAIT);
- atomic_init(&barrier->wait_count, 0);
+ atomic_store_explicit(&barrier->state, WAIT, memory_order_relaxed);
+ atomic_store_explicit(&barrier->wait_count, 0, memory_order_relaxed);
barrier->pshared = false;
if (attr != nullptr && (*attr & 1)) {
barrier->pshared = true;
diff --git a/libc/bionic/pthread_cond.cpp b/libc/bionic/pthread_cond.cpp
index f444676..197fd19 100644
--- a/libc/bionic/pthread_cond.cpp
+++ b/libc/bionic/pthread_cond.cpp
@@ -140,10 +140,10 @@
if (attr != nullptr) {
init_state = (*attr & COND_FLAGS_MASK);
}
- atomic_init(&cond->state, init_state);
+ atomic_store_explicit(&cond->state, init_state, memory_order_relaxed);
#if defined(__LP64__)
- atomic_init(&cond->waiters, 0);
+ atomic_store_explicit(&cond->waiters, 0, memory_order_relaxed);
#endif
return 0;
diff --git a/libc/bionic/pthread_create.cpp b/libc/bionic/pthread_create.cpp
index 54bfa20..3fa8ee6 100644
--- a/libc/bionic/pthread_create.cpp
+++ b/libc/bionic/pthread_create.cpp
@@ -159,11 +159,11 @@
int __init_thread(pthread_internal_t* thread) {
thread->cleanup_stack = nullptr;
- if (__predict_true((thread->attr.flags & PTHREAD_ATTR_FLAG_DETACHED) == 0)) {
- atomic_init(&thread->join_state, THREAD_NOT_JOINED);
- } else {
- atomic_init(&thread->join_state, THREAD_DETACHED);
+ ThreadJoinState state = THREAD_NOT_JOINED;
+ if (__predict_false((thread->attr.flags & PTHREAD_ATTR_FLAG_DETACHED) != 0)) {
+ state = THREAD_DETACHED;
}
+ atomic_store_explicit(&thread->join_state, state, memory_order_relaxed);
// Set the scheduling policy/priority of the thread if necessary.
bool need_set = true;
diff --git a/libc/bionic/pthread_internal.cpp b/libc/bionic/pthread_internal.cpp
index c6426ed..4f2ad0c 100644
--- a/libc/bionic/pthread_internal.cpp
+++ b/libc/bionic/pthread_internal.cpp
@@ -259,8 +259,7 @@
g_func = func;
g_arg = arg;
- static _Atomic(bool) g_retval;
- atomic_init(&g_retval, true);
+ static _Atomic(bool) g_retval(true);
auto handler = [](int, siginfo_t*, void*) {
ErrnoRestorer restorer;
diff --git a/libc/bionic/pthread_mutex.cpp b/libc/bionic/pthread_mutex.cpp
index 0a452e9..c99717a 100644
--- a/libc/bionic/pthread_mutex.cpp
+++ b/libc/bionic/pthread_mutex.cpp
@@ -509,8 +509,8 @@
memset(mutex, 0, sizeof(pthread_mutex_internal_t));
if (__predict_true(attr == nullptr)) {
- atomic_init(&mutex->state, MUTEX_TYPE_BITS_NORMAL);
- return 0;
+ atomic_store_explicit(&mutex->state, MUTEX_TYPE_BITS_NORMAL, memory_order_relaxed);
+ return 0;
}
uint16_t state = 0;
@@ -543,13 +543,13 @@
}
mutex->pi_mutex_id = id;
#endif
- atomic_init(&mutex->state, PI_MUTEX_STATE);
+ atomic_store_explicit(&mutex->state, PI_MUTEX_STATE, memory_order_relaxed);
PIMutex& pi_mutex = mutex->ToPIMutex();
pi_mutex.type = *attr & MUTEXATTR_TYPE_MASK;
pi_mutex.shared = (*attr & MUTEXATTR_SHARED_MASK) != 0;
} else {
- atomic_init(&mutex->state, state);
- atomic_init(&mutex->owner_tid, 0);
+ atomic_store_explicit(&mutex->state, state, memory_order_relaxed);
+ atomic_store_explicit(&mutex->owner_tid, 0, memory_order_relaxed);
}
return 0;
}
diff --git a/libc/bionic/pthread_rwlock.cpp b/libc/bionic/pthread_rwlock.cpp
index 6f3c6fe..92134b4 100644
--- a/libc/bionic/pthread_rwlock.cpp
+++ b/libc/bionic/pthread_rwlock.cpp
@@ -247,7 +247,7 @@
}
}
- atomic_init(&rwlock->state, 0);
+ atomic_store_explicit(&rwlock->state, 0, memory_order_relaxed);
rwlock->pending_lock.init(rwlock->pshared);
return 0;
}
diff --git a/libc/bionic/semaphore.cpp b/libc/bionic/semaphore.cpp
index 33552a9..2c9b745 100644
--- a/libc/bionic/semaphore.cpp
+++ b/libc/bionic/semaphore.cpp
@@ -113,7 +113,7 @@
}
atomic_uint* sem_count_ptr = SEM_TO_ATOMIC_POINTER(sem);
- atomic_init(sem_count_ptr, count);
+ atomic_store_explicit(sem_count_ptr, count, memory_order_relaxed);
return 0;
}
diff --git a/libc/private/bionic_lock.h b/libc/private/bionic_lock.h
index 8ed4939..d0c6d5e 100644
--- a/libc/private/bionic_lock.h
+++ b/libc/private/bionic_lock.h
@@ -46,7 +46,7 @@
public:
void init(bool process_shared) {
- atomic_init(&state, Unlocked);
+ atomic_store_explicit(&state, Unlocked, memory_order_relaxed);
this->process_shared = process_shared;
}
diff --git a/libc/system_properties/include/system_properties/prop_area.h b/libc/system_properties/include/system_properties/prop_area.h
index 187ff75..089cf52 100644
--- a/libc/system_properties/include/system_properties/prop_area.h
+++ b/libc/system_properties/include/system_properties/prop_area.h
@@ -102,7 +102,7 @@
}
prop_area(const uint32_t magic, const uint32_t version) : magic_(magic), version_(version) {
- atomic_init(&serial_, 0u);
+ atomic_store_explicit(&serial_, 0u, memory_order_relaxed);
memset(reserved_, 0, sizeof(reserved_));
// Allocate enough space for the root node.
bytes_used_ = sizeof(prop_trie_node);
diff --git a/libc/system_properties/prop_info.cpp b/libc/system_properties/prop_info.cpp
index c3bf177..499b36a 100644
--- a/libc/system_properties/prop_info.cpp
+++ b/libc/system_properties/prop_info.cpp
@@ -38,7 +38,7 @@
prop_info::prop_info(const char* name, uint32_t namelen, const char* value, uint32_t valuelen) {
memcpy(this->name, name, namelen);
this->name[namelen] = '\0';
- atomic_init(&this->serial, valuelen << 24);
+ atomic_store_explicit(&this->serial, valuelen << 24, memory_order_relaxed);
memcpy(this->value, value, valuelen);
this->value[valuelen] = '\0';
}
@@ -48,7 +48,7 @@
this->name[namelen] = '\0';
auto error_value_len = sizeof(kLongLegacyError) - 1;
- atomic_init(&this->serial, error_value_len << 24 | kLongFlag);
+ atomic_store_explicit(&this->serial, error_value_len << 24 | kLongFlag, memory_order_relaxed);
memcpy(this->long_property.error_message, kLongLegacyError, sizeof(kLongLegacyError));
this->long_property.offset = long_offset;