https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101367
Bug ID: 101367 Summary: [coroutines] destructor for capture in lambda temporary operand to co_yield expression called twice Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: noah at vectorized dot io Target Milestone: --- I'm observing an issue in which it appears that the destructor for a captured object in a lambda which is passed as a temporary to a co_await/co_yield expression is being called twice. Here is a reproducer https://godbolt.org/z/8jrGx7qsT which is a slight modification of the reproducer used in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95599 that was related to the order of destructors in co_await/co_yield expressions. In the reproducer I gave when the lambda temporary doesn't capture a std::string value things work, but when it does you can see that gcc reports `free(): invalid pointer`. It also appears that https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100611 may be closely related.