[Bug c++/85264] New: [7/8 Regression] ICE with extraneous template parameter list
reichelt at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Apr 6 15:41:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85264
Bug ID: 85264
Summary: [7/8 Regression] ICE with extraneous template
parameter list
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Keywords: accepts-invalid, ice-on-invalid-code
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: reichelt at gcc dot gnu.org
Target Milestone: ---
The following invalid code snippet triggers an ICE since GCC 7.1.0:
=========================================================
template<typename> struct A {};
template<int>
template<typename... T> struct A<void(T...)> {};
A<void(int)> a;
=========================================================
bug.cc: In substitution of 'template<int <anonymous> > template<class ... T>
struct A<void(T ...)> [with T = <missing>; int <anonymous> = {int}]':
bug.cc:6:14: required from here
bug.cc:6:14: internal compiler error: in tsubst_pack_expansion, at
cp/pt.c:11875
A<void(int)> a;
^
0x644533 tsubst_pack_expansion(tree_node*, tree_node*, int, tree_node*)
../../gcc/gcc/cp/pt.c:11875
0x96952a tsubst_arg_types
../../gcc/gcc/cp/pt.c:13549
0x96973d tsubst_function_type
../../gcc/gcc/cp/pt.c:13711
0x96a1c3 tsubst(tree_node*, tree_node*, int, tree_node*)
../../gcc/gcc/cp/pt.c:14440
0x979422 tsubst_template_args
../../gcc/gcc/cp/pt.c:12137
0x96a855 tsubst(tree_node*, tree_node*, int, tree_node*)
../../gcc/gcc/cp/pt.c:14301
0x986c57 get_partial_spec_bindings
../../gcc/gcc/cp/pt.c:22385
0x987176 most_specialized_partial_spec
../../gcc/gcc/cp/pt.c:22618
0x99107f instantiate_class_template_1
../../gcc/gcc/cp/pt.c:10567
0x99107f instantiate_class_template(tree_node*)
../../gcc/gcc/cp/pt.c:11100
0x9d8b6d complete_type(tree_node*)
../../gcc/gcc/cp/typeck.c:136
0x885e67 start_decl_1(tree_node*, bool)
../../gcc/gcc/cp/decl.c:5275
0x8ac107 start_decl(cp_declarator const*, cp_decl_specifier_seq*, int,
tree_node*, tree_node*, tree_node**)
../../gcc/gcc/cp/decl.c:5238
0x93d1b3 cp_parser_init_declarator
../../gcc/gcc/cp/parser.c:19610
0x944988 cp_parser_simple_declaration
../../gcc/gcc/cp/parser.c:13049
0x945798 cp_parser_block_declaration
../../gcc/gcc/cp/parser.c:12874
0x949722 cp_parser_declaration
../../gcc/gcc/cp/parser.c:12772
0x949b31 cp_parser_declaration_seq_opt
../../gcc/gcc/cp/parser.c:12648
0x949e24 cp_parser_translation_unit
../../gcc/gcc/cp/parser.c:4563
0x949e24 c_parse_file()
../../gcc/gcc/cp/parser.c:39029
Please submit a full bug report, [etc.]
Before, the code was wrongly accepted.
If I use regular template parameters instead of parameter packs, the code
is also wrongly accepted (since at least GCC 3.1.1).
More information about the Gcc-bugs
mailing list