]> 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:10:02 +0000 (16:10 -0400)
commit22bdc4d9dd7fd20b4745e810534299bca27c6943
tree92ccc8768a18ad9c97779ce3d5f49ca172def167
parenta9f88741a99ba09b29cc0021499c63ca445393f0
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>
(cherry picked from commit 6751bd4ac48a8529e2476a6848a77e81de540814)
gcc/cp/pt.cc
gcc/testsuite/g++.dg/cpp0x/alias-decl-variadic3.C [new file with mode: 0644]