https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102883
Bug ID: 102883
Summary: Calling co_yield with initializer list containing
shared_ptr causes internal compiler error
Product: gcc
Version: 10.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: brad.nemanich at amd dot com
Target Milestone: ---
When calling co_yield on an intializer_list that contains a shared_ptr, gcc
10.3 is failing with `internal compiler error: in build_special_member_call, at
cp/call.c:9787`.
Below is a short example that causes the error.
```
#include <memory>
#include <coroutine>
template <std::movable T>
class Generator
{
public:
struct promise_type
{
Generator<T> get_return_object();
void return_void() noexcept { }
void unhandled_exception() noexcept;
static std::suspend_always initial_suspend() noexcept { return {}; }
static std::suspend_always final_suspend() noexcept { return {}; }
std::suspend_always yield_value(T v) noexcept;
};
};
struct MyStruct
{
MyStruct(std::initializer_list<std::shared_ptr<int>> dst);
};
Generator<MyStruct> add(std::shared_ptr<int> dest)
{
//MyStruct tmp({dest});
//co_yield tmp;
co_yield MyStruct({dest});
}
```