https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97452
--- Comment #14 from John Eivind Helset <jehelset at gmail dot com> --- Added what I think is an even more minimal reproducer in attachment pr97452.cc. In the gimple I see: <D.9973>: resume.6: _16 = Z::await_resume (&z); _17 = Z::await_resume (&z); _18 = _16 + _17; frame_ptr->b_1_2 = _18; Which seems to violate: http://eel.is/c++draft/expr.await#5 So I think here: https://github.com/gcc-mirror/gcc/blob/master/gcc/cp/coroutines.cc#L2023 One might need to make sure that also await-resume results are promoted if evaluating the the expression might involve two `co_awaits`, instead of substituting the call to `await_resume` directly into the expression.