Hi Segher, > 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.
so shouldn't the above be lp64 && powerpc*-*-* instead to cover AIX, too? Or are there other PowerPC ABIs that don't have this issue? Rainer -- ----------------------------------------------------------------------------- Rainer Orth, Center for Biotechnology, Bielefeld University