https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94359

--- Comment #5 from Iain Sandoe <iains at gcc dot gnu.org> ---
(In reply to Iain Sandoe from comment #4)

> So not sure how to proceed here at the moment (I wonder if this works for
> PPC on the clang impl).

It does work for X86 (and ironically, on PPC Darwin too - where the fact that
we build a new "got" in each routine + no use of TOC means we can always tail
call).  Actually, I'm a bit suspicious of what happens in the case that two
coroutines are in different DSOs for X86.

apparently not:

[iains@gcc1-power7 llvm-90]$ ./INSTL/bin/clang++ -fcoroutines-ts -std=c++17
../gcc-master/src/gcc/testsuite/g++.dg/coroutines/torture/symmetric-transfer-00-basic.C
-stdlib=libc++ -S
fatal error: error in backend: failed to perform tail call elimination on a
call site marked musttail

(the test case crashes the compiler for O>0).

[iains@gcc1-power7 llvm-10]$ ./INSTL/bin/clang++ -fcoroutines-ts -std=c++17
../gcc-master/src/gcc/testsuite/g++.dg/coroutines/torture/symmetric-transfer-00-basic.C
-stdlib=libc++ -S
fatal error: error in backend: failed to perform tail call elimination on a
call site marked musttail

I'm going to discuss this with the coroutines paper authors - as to whether any
constraints had been considered.  Note, once again, that failure to implement
this does not make us non-conforming.

Reply via email to