For symmetric transfers to work with C++20 coroutines, it is currently necessary to tail call the callee coroutine from resume method of the caller coroutine. However there are several targets which don't support an indirect tail call to an arbitrary callee. Unfortunately, the target 'function_ok_for_sibcall' is not usable from the front end in all cases. While it is possible to add a new hook to cover this circumstance, it is too late in the release cycle to be sure of getting the setting correct for all targets. So, this patch backs out the use of function_ok_for_sibcall () and the mandate of CALL_EXPR_MUST_TAIL_CALL from the symmetric transfer. Targets that can make indirect tail calls to arbitrary callees will still be able to make use of the symmetric transfer (without risking overrunning the stack) for optimization levels >= 2. The draft standard does not mandate unlimited symmetric transfers, so removing this is a QOI issue (albeit an important one) rather than a correctness one. The test is moved and adjusted so that it can be opted into by any target that supports the necessary tailcall. gcc/cp/ChangeLog: 2020-04-16 Iain Sandoe <iain@sandoe.co.uk> PR c++/94359 * coroutines.cc (build_actor_fn): Back out use of targetm.function_ok_for_sibcall. Do not mark the resume call as CALL_EXPR_MUST_TAIL_CALL. gcc/testsuite/ChangeLog: 2020-04-16 Iain Sandoe <iain@sandoe.co.uk> PR c++/94359 * g++.dg/coroutines/torture/symmetric-transfer-00-basic.C: Move.. * g++.dg/coroutines/symmetric-transfer-00-basic.C: ..here and adjust to run at O2 for targets supporting the necessary tail call.
Name |
Last commit
|
Last update |
---|---|---|
.. | ||
ChangeLog | Loading commit data... | |
ChangeLog-1993 | Loading commit data... | |
ChangeLog-1994 | Loading commit data... | |
ChangeLog-1995 | Loading commit data... | |
ChangeLog-1996 | Loading commit data... | |
ChangeLog-1997 | Loading commit data... | |
ChangeLog-1998 | Loading commit data... | |
ChangeLog-1999 | Loading commit data... | |
ChangeLog-2000 | Loading commit data... | |
ChangeLog-2001 | Loading commit data... | |
ChangeLog-2002 | Loading commit data... | |
ChangeLog-2003 | Loading commit data... | |
ChangeLog-2004 | Loading commit data... | |
ChangeLog-2005 | Loading commit data... | |
ChangeLog-2006 | Loading commit data... | |
ChangeLog-2007 | Loading commit data... | |
ChangeLog-2008 | Loading commit data... | |
ChangeLog-2009 | Loading commit data... | |
ChangeLog-2010 | Loading commit data... | |
ChangeLog-2011 | Loading commit data... | |
ChangeLog-2012 | Loading commit data... | |
ChangeLog-2013 | Loading commit data... | |
ChangeLog-2014 | Loading commit data... | |
ChangeLog-2015 | Loading commit data... | |
ChangeLog-2016 | Loading commit data... | |
ChangeLog-2017 | Loading commit data... | |
ChangeLog-2018 | Loading commit data... | |
ChangeLog-2019 | Loading commit data... | |
ChangeLog.ptr | Loading commit data... | |
ChangeLog.tree-ssa | Loading commit data... | |
Make-lang.in | Loading commit data... | |
NEWS | Loading commit data... | |
call.c | Loading commit data... | |
cfns.gperf | Loading commit data... | |
cfns.h | Loading commit data... | |
class.c | Loading commit data... | |
config-lang.in | Loading commit data... | |
constexpr.c | Loading commit data... | |
constraint.cc | Loading commit data... | |
coroutines.cc | Loading commit data... | |
cp-gimplify.c | Loading commit data... | |
cp-lang.c | Loading commit data... | |
cp-name-hint.h | Loading commit data... | |
cp-objcp-common.c | Loading commit data... | |
cp-objcp-common.h | Loading commit data... | |
cp-tree.def | Loading commit data... | |
cp-tree.h | Loading commit data... | |
cp-ubsan.c | Loading commit data... | |
cvt.c | Loading commit data... | |
cxx-pretty-print.c | Loading commit data... | |
cxx-pretty-print.h | Loading commit data... | |
decl.c | Loading commit data... | |
decl.h | Loading commit data... | |
decl2.c | Loading commit data... | |
dump.c | Loading commit data... | |
error.c | Loading commit data... | |
except.c | Loading commit data... | |
expr.c | Loading commit data... | |
friend.c | Loading commit data... | |
g++spec.c | Loading commit data... | |
init.c | Loading commit data... | |
lambda.c | Loading commit data... | |
lang-specs.h | Loading commit data... | |
lex.c | Loading commit data... | |
logic.cc | Loading commit data... | |
mangle.c | Loading commit data... | |
method.c | Loading commit data... | |
name-lookup.c | Loading commit data... | |
name-lookup.h | Loading commit data... | |
operators.def | Loading commit data... | |
optimize.c | Loading commit data... | |
parser.c | Loading commit data... | |
parser.h | Loading commit data... | |
pt.c | Loading commit data... | |
ptree.c | Loading commit data... | |
rtti.c | Loading commit data... | |
search.c | Loading commit data... | |
semantics.c | Loading commit data... | |
tree.c | Loading commit data... | |
type-utils.h | Loading commit data... | |
typeck.c | Loading commit data... | |
typeck2.c | Loading commit data... | |
vtable-class-hierarchy.c | Loading commit data... |