On 04/11/20 10:41 -0800, Thomas Rodgers wrote:
From: Thomas Rodgers <trodg...@redhat.com>

IGNORE the previous version of this patch please.

OK, but all my comments seem to apply to this one too.

Adds <barrier>

libstdc++/ChangeLog:

        * include/Makefile.am (std_headers): Add new header.
        * include/Makefile.in: Regenerate.
        * include/std/barrier: New file.
        * testsuite/30_thread/barrier/1.cc: New test.
        * testsuite/30_thread/barrier/2.cc: Likewise.
        * testsuite/30_thread/barrier/arrive_and_drop.cc: Likewise.
        * testsuite/30_thread/barrier/arrive_and_wait.cc: Likewise.
        * testsuite/30_thread/barrier/arrive.cc: Likewise.
        * testsuite/30_thread/barrier/completion.cc: Likewise.
        * testsuite/30_thread/barrier/max.cc: Likewise.
---
libstdc++-v3/include/Makefile.am              |   1 +
libstdc++-v3/include/Makefile.in              |   1 +
libstdc++-v3/include/bits/atomic_base.h       |  11 +-
libstdc++-v3/include/std/barrier              | 248 ++++++++++++++++++
libstdc++-v3/include/std/version              |   1 +
.../testsuite/30_threads/barrier/1.cc         |  27 ++
.../testsuite/30_threads/barrier/2.cc         |  27 ++
.../testsuite/30_threads/barrier/arrive.cc    |  51 ++++
.../30_threads/barrier/arrive_and_drop.cc     |  49 ++++
.../30_threads/barrier/arrive_and_wait.cc     |  51 ++++
.../30_threads/barrier/completion.cc          |  54 ++++
.../testsuite/30_threads/barrier/max.cc       |  44 ++++
12 files changed, 562 insertions(+), 3 deletions(-)
create mode 100644 libstdc++-v3/include/std/barrier
create mode 100644 libstdc++-v3/testsuite/30_threads/barrier/1.cc
create mode 100644 libstdc++-v3/testsuite/30_threads/barrier/2.cc
create mode 100644 libstdc++-v3/testsuite/30_threads/barrier/arrive.cc
create mode 100644 libstdc++-v3/testsuite/30_threads/barrier/arrive_and_drop.cc
create mode 100644 libstdc++-v3/testsuite/30_threads/barrier/arrive_and_wait.cc
create mode 100644 libstdc++-v3/testsuite/30_threads/barrier/completion.cc
create mode 100644 libstdc++-v3/testsuite/30_threads/barrier/max.cc

diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am
index 382e94322c1..9e497835ee0 100644
--- a/libstdc++-v3/include/Makefile.am
+++ b/libstdc++-v3/include/Makefile.am
@@ -30,6 +30,7 @@ std_headers = \
        ${std_srcdir}/any \
        ${std_srcdir}/array \
        ${std_srcdir}/atomic \
+       ${std_srcdir}/barrier \
        ${std_srcdir}/bit \
        ${std_srcdir}/bitset \
        ${std_srcdir}/charconv \
diff --git a/libstdc++-v3/include/bits/atomic_base.h 
b/libstdc++-v3/include/bits/atomic_base.h
index dd4db926592..1ad34719d3e 100644
--- a/libstdc++-v3/include/bits/atomic_base.h
+++ b/libstdc++-v3/include/bits/atomic_base.h
@@ -603,13 +603,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
      }

#if __cplusplus > 201703L
+      template<typename _Func>
+       _GLIBCXX_ALWAYS_INLINE void
+       _M_wait(__int_type __old, const _Func& __fn) const noexcept
+       { std::__atomic_wait(&_M_i, __old, __fn); }
+
      _GLIBCXX_ALWAYS_INLINE void
      wait(__int_type __old,
          memory_order __m = memory_order_seq_cst) const noexcept
      {
-       std::__atomic_wait(&_M_i, __old,
-                          [__m, this, __old]
-                          { return this->load(__m) != __old; });
+       _M_wait(__old,
+               [__m, this, __old]
+               { return this->load(__m) != __old; });
      }

This looks like it's not meant to be part of this patch.

It also looks wrong for any patch, because it adds _M_wait as a public
member.

Not sure what this piece is for :-)


Reply via email to