Hi! On Sat, Apr 11, 2020 at 03:46:18PM +0100, Iain Sandoe wrote: > Unfortunately, several targets have ABI constraints that prevent > an indirect tail-call, which results in the PRs compile error.
> diff --git > a/gcc/testsuite/g++.dg/coroutines/torture/symmetric-transfer-00-basic.C > b/gcc/testsuite/g++.dg/coroutines/torture/symmetric-transfer-00-basic.C > index 864846e365c..8211e8250ff 100644 > --- a/gcc/testsuite/g++.dg/coroutines/torture/symmetric-transfer-00-basic.C > +++ b/gcc/testsuite/g++.dg/coroutines/torture/symmetric-transfer-00-basic.C > @@ -1,4 +1,5 @@ > -// { dg-do run } > +// { dg-do run } > +// { dg-xfail-run-if "no indirect tailcall" { { lp64 && { > powerpc64*-linux-gnu } } || { *-*-solaris2* *-*-aix* } } } lp64 && powerpc*-*-linux (we have biarch compilers :-) ) The problem is not that there is no indirect tailcall; the problem is that no tailcall can be done to a routine that (potentially) has a different TOC. >From rs6000_function_ok_for_sibcall: Under the AIX or ELFv2 ABIs we can't allow calls to non-local functions, because the callee may have a different TOC pointer to the caller and there's no way to ensure we restore the TOC when we return. Segher