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>