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

Reply via email to