]> git.ipfire.org Git - thirdparty/gcc.git/commit
c++: passing partially inst ttp as ttp [PR110566]
authorPatrick Palka <ppalka@redhat.com>
Wed, 26 Jul 2023 21:21:43 +0000 (17:21 -0400)
committerPatrick Palka <ppalka@redhat.com>
Wed, 26 Jul 2023 21:21:43 +0000 (17:21 -0400)
commitb8218eb2266811991b8163f36d5c1d974cb50b93
tree6341b71cb8b21c060ee385bd3ff33dbe981f85df
parentb3adcc60dcf3314f47f5409aecef40607f82b80b
c++: passing partially inst ttp as ttp [PR110566]

The previous fix doesn't work for partially instantiated ttps mainly
because most_general_template is a no-op for them.  This patch fixes
this by giving such ttps a DECL_TEMPLATE_INFO (extending the
r11-734-g2fb595f8348e16 fix) with which most_general_template can obtain
the original, unlowered ttp.

This patch additionally makes coerce_template_template_parms use the
correct amount of levels from the scope of a ttp argument.

PR c++/110566
PR c++/108179

gcc/cp/ChangeLog:

* pt.cc (reduce_template_parm_level): Set DECL_TEMPLATE_INFO
on the DECL_TEMPLATE_RESULT of the new ttp.
(add_defaults_to_ttp): Make a copy of the original ttp's
DECL_TEMPLATE_RESULT, and update this copy's DECL_TEMPLATE_INFO
as well.
(coerce_template_template_parms): Make sure 'scope_args' has
the right amount of levels for the ttp argument.
(most_general_template): Handle template template parameters.
(rewrite_template_parm): Set DECL_TEMPLATE_RESULT on the
DECL_TEMPLATE_RESULT of the new ttp.

gcc/testsuite/ChangeLog:

* g++.dg/cpp1z/class-deduction115.C: New test.
* g++.dg/template/ttp39.C: New test.
gcc/cp/pt.cc
gcc/testsuite/g++.dg/cpp1z/class-deduction115.C [new file with mode: 0644]
gcc/testsuite/g++.dg/template/ttp39.C [new file with mode: 0644]