https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118101
--- Comment #3 from GCC Commits <cvs-commit at gcc dot gnu.org> --- The master branch has been updated by Nathaniel Shead <nsh...@gcc.gnu.org>: https://gcc.gnu.org/g:5c0e1879ea639dc527d3928af877d3df985e3f13 commit r15-7084-g5c0e1879ea639dc527d3928af877d3df985e3f13 Author: Nathaniel Shead <nathanielosh...@gmail.com> Date: Mon Jan 20 22:09:22 2025 +1100 c++/modules: Handle mismatching TYPE_CANONICAL when deduping partial specs [PR118101] In r15-4862 we ensured that merging a partial specialisation would properly update its TYPE_CANONICAL. However, this confuses the deduping mechanism, since the canonical type has updated out from under it, causing is_matching_decl to crash when seeing the equivalent types with different TYPE_CANONICAL. This patch solves the issue by forcing structural equality checking for this case; this way mismatching TYPE_CANONICAL doesn't cause issues, but we still can handle the case that the types are legitimately different. PR c++/118101 gcc/cp/ChangeLog: * module.cc (trees_in::decl_value): Use structural equality when deduping partial specs with mismatching canonical types. gcc/testsuite/ChangeLog: * g++.dg/modules/partial-7.h: New test. * g++.dg/modules/partial-7_a.C: New test. * g++.dg/modules/partial-7_b.C: New test. * g++.dg/modules/partial-7_c.C: New test. Signed-off-by: Nathaniel Shead <nathanielosh...@gmail.com>