https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114947
Bug ID: 114947 Summary: [modules] ICE when processing class-scope constrained partial specialisations 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 Target Milestone: --- The following code ICEs on trunk: // part.cpp module M:part; struct A { template <typename> struct R; template <typename T> requires false struct R<T>; template <typename T> requires true struct R<T>; }; template <typename T> int foo(T, int); template <typename T> int foo(T, A); void go() { foo(0, 0); } // m.cpp export module M; export import :part; This is ultimately because 'set_defining_module' is not called on the partial specialisation declarations of R. This is a regression since r15-101, found while reducing the following testcase that also ICEs even before this change: // a.cpp module; #include <format> export module M:a; // b.cpp module; #include <format> export module M:b; // m.cpp export module M; export import :a; export import :b;