https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122310
--- Comment #3 from GCC Commits <cvs-commit at gcc dot gnu.org> --- The master branch has been updated by Nathaniel Shead <[email protected]>: https://gcc.gnu.org/g:8212abbeffa69f143808e126f40c67f3eb7e7844 commit r16-4671-g8212abbeffa69f143808e126f40c67f3eb7e7844 Author: Nathaniel Shead <[email protected]> Date: Sat Oct 18 23:43:14 2025 +1100 c++/modules: Use containing type as key for all member lambdas [PR122310] The ICE in the linked PR occurs because we first stream the lambda type before its keyed decl has been streamed, but the key decl's type depends on the lambda. And so when streaming the key decl to check for an existing decl to merge with, merging the key decl itself crashes because its type has only been partially streamed. This patch fixes the issue by generalising the existing FIELD_DECL handling to any class member using the outermost containing TYPE_DECL as its key type. This way we can guarantee that the key decl has been streamed before the lambda type is otherwise needed. PR c++/122310 gcc/cp/ChangeLog: * module.cc (get_keyed_decl_scope): New function. (trees_out::get_merge_kind): Use it. (trees_out::key_mergeable): Use it. (maybe_key_decl): Key to the containing type for all members. gcc/testsuite/ChangeLog: * g++.dg/modules/lambda-12.h: New test. * g++.dg/modules/lambda-12_a.H: New test. * g++.dg/modules/lambda-12_b.C: New test. Signed-off-by: Nathaniel Shead <[email protected]> Reviewed-by: Jason Merrill <[email protected]>
