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.

Reply via email to