diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2024-04-26 15:33:29 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2024-05-08 19:37:29 -0700 |
| commit | 06ee65af9ed6aa5ee4d1d7f4fab9d7acecf66e76 (patch) | |
| tree | 1316711b92a43dd5c599e425b8693fa8e1e0c0b7 /lib/libcxx/include/atomic | |
| parent | bc6ebc6f2597fda1f98842c6f545751fef2a5334 (diff) | |
| download | zig-06ee65af9ed6aa5ee4d1d7f4fab9d7acecf66e76.tar.gz zig-06ee65af9ed6aa5ee4d1d7f4fab9d7acecf66e76.zip | |
libcxx: update to LLVM 18
release/18.x branch, commit 78b99c73ee4b96fe9ce0e294d4632326afb2db42
This adds the flag `-D_LIBCPP_HARDENING_MODE` which is determined based
on the Zig optimization mode.
This commit also fixes libunwind, libcxx, and libcxxabi to properly
report sub compilation errors.
Diffstat (limited to 'lib/libcxx/include/atomic')
| -rw-r--r-- | lib/libcxx/include/atomic | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/lib/libcxx/include/atomic b/lib/libcxx/include/atomic index 2f122a707b..2e8f5b521a 100644 --- a/lib/libcxx/include/atomic +++ b/lib/libcxx/include/atomic @@ -262,6 +262,72 @@ struct atomic<T*> void notify_all() noexcept; }; +template<> +struct atomic<floating-point-type> { // since C++20 + using value_type = floating-point-type; + using difference_type = value_type; + + static constexpr bool is_always_lock_free = implementation-defined; + bool is_lock_free() const volatile noexcept; + bool is_lock_free() const noexcept; + + constexpr atomic() noexcept; + constexpr atomic(floating-point-type) noexcept; + atomic(const atomic&) = delete; + atomic& operator=(const atomic&) = delete; + atomic& operator=(const atomic&) volatile = delete; + + void store(floating-point-type, memory_order = memory_order::seq_cst) volatile noexcept; + void store(floating-point-type, memory_order = memory_order::seq_cst) noexcept; + floating-point-type operator=(floating-point-type) volatile noexcept; + floating-point-type operator=(floating-point-type) noexcept; + floating-point-type load(memory_order = memory_order::seq_cst) volatile noexcept; + floating-point-type load(memory_order = memory_order::seq_cst) noexcept; + operator floating-point-type() volatile noexcept; + operator floating-point-type() noexcept; + + floating-point-type exchange(floating-point-type, + memory_order = memory_order::seq_cst) volatile noexcept; + floating-point-type exchange(floating-point-type, + memory_order = memory_order::seq_cst) noexcept; + bool compare_exchange_weak(floating-point-type&, floating-point-type, + memory_order, memory_order) volatile noexcept; + bool compare_exchange_weak(floating-point-type&, floating-point-type, + memory_order, memory_order) noexcept; + bool compare_exchange_strong(floating-point-type&, floating-point-type, + memory_order, memory_order) volatile noexcept; + bool compare_exchange_strong(floating-point-type&, floating-point-type, + memory_order, memory_order) noexcept; + bool compare_exchange_weak(floating-point-type&, floating-point-type, + memory_order = memory_order::seq_cst) volatile noexcept; + bool compare_exchange_weak(floating-point-type&, floating-point-type, + memory_order = memory_order::seq_cst) noexcept; + bool compare_exchange_strong(floating-point-type&, floating-point-type, + memory_order = memory_order::seq_cst) volatile noexcept; + bool compare_exchange_strong(floating-point-type&, floating-point-type, + memory_order = memory_order::seq_cst) noexcept; + + floating-point-type fetch_add(floating-point-type, + memory_order = memory_order::seq_cst) volatile noexcept; + floating-point-type fetch_add(floating-point-type, + memory_order = memory_order::seq_cst) noexcept; + floating-point-type fetch_sub(floating-point-type, + memory_order = memory_order::seq_cst) volatile noexcept; + floating-point-type fetch_sub(floating-point-type, + memory_order = memory_order::seq_cst) noexcept; + + floating-point-type operator+=(floating-point-type) volatile noexcept; + floating-point-type operator+=(floating-point-type) noexcept; + floating-point-type operator-=(floating-point-type) volatile noexcept; + floating-point-type operator-=(floating-point-type) noexcept; + + void wait(floating-point-type, memory_order = memory_order::seq_cst) const volatile noexcept; + void wait(floating-point-type, memory_order = memory_order::seq_cst) const noexcept; + void notify_one() volatile noexcept; + void notify_one() noexcept; + void notify_all() volatile noexcept; + void notify_all() noexcept; +}; // [atomics.nonmembers], non-member functions template<class T> @@ -448,6 +514,9 @@ typedef atomic<ptrdiff_t> atomic_ptrdiff_t; typedef atomic<intmax_t> atomic_intmax_t; typedef atomic<uintmax_t> atomic_uintmax_t; +typedef see-below atomic_signed_lock_free; // since C++20 +typedef see-below atomic_unsigned_lock_free; // since C++20 + // flag type and operations typedef struct atomic_flag |
