]> git.ipfire.org Git - thirdparty/gcc.git/commit
c++: ICE when substituting packs into type aliases [PR118104]
authorMarek Polacek <polacek@redhat.com>
Mon, 17 Mar 2025 16:56:40 +0000 (12:56 -0400)
committerMarek Polacek <polacek@redhat.com>
Tue, 18 Mar 2025 20:09:04 +0000 (16:09 -0400)
commit6751bd4ac48a8529e2476a6848a77e81de540814
tree5c5957dc2f10e2a8a381c72eafbee0f1426c4272
parent57d1424efe934caeda222174a3e8bbc1e5ba65f4
c++: ICE when substituting packs into type aliases [PR118104]

r12-1094 mentions that adding the assert didn't lead to any regressions
in the testsuite, but this test case demonstrates that we can reach it
with valid code.

Here we arrive in use_pack_expansion_extra_args_p with t which is an
expansion whose pattern is void(Ts, Us) and tparm packs are {Us, Ts},
and parm_packs is { Ts -> <int, int>, Us -> <A, P...> }.  We want to
expand the pack into void(int, A) and void(int, P...).  We compare
int to A, which is fine, but then int to P... which crashes.  But
the code is valid so this patch removes the assert.

PR c++/118104

gcc/cp/ChangeLog:

* pt.cc (use_pack_expansion_extra_args_p): Remove an assert.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/alias-decl-variadic3.C: New test.

Reviewed-by: Jason Merrill <jason@redhat.com>
gcc/cp/pt.cc
gcc/testsuite/g++.dg/cpp0x/alias-decl-variadic3.C [new file with mode: 0644]