]> git.ipfire.org Git - thirdparty/gcc.git/commit
c++ modules: partial variable template specializations [PR106826]
authorPatrick Palka <ppalka@redhat.com>
Thu, 22 Sep 2022 12:46:23 +0000 (08:46 -0400)
committerPatrick Palka <ppalka@redhat.com>
Thu, 22 Sep 2022 12:46:23 +0000 (08:46 -0400)
commit32d8123cd6ce87acb557aec230e8359051316f9f
tree17846c76f1efa66fdfaa1a5e08c0d1fbe6266342
parent26607a63da99226a020e3318468139a672a14153
c++ modules: partial variable template specializations [PR106826]

With partial variable template specializations, it looks like we
stream the VAR_DECL (i.e. the DECL_TEMPLATE_RESULT of the corresponding
TEMPLATE_DECL) since process_partial_specialization adds it to the
specializations table, but we end up never streaming the corresponding
TEMPLATE_DECL itself that's reachable only from the primary template's
DECL_TEMPLATE_SPECIALIZATIONS list, which leads to this list being
incomplete on stream-in.

The modules machinery already has special logic for streaming partial
specializations of class templates; this patch attempts to generalize
it to handle those of variable templates as well.

PR c++/106826

gcc/cp/ChangeLog:

* module.cc (trees_out::decl_value): Use get_template_info in
the MK_partial case to handle both VAR_DECL and TYPE_DECL.
(trees_out::key_mergeable): Likewise.
(trees_in::key_mergeable): Likewise.
(has_definition): Consider DECL_INITIAL of a partial variable
template specialization.
(depset::hash::make_dependency): Handle partial variable template
specializations too.

gcc/testsuite/ChangeLog:

* g++.dg/modules/partial-2_a.C: New test.
* g++.dg/modules/partial-2_b.C: New test.
gcc/cp/module.cc
gcc/testsuite/g++.dg/modules/partial-2_a.C [new file with mode: 0644]
gcc/testsuite/g++.dg/modules/partial-2_b.C [new file with mode: 0644]