libstdc++: Add atomic_fetch_xor to <stdatomic.h>

This function (and the explicit memory over version) are present in both
C++ <atomic> and C <stdatomic.h>, so should be in C++ <stdatomic.h> too.
There is a library issue incoming for this, but the resolution is
obvious.

libstdc++-v3/ChangeLog:

	* include/c_compatibility/stdatomic.h (atomic_fetch_xor): Add
	using-declaration.
	(atomic_fetch_xor_explicit): Likewise.
	* testsuite/29_atomics/headers/stdatomic.h/c_compat.cc: Check
	arithmetic and logical operations for atomic_int.
This commit is contained in:
Jonathan Wakely 2022-02-09 13:38:33 +00:00
parent 3d5f4f76e6
commit 3e539985cc
2 changed files with 13 additions and 0 deletions

View File

@ -111,6 +111,8 @@ using std::atomic_fetch_sub;
using std::atomic_fetch_sub_explicit;
using std::atomic_fetch_or;
using std::atomic_fetch_or_explicit;
using std::atomic_fetch_xor;
using std::atomic_fetch_xor_explicit;
using std::atomic_fetch_and;
using std::atomic_fetch_and_explicit;
using std::atomic_flag_test_and_set;

View File

@ -116,6 +116,17 @@ static_assert( requires (::atomic_int* i, int* e) {
::atomic_compare_exchange_weak_explicit(i, e, 3,
memory_order_acq_rel,
memory_order_relaxed);
::atomic_fetch_add(i, 1);
::atomic_fetch_add_explicit(i, 1, memory_order_relaxed);
::atomic_fetch_sub(i, 1);
::atomic_fetch_sub_explicit(i, 1, memory_order_relaxed);
::atomic_fetch_and(i, 1);
::atomic_fetch_and_explicit(i, 1, memory_order_relaxed);
::atomic_fetch_or(i, 1);
::atomic_fetch_or_explicit(i, 1, memory_order_relaxed);
::atomic_fetch_xor(i, 1);
::atomic_fetch_xor_explicit(i, 1, memory_order_relaxed);
} );
static_assert( requires (::atomic_flag* f) {