https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94288

--- Comment #2 from Martin Liška <marxin at gcc dot gnu.org> ---
Reduced test-case:

namespace std {
template <typename _Result> struct coroutine_traits {
  using promise_type = _Result::promise_type;
};
template <typename = void> struct coroutine_handle;
template <> struct coroutine_handle<> {};
template <typename> struct coroutine_handle : coroutine_handle<> {};
struct A {
  void await_ready();
  void await_suspend(coroutine_handle<>);
  void await_resume();
};
} // namespace std
struct B {
  struct C {
    void await_ready();
    template <typename Promise>
    void await_suspend(std::coroutine_handle<Promise>);
    void await_resume();
  };
  std::coroutine_handle<> __trans_tmp_1;
  auto get_return_object() { return __trans_tmp_1; }
  auto initial_suspend() { return std::A(); }
  auto final_suspend() { return C(); }
  void unhandled_exception();
};
struct D {
  using promise_type = B;
  std::coroutine_handle<> _handle;
  void await_ready();
  void await_suspend(std::coroutine_handle<>);
  void await_resume();
};
D foo() { co_await foo(); }

Reply via email to