r278402 - in /trunk/libstdc++-v3: ChangeLog inc...

redi@gcc.gnu.org redi@gcc.gnu.org
Mon Nov 18 12:46:00 GMT 2019


Author: redi
Date: Mon Nov 18 12:46:08 2019
New Revision: 278402

URL: https://gcc.gnu.org/viewcvs?rev=278402&root=gcc&view=rev
Log:
libstdc++: Fix std::jthread bugs

The std::jthread::get_id() function was missing a return statement.

The is_invocable check needs to be done using decayed types, as they'll
be forwarded to std::invoke as rvalues.

Also reduce header dependencies for the <thread> header. We don't need
to include <functional> for std::jthread because <bits/invoke.h> is
already included, which defines std::__invoke. We can also remove
<bits/functexcept.h> which isn't used at all. Finally, when
_GLIBCXX_HAS_GTHREADS is not defined there's no point including any
other headers, since we're not going to define anything in <thread>
anyway.

	* include/std/thread: Reduce header dependencies.
	(jthread::get_id()): Add missing return.
	(jthread::get_stop_token()): Avoid unnecessary stop_source temporary.
	(jthread::_S_create): Check is_invocable using decayed types. Add
	static assertion.
	* testsuite/30_threads/jthread/1.cc: Add dg-require-gthreads.
	* testsuite/30_threads/jthread/2.cc: Likewise.
	* testsuite/30_threads/jthread/3.cc: New test.
	* testsuite/30_threads/jthread/jthread.cc: Add missing directives for
	pthread and gthread support. Use VERIFY instead of assert.

Added:
    trunk/libstdc++-v3/testsuite/30_threads/jthread/3.cc
      - copied, changed from r278401, trunk/libstdc++-v3/testsuite/30_threads/jthread/1.cc
Modified:
    trunk/libstdc++-v3/ChangeLog
    trunk/libstdc++-v3/include/std/thread
    trunk/libstdc++-v3/testsuite/30_threads/jthread/1.cc
    trunk/libstdc++-v3/testsuite/30_threads/jthread/2.cc
    trunk/libstdc++-v3/testsuite/30_threads/jthread/jthread.cc



More information about the Libstdc++-cvs mailing list