https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125284
Bug ID: 125284
Summary: ICE when there are multiple pack expansions of
using-declaration of conversion operators
Product: gcc
Version: 17.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: mital at mitalashok dot co.uk
Target Milestone: ---
<https://godbolt.org/z/jEdh9vM85>:
template<typename T>
struct foo {
operator T();
operator T*();
};
template<typename... T>
struct bar : foo<T>... {
using foo<T>::operator T...;
using foo<T>::operator T*...;
};
bar<int> z;
Output:
../../gcc/test.cpp: In instantiation of ‘struct bar<operator int>’:
../../gcc/test.cpp:13:10: required from here
13 | bar<int> z;
| ^
../../gcc/test.cpp:10:30: internal compiler error: in tsubst, at cp/pt.cc:17299
10 | using foo<T>::operator T*...;
| ^~~
0x29b434b internal_error(char const*, ...)
../../gcc/gcc/diagnostic-global-context.cc:787
0xb2e722 fancy_abort(char const*, int, char const*)
../../gcc/gcc/diagnostics/context.cc:1813
0x8957a7 tsubst(tree_node*, tree_node*, int, tree_node*)
../../gcc/gcc/cp/pt.cc:17299
0xdc7129 tsubst_template_args(tree_node*, tree_node*, int, tree_node*)
../../gcc/gcc/cp/pt.cc:14697
0xdb9fdd tsubst(tree_node*, tree_node*, int, tree_node*)
../../gcc/gcc/cp/pt.cc:17169
0xdc2909 gen_elem_of_pack_expansion_instantiation
../../gcc/gcc/cp/pt.cc:13593
0xdc2909 tsubst_pack_expansion(tree_node*, tree_node*, int, tree_node*)
../../gcc/gcc/cp/pt.cc:14446
0xdc0591 tsubst_decl
../../gcc/gcc/cp/pt.cc:16070
0xdba3b2 tsubst(tree_node*, tree_node*, int, tree_node*)
../../gcc/gcc/cp/pt.cc:17055
0xded6b2 instantiate_class_template(tree_node*)
../../gcc/gcc/cp/pt.cc:13056
0xe64ed9 complete_type(tree_node*)
../../gcc/gcc/cp/typeck.cc:138
0xc0c78d start_decl_1(tree_node*, bool)
../../gcc/gcc/cp/decl.cc:6883
0xc0c78d start_decl_1(tree_node*, bool)
../../gcc/gcc/cp/decl.cc:6862
0xc3171d start_decl(cp_declarator const*, cp_decl_specifier_seq*, int,
tree_node*, tree_node*, tree_node**)
../../gcc/gcc/cp/decl.cc:6849
0xd6ca6a cp_parser_init_declarator
../../gcc/gcc/cp/parser.cc:26275
0xd6ea1b cp_parser_simple_declaration
../../gcc/gcc/cp/parser.cc:18099
0xd7e76f cp_parser_declaration
../../gcc/gcc/cp/parser.cc:17636
0xd811b3 cp_parser_toplevel_declaration
../../gcc/gcc/cp/parser.cc:17740
0xd811b3 cp_parser_translation_unit
../../gcc/gcc/cp/parser.cc:5596
0xd811b3 c_parse_file()
../../gcc/gcc/cp/parser.cc:57549
/gcc/build/libexec/gcc/x86_64-pc-linux-gnu/17.0.0/cc1plus -quiet -imultiarch
x86_64-linux-gnu -D_GNU_SOURCE ../../gcc/test.cpp -quiet -dumpdir a- -dumpbase
test.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -std=c++17
-fsyntax-only -freport-bug -o /dev/null
Please submit a full bug report, with preprocessed source.
This appears to have also happened in GCC13, when pack expansions of
using-declarations was implemented