This series complete Tom's work to refactor the C++20 atomic wait/notify
code, and includes several follow-up patches from me. The goal is to
move the core implementation pieces into libstdc++.so instead of
defining everything inline in the headers. This is a necessary step for
stabilizing C++20 support for GCC 16.

This fixes:

- PR 98749 - No precondition checks in <semaphore>, <latch> and <barrier>
- PR 99572 - std::counting_semaphore coalescing wakes
- PR 104928 - std::counting_semaphore on Linux can sleep forever
- PR 110854 - constructor of std::counting_semaphore is not constexpr
- PR 118395 - Constructor of std::barrier is not constexpr
- PR 99995 - should not include <unistd.h> in c++20 mode

Not fixed:

- PR 115955 - atomic<T>::wait _S_for uses a poor hash function
  This can be fixed at leisure once the definition moves into the shared
  library and isn't defined inline in headers.

- PR 118402 - std::barrier doesn't use futex directly
  See the bugzilla PR for discussion.

All tests pass on x86_64-linux and sparc-solaris and power-aix. I'm not
expecting further review of this series, but I'm posting it one more
time before pushing because I want to see the Linaro CI results.


Jonathan Wakely (14):
  libstdc++: Whitespace fixes in atomic wait/notify code
  libstdc++: Various fixes for atomic wait/notify code
  libstdc++: Fix race condition in new atomic notify code
  libstdc++: Fix time_point conversion in atomic timed waits
  libstdc++: Simplify futex wrapper functions for atomic wait/notify
  libstdc++: Remove reinterpret_cast uses in atomic wait/notify
  libstdc++: Rename __atomic_compare to __atomic_eq
  libstdc++: Rename __waiter_pool_impl to __waitable_state
  libstdc++: Move atomic wait/notify entry points into the library
  libstdc++: Optimise std::latch::arrive_and_wait
  libstdc++: Fix std::barrier for constant initialization [PR118395]
  libstdc++: Create new base class of std::barrier<C> for non-dependent
    code
  libstdc++: Rewrite std::counting_semaphore base class [PR118494]
  libstdc++: Define __wait_result_type for atomic waiting

Thomas Rodgers (2):
  libstdc++: Atomic wait/notify ABI stabilization
  libstdc++: Pass __wait_args to internal API by const pointer

 libstdc++-v3/acinclude.m4                     |  37 --
 libstdc++-v3/config.h.in                      |   4 -
 libstdc++-v3/config/abi/pre/gnu.ver           |  11 +
 libstdc++-v3/configure                        |  60 +--
 libstdc++-v3/include/bits/atomic_timed_wait.h | 452 ++++------------
 libstdc++-v3/include/bits/atomic_wait.h       | 495 ++++++------------
 libstdc++-v3/include/bits/semaphore_base.h    | 235 +++------
 libstdc++-v3/include/bits/version.def         |   2 +-
 libstdc++-v3/include/bits/version.h           |   2 +-
 libstdc++-v3/include/std/barrier              | 199 ++++---
 libstdc++-v3/include/std/latch                |  26 +-
 libstdc++-v3/include/std/semaphore            |  32 +-
 libstdc++-v3/src/c++20/Makefile.am            |   2 +-
 libstdc++-v3/src/c++20/Makefile.in            |   4 +-
 libstdc++-v3/src/c++20/atomic.cc              | 485 +++++++++++++++++
 .../17_intro/headers/c++1998/49745.cc         |   2 -
 .../29_atomics/atomic/wait_notify/100334.cc   |   7 +-
 .../29_atomics/atomic_integral/wait_notify.cc |   8 +-
 .../testsuite/30_threads/barrier/cons.cc      |   6 +
 .../testsuite/30_threads/barrier/lwg3898.cc   |  45 ++
 .../testsuite/30_threads/semaphore/100806.cc  |   2 +-
 .../testsuite/30_threads/semaphore/cons.cc    |   7 +
 .../semaphore/platform_try_acquire_for.cc     |   9 -
 .../30_threads/semaphore/try_acquire_posix.cc | 153 ------
 libstdc++-v3/testsuite/util/testsuite_abi.cc  |   1 +
 25 files changed, 1056 insertions(+), 1230 deletions(-)
 create mode 100644 libstdc++-v3/src/c++20/atomic.cc
 create mode 100644 libstdc++-v3/testsuite/30_threads/barrier/cons.cc
 create mode 100644 libstdc++-v3/testsuite/30_threads/barrier/lwg3898.cc
 create mode 100644 libstdc++-v3/testsuite/30_threads/semaphore/cons.cc
 delete mode 100644 
libstdc++-v3/testsuite/30_threads/semaphore/platform_try_acquire_for.cc
 delete mode 100644 
libstdc++-v3/testsuite/30_threads/semaphore/try_acquire_posix.cc

-- 
2.49.0

Reply via email to