[Bug c++/108179] [11/12 regression] ICE related to template template parameters in tsubst, at cp/pt.cc:15782
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108179 --- Comment #12 from CVS Commits --- The releases/gcc-13 branch has been updated by Patrick Palka : https://gcc.gnu.org/g:2c6e76ff039782401f705cacda60c11f8dfac3b1 commit r13-7692-g2c6e76ff039782401f705cacda60c11f8dfac3b1 Author: Patrick Palka Date: Wed Jul 26 17:21:26 2023 -0400 c++: passing partially inst tmpl as ttp [PR110566] Since the template arguments 'pargs' we pass to coerce_template_parms from coerce_template_template_parms are always a full set, we need to make sure we always pass the parameters of the most general template because if the template is partially instantiated then the levels won't match up. In the testcase below during said call to coerce_template_parms the parameters are {X, Y}, both level 1 rather than 2, and the arguments are {{int}, {N, M}}, which results in a crash during auto deduction for parameters' types. PR c++/110566 PR c++/108179 gcc/cp/ChangeLog: * pt.cc (coerce_template_template_parms): Simplify by using DECL_INNERMOST_TEMPLATE_PARMS and removing redundant asserts. Always pass the parameters of the most general template to coerce_template_parms. gcc/testsuite/ChangeLog: * g++.dg/template/ttp38.C: New test. (cherry picked from commit b3adcc60dcf3314f47f5409aecef40607f82b80b)
[Bug c++/108179] [11/12 regression] ICE related to template template parameters in tsubst, at cp/pt.cc:15782
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108179 --- Comment #11 from CVS Commits --- The master branch has been updated by Patrick Palka : https://gcc.gnu.org/g:b8218eb2266811991b8163f36d5c1d974cb50b93 commit r14-2810-gb8218eb2266811991b8163f36d5c1d974cb50b93 Author: Patrick Palka Date: Wed Jul 26 17:21:43 2023 -0400 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.
[Bug c++/108179] [11/12 regression] ICE related to template template parameters in tsubst, at cp/pt.cc:15782
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108179 --- Comment #10 from CVS Commits --- The master branch has been updated by Patrick Palka : https://gcc.gnu.org/g:b3adcc60dcf3314f47f5409aecef40607f82b80b commit r14-2809-gb3adcc60dcf3314f47f5409aecef40607f82b80b Author: Patrick Palka Date: Wed Jul 26 17:21:26 2023 -0400 c++: passing partially inst tmpl as ttp [PR110566] Since the template arguments 'pargs' we pass to coerce_template_parms from coerce_template_template_parms are always a full set, we need to make sure we always pass the parameters of the most general template because if the template is partially instantiated then the levels won't match up. In the testcase below during said call to coerce_template_parms the parameters are {X, Y}, both level 1 rather than 2, and the arguments are {{int}, {N, M}}, which results in a crash during auto deduction for parameters' types. PR c++/110566 PR c++/108179 gcc/cp/ChangeLog: * pt.cc (coerce_template_template_parms): Simplify by using DECL_INNERMOST_TEMPLATE_PARMS and removing redundant asserts. Always pass the parameters of the most general template to coerce_template_parms. gcc/testsuite/ChangeLog: * g++.dg/template/ttp38.C: New test.
[Bug c++/108179] [11/12 regression] ICE related to template template parameters in tsubst, at cp/pt.cc:15782
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108179 --- Comment #9 from Jason Merrill --- This patch caused PR110566.
[Bug c++/108179] [11/12 regression] ICE related to template template parameters in tsubst, at cp/pt.cc:15782
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108179 Jakub Jelinek changed: What|Removed |Added Target Milestone|11.4|11.5 --- Comment #8 from Jakub Jelinek --- GCC 11.4 is being released, retargeting bugs to GCC 11.5.
[Bug c++/108179] [11/12 regression] ICE related to template template parameters in tsubst, at cp/pt.cc:15782
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108179 --- Comment #7 from Jason Merrill --- (In reply to stu t from comment #6) > Thank you for looking into this! :) You're welcome! I'm currently leaning toward backporting this to 12.4 rather than 12.3, but am interested in your thoughts.
[Bug c++/108179] [11/12 regression] ICE related to template template parameters in tsubst, at cp/pt.cc:15782
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108179 --- Comment #6 from stu t --- Thank you for looking into this! :)
[Bug c++/108179] [11/12 regression] ICE related to template template parameters in tsubst, at cp/pt.cc:15782
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108179 Jason Merrill changed: What|Removed |Added Summary|[11/12/13 regression] ICE |[11/12 regression] ICE |related to template |related to template |template parameters in |template parameters in |tsubst, at cp/pt.cc:15782 |tsubst, at cp/pt.cc:15782 --- Comment #5 from Jason Merrill --- Fixed for 13 so far.