https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101420
--- Comment #13 from Avi Kivity <a...@cloudius-systems.com> --- The coroutine that breaks is future<> table::generate_and_propagate_view_updates(const schema_ptr& base, reader_permit permit, std::vector<db::view::view_and_base>&& views, mutation&& m, flat_mutation_reader_opt existings, tracing::trace_state_ptr tr_state, gc_clock::time_point now) const { auto base_token = m.token(); db::view::view_update_builder builder = co_await db::view::make_view_update_builder( base, std::move(views), flat_mutation_reader_from_mutations(std::move(permit), {std::move(m)}), std::move(existings), now); while (true) { try { auto updates = co_await builder.build_some(); if (updates.empty()) { break; } tracing::trace(tr_state, "Generated {} view update mutations", updates.size()); auto units = seastar::consume_units(*_config.view_update_concurrency_semaphore, memory_usage_of(updates)); co_await db::view::mutate_MV(base_token, std::move(updates), _view_stats, *_config.cf_stats, tr_state, std::move(units), service::allow_hints::yes, db::view::wait_for_all_updates::no).handle_exception([] (auto ignored) { }); } catch (...) { } } co_await builder.close(); } Nothing special in there, in particular nothing that looks like an array.