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

--- Comment #8 from GCC 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:f0315f7a325ffccb446fe378fcdfccda6eead8ba

commit r15-3154-gf0315f7a325ffccb446fe378fcdfccda6eead8ba
Author: Iain Sandoe <i...@sandoe.co.uk>
Date:   Sun Aug 18 22:54:50 2024 +0100

    c++, coroutines: Rework handling of throwing_cleanups [PR102051].

    In the fix for PR95822 (r11-7402) we set throwing_cleanup false in the top
    level of the coroutine transform code.  However, as the current PR shows,
    that is not sufficient.

    Any use of cxx_maybe_build_cleanup() can reset the flag, which causes the
    check_return_expr () logic to try to add a guard variable and set it.

    For the coroutine code, we need to handle the cleanups separately, since
    the responsibility for them changes after the first resume point, which
    we handle in the ramp exception processing.

    Fix this by forcing the "throwing_cleanup" flag false right before the
    processing of the return expression.

            PR c++/102051

    gcc/cp/ChangeLog:

            * coroutines.cc
            (cp_coroutine_transform::build_ramp_function): Handle
            "throwing_cleanup" here instead of ...
            (cp_coroutine_transform::apply_transforms): ... here.

    gcc/testsuite/ChangeLog:

            * g++.dg/coroutines/pr102051.C: New test.

    Signed-off-by: Iain Sandoe <i...@sandoe.co.uk>

Reply via email to