https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94359
Iain Sandoe <iains at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Last reconfirmed| |2020-03-27 Ever confirmed|0 |1 Status|UNCONFIRMED |NEW --- Comment #1 from Iain Sandoe <iains at gcc dot gnu.org> --- There are two cases here. 1) When the optimisation level is < 2 (where GCC does not normally tail-call). - in that case, the specific call [ which is in the tail position, and AFAIU should be tail-callable ] is marked as TAIL_CALL, MUST_TAIL_CALL (hence the complaint error: cannot tail-call: target is not able to optimize the call into a sibling call, I suppose). 2) for O >= 2 where GCC would normally tail call anyway - for this, the coroutine code does not mark the cll specially, so for these cases it indicates that the tail-call is not being made in "normal" circumstance. the function signature is void actor (void *) and the codgen should be emitting an indirect call, followed by a void return (the indirect call is expanding __builtin_coro_resume() [expansion happens very early in the ME].