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

Reply via email to