https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94701
Bug ID: 94701 Summary: coroutines: Wrong code for structured bindings. Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: iains at gcc dot gnu.org Target Milestone: --- Created attachment 48330 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=48330&action=edit patch under test As reported by MichaĆ Dominiak, the following code gets an incorrect answer - this is because we fail to check for DECL_VALUE_EXPR in the handling for local vars. struct promise; struct future { using promise_type = promise; }; struct promise { template<typename... Args> promise (Args&... args) {} coro::suspend_never initial_suspend() { return {}; } coro::suspend_never final_suspend() { return {}; } future get_return_object() { return {}; } void return_value(int) {} void unhandled_exception() {} }; #include <cassert> struct pair { int i; }; pair something () { return { 1 }; } future my_coro () { auto ret = something (); assert(ret.i == 1); auto [ i ] = something (); assert(i == 1); co_return 1; } int main () { my_coro (); }