[PATCH] libstdc++: Add C++2a synchronization support
Jonathan Wakely
jwakely@redhat.com
Mon Nov 23 18:33:12 GMT 2020
On 22/11/20 22:13 +0100, Stephan Bergmann wrote:
>On 20/11/2020 23:44, Thomas Rodgers wrote:
>>Tested x86_64-pc-linux-gnu, committed.
>
>Clang complains:
>
>>$ cat test.cc
>>#include <semaphore>
>>
>>$ clang++ --gcc-toolchain=~/gcc/trunk/inst -std=c++20 -fsyntax-only test.cc
>>In file included from test.cc:1:
>>In file included from ~/gcc/trunk/inst/lib/gcc/x86_64-pc-linux-gnu/11.0.0/../../../../include/c++/11.0.0/semaphore:36:
>>~/gcc/trunk/inst/lib/gcc/x86_64-pc-linux-gnu/11.0.0/../../../../include/c++/11.0.0/bits/semaphore_base.h:145:22: error: no viable conversion from 'std::chrono::system_clock::time_point' (aka 'time_point<std::chrono::system_clock, duration<long, ratio<1, 1000000000>>>') to 'const std::__platform_semaphore::__clock_t' (aka 'const std::chrono::system_clock')
>> const __clock_t __s_entry = __clock_t::now();
>> ^ ~~~~~~~~~~~~~~~~
>>~/gcc/trunk/inst/lib/gcc/x86_64-pc-linux-gnu/11.0.0/../../../../include/c++/11.0.0/chrono:1101:12: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'std::chrono::system_clock::time_point' (aka 'time_point<std::chrono::system_clock, duration<long, ratio<1, 1000000000>>>') to 'const std::chrono::system_clock &' for 1st argument
>> struct system_clock
>> ^
>>~/gcc/trunk/inst/lib/gcc/x86_64-pc-linux-gnu/11.0.0/../../../../include/c++/11.0.0/chrono:1101:12: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'std::chrono::system_clock::time_point' (aka 'time_point<std::chrono::system_clock, duration<long, ratio<1, 1000000000>>>') to 'std::chrono::system_clock &&' for 1st argument
>>1 error generated.
>
>which
>
>>diff --git a/libstdc++-v3/include/bits/semaphore_base.h b/libstdc++-v3/include/bits/semaphore_base.h
>>index 78a0b6ba26e..f25c9fdb325 100644
>>--- a/libstdc++-v3/include/bits/semaphore_base.h
>>+++ b/libstdc++-v3/include/bits/semaphore_base.h
>>@@ -142,7 +142,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> else
>> {
>> const typename _Clock::time_point __c_entry = _Clock::now();
>>- const __clock_t __s_entry = __clock_t::now();
>>+ const __clock_t::time_point __s_entry = __clock_t::now();
>> const auto __delta = __atime - __c_entry;
>> const auto __s_atime = __s_entry + __delta;
>> if (_M_try_acquire_until_impl(__s_atime))
>>~
>
>would fix.
I just used 'auto'` instead.
Committed, thanks.
The fact this didn't error with GCC suggests we're missing some tests.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: patch.txt
Type: text/x-patch
Size: 972 bytes
Desc: not available
URL: <https://gcc.gnu.org/pipermail/libstdc++/attachments/20201123/f57c0ff8/attachment.bin>
More information about the Libstdc++
mailing list