diff --git a/libcxx/include/atomic b/libcxx/include/atomic --- a/libcxx/include/atomic +++ b/libcxx/include/atomic @@ -2699,6 +2699,13 @@ #define ATOMIC_FLAG_INIT {false} #define ATOMIC_VAR_INIT(__v) {__v} +#if _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_DISABLE_DEPRECATION_WARNINGS) +# if defined(_LIBCPP_CLANG_VER) && _LIBCPP_CLANG_VER >= 1400 +# pragma clang deprecated(ATOMIC_FLAG_INIT) +# pragma clang deprecated(ATOMIC_VAR_INIT) +# endif +#endif // _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_DISABLE_DEPRECATION_WARNINGS) + _LIBCPP_END_NAMESPACE_STD #endif // _LIBCPP_ATOMIC diff --git a/libcxx/src/barrier.cpp b/libcxx/src/barrier.cpp --- a/libcxx/src/barrier.cpp +++ b/libcxx/src/barrier.cpp @@ -22,7 +22,7 @@ struct alignas(64) /* naturally-align the heap state */ __state_t { struct { - __atomic_base<__barrier_phase_t> __phase = ATOMIC_VAR_INIT(0); + __atomic_base<__barrier_phase_t> __phase{0}; } __tickets[64]; }; diff --git a/libcxx/src/experimental/memory_resource.cpp b/libcxx/src/experimental/memory_resource.cpp --- a/libcxx/src/experimental/memory_resource.cpp +++ b/libcxx/src/experimental/memory_resource.cpp @@ -97,8 +97,7 @@ __default_memory_resource(bool set = false, memory_resource * new_res = nullptr) noexcept { #ifndef _LIBCPP_HAS_NO_ATOMIC_HEADER - _LIBCPP_SAFE_STATIC static atomic __res = - ATOMIC_VAR_INIT(&res_init.resources.new_delete_res); + _LIBCPP_SAFE_STATIC static atomic __res{&res_init.resources.new_delete_res}; if (set) { new_res = new_res ? new_res : new_delete_resource(); // TODO: Can a weaker ordering be used? diff --git a/libcxx/src/ios.cpp b/libcxx/src/ios.cpp --- a/libcxx/src/ios.cpp +++ b/libcxx/src/ios.cpp @@ -137,7 +137,7 @@ // xalloc #if defined(_LIBCPP_HAS_C_ATOMIC_IMP) && !defined(_LIBCPP_HAS_NO_THREADS) -atomic ios_base::__xindex_ = ATOMIC_VAR_INIT(0); +atomic ios_base::__xindex_{0}; #else int ios_base::__xindex_ = 0; #endif diff --git a/libcxx/test/libcxx/atomics/atomics.flag/init_bool.pass.cpp b/libcxx/test/libcxx/atomics/atomics.flag/init_bool.pass.cpp --- a/libcxx/test/libcxx/atomics/atomics.flag/init_bool.pass.cpp +++ b/libcxx/test/libcxx/atomics/atomics.flag/init_bool.pass.cpp @@ -22,7 +22,7 @@ extern std::atomic_flag global; struct X { X() { global.test_and_set(); }}; X x; -std::atomic_flag global = ATOMIC_FLAG_INIT; +std::atomic_flag global{false}; #endif int main(int, char**) diff --git a/libcxx/test/std/atomics/atomics.flag/init.pass.cpp b/libcxx/test/std/atomics/atomics.flag/init.pass.cpp --- a/libcxx/test/std/atomics/atomics.flag/init.pass.cpp +++ b/libcxx/test/std/atomics/atomics.flag/init.pass.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// // XFAIL: c++03 +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS // diff --git a/libcxx/test/std/atomics/atomics.types.operations/atomics.types.operations.req/atomic_var_init.pass.cpp b/libcxx/test/std/atomics/atomics.types.operations/atomics.types.operations.req/atomic_var_init.pass.cpp --- a/libcxx/test/std/atomics/atomics.types.operations/atomics.types.operations.req/atomic_var_init.pass.cpp +++ b/libcxx/test/std/atomics/atomics.types.operations/atomics.types.operations.req/atomic_var_init.pass.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// // XFAIL: c++03 +// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS // diff --git a/libcxx/test/std/atomics/atomics.types.operations/atomics.types.operations.req/ctor.pass.cpp b/libcxx/test/std/atomics/atomics.types.operations/atomics.types.operations.req/ctor.pass.cpp --- a/libcxx/test/std/atomics/atomics.types.operations/atomics.types.operations.req/ctor.pass.cpp +++ b/libcxx/test/std/atomics/atomics.types.operations/atomics.types.operations.req/ctor.pass.cpp @@ -41,10 +41,6 @@ constexpr Atomic a{t}; assert(a == t); } - { - constexpr Atomic a = ATOMIC_VAR_INIT(t); - assert(a == t); - } } }; diff --git a/libcxx/test/std/thread/futures/futures.async/async.pass.cpp b/libcxx/test/std/thread/futures/futures.async/async.pass.cpp --- a/libcxx/test/std/thread/futures/futures.async/async.pass.cpp +++ b/libcxx/test/std/thread/futures/futures.async/async.pass.cpp @@ -30,7 +30,7 @@ typedef std::chrono::high_resolution_clock Clock; typedef std::chrono::milliseconds ms; -std::atomic_bool invoked = ATOMIC_VAR_INIT(false); +std::atomic_bool invoked{false}; int f0() {