https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115851
Bug ID: 115851 Summary: ICE in gimplify_var_or_parm_decl with coroutine suspension point inside statement expression Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: daklishch at gmail dot com Target Milestone: --- The following snippet ICEs GCC if the later is invoked with -std=c++20 -fno-exceptions ``` namespace std { template <typename _Result> struct coroutine_traits : _Result {}; template <typename = void> struct coroutine_handle { operator coroutine_handle<>(); }; } // namespace std struct SuspendNever { bool await_ready(); void await_suspend(std::coroutine_handle<>); void await_resume(); }; struct PromiseType { void get_return_object(); SuspendNever initial_suspend(); SuspendNever final_suspend(); }; struct Coroutine { using promise_type = PromiseType; }; struct ErrorOr { int release_error(); }; void warnln(int const&); Coroutine __async_test_input_basic() { ({ co_await SuspendNever{}; ErrorOr _temporary_result2; warnln(_temporary_result2.release_error()); }); } ``` (if you prefer standard-complying code, replace std namespace with #include <coroutine>) CE link: https://godbolt.org/z/ePrP7rh73