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

            Bug ID: 114142
           Summary: [coroutines]: internal compiler error: tree check:
                    expected record_type or union_type or qual_union_type,
                    have reference_type in lookup_base, at
                    cp/search.cc:252
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ldalessandro at gmail dot com
  Target Milestone: ---

```
  #include <coroutine>

  struct Bar {};

  struct Task
  {
      struct promise_type
      {
          promise_type(Bar&) {}
          std::suspend_never initial_suspend() { return {}; }
          std::suspend_never final_suspend() noexcept { return {}; }
          void return_void() {}
          void unhandled_exception() {}
          Task get_return_object() { return {}; }
      };
  };

  struct Foo : Bar {
      Task foo() {
          co_await std::suspend_always();
          co_return;
      }
  };

  int main()
  {
      Foo x;
      x.foo();
  }
```

When I try and return a Task from a Derived member function and set the
promise's first parameter to the Base& I see this ICE.

In 13.2 this is a rejects-valid.

Current live example https://godbolt.org/z/9EceW8boz.
  • [Bug c++/114142] New: [coroutin... ldalessandro at gmail dot com via Gcc-bugs

Reply via email to