https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95823
Bug ID: 95823 Summary: [coroutines] compiler internal error in captures_temporary, Product: gcc Version: 10.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: victor.burckel at gmail dot com Target Milestone: --- I get a compiler internal error when passing a value to a coroutine that is retrieved through two inderections within smart pointers (I don't get the error with raw pointers, that's the smallest piece of code I was able to produce). > internal compiler error: in captures_temporary, at cp/coroutines.cc:2717 It can be easily worked around by making a local variable containing the value. Of course the code would crash in runtime as the pointers are not initialized, but I get the same error when initializing them. I managed to reproduce with godbolt (both gcc10.1 and gcc trunk give me the assertion) https://godbolt.org/z/XarC_M #include <coroutine> #include <memory> struct task { struct promise_type { auto initial_suspend() noexcept { return std::suspend_always{}; } auto final_suspend() noexcept { return std::suspend_always{}; } void return_void() {} task get_return_object() { return task{}; } void unhandled_exception() noexcept {} }; ~task() noexcept {} bool await_ready() const noexcept { return false; } void await_suspend(std::coroutine_handle<>) noexcept {} void await_resume() noexcept {} }; struct Id { std::unique_ptr<int> value; }; task g(int); task f() { std::unique_ptr<Id> id; co_await g(*id->value); }