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

--- Comment #13 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Iain D Sandoe <ia...@gcc.gnu.org>:

https://gcc.gnu.org/g:a126a1577ffcbf62d97723b35d343bdff014bb40

commit r10-7724-ga126a1577ffcbf62d97723b35d343bdff014bb40
Author: Iain Sandoe <i...@sandoe.co.uk>
Date:   Tue Apr 14 20:37:12 2020 +0100

    coroutines: Fix compile error with symmetric transfers [PR94359]

    For symmetric transfers to work with C++20 coroutines, it is
    currently necessary to tail call the callee coroutine from resume
    method of the caller coroutine. The current codegen marks these
    resume calls as "MUST_TAIL_CALL" to indicate that the tail call is
    required for correctness.

    Unfortunately, several targets have ABI constraints that prevent
    an indirect tail-call, which results in the PRs compile error.

    The change here tests the target sibcall hook for the resume
    expression and only marks it as requiring a tail call if that's
    supported.

    This doesn't fix the underlying problem; that really a solution is
    needed to allow the tail-calls (or equivalent) to take place - but
    that will be deferred until next stage 1.

    gcc/cp/ChangeLog:

    2020-04-14  Iain Sandoe  <i...@sandoe.co.uk>

            PR c++/94359
            * coroutines.cc (build_actor_fn): Check that the target can
            support the resume tailcall before mandating it.

    gcc/testsuite/ChangeLog:

    2020-04-14  Iain Sandoe  <i...@sandoe.co.uk>

            PR c++/94359
            * g++.dg/coroutines/torture/symmetric-transfer-00-basic.C:
            Expect a run fail for targets without arbitrary indirect
            tail-calls.

Reply via email to