> On Nov 4, 2020, at 10:52 AM, Jonathan Wakely <jwak...@redhat.com> wrote:
> 
> 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.
> 

Sure :)

>> 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 :-)
> 

It is used at include/std/barrier:197 to keep the implementation as close as 
possible to the libc++ version upon which it is based.


> 

Reply via email to