https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118630
Bug ID: 118630 Summary: [modules] ICE in sort_cluster when streaming decltype(lambda) return type Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: nshead at gcc dot gnu.org Blocks: 103524 Target Milestone: --- The following sample: export module M; template <typename> decltype([]{}) f(); ICEs on current trunk when compiled with 'g++ -fmodules -std=c++20'. It hits the checking-only assertion here (added in r15-4861): --- a/gcc/cp/module.cc +++ b/gcc/cp/module.cc @@ -14909,21 +14909,21 @@ sort_cluster (depset::hash *original, depset *scc[], unsigned size) { gcc_checking_assert (order[ix]->is_special ()); bool tight = order[ix]->cluster == cluster; depset *dep = order[ix]->deps[0]; dump (dumper::MERGE) && dump ("Mergeable %u is %N%s%s", ix, dep->get_entity (), tight ? " (tight)" : "", dep->is_entry () ? " (entry)" : ""); scc[ix] = dep; if (tight) { ! gcc_checking_assert (dep->is_maybe_recursive ()); if (dep->is_entry ()) { /* There should only be one entry dep in a cluster. */ gcc_checking_assert (!scc[entry_pos]->is_entry ()); gcc_checking_assert (scc[entry_pos]->is_maybe_recursive ()); scc[ix] = scc[entry_pos]; scc[entry_pos] = dep; } } else Without this assertion failure streaming seems to proceed correctly for this specific case, but it's indicative of a potential underlying issue. Referenced Bugs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103524 [Bug 103524] [meta-bug] modules issue