https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77852

            Bug ID: 77852
           Summary: ICE when deducing class template arguments for pair or
                    tuple
           Product: gcc
           Version: 7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ville.voutilainen at gmail dot com
  Target Milestone: ---

First test:

#include <utility>

int main()
{
        std::pair x{42, 666};
}

Second test:

#include <tuple>

int main()
{
        std::tuple y{1,2,3};
}

ICE for the first:

c-a-d.cpp: In function ‘int main()’:
c-a-d.cpp:5:21: error: direct-list-initialization of ‘auto’ requires exactly
one element [-fpermissive]
  std::pair x{42, 666};
                     ^
c-a-d.cpp:5:21: note: for deduction to ‘std::initializer_list’, use
copy-list-initialization (i.e. add ‘=’ before the ‘{’)
c-a-d.cpp:5:21: internal compiler error: same canonical type node for different
types _Tp and pair
0x781f7b comptypes(tree_node*, tree_node*, int)
        ../../gcc/cp/typeck.c:1436
0x67fb58 template_args_equal(tree_node*, tree_node*)
        ../../gcc/cp/pt.c:7918
0x67f83f comp_template_args(tree_node*, tree_node*, tree_node**, tree_node**)
        ../../gcc/cp/pt.c:7965
0x68f2f6 spec_hasher::equal(spec_entry*, spec_entry*)
        ../../gcc/cp/pt.c:1652
0x6e2be5 hash_table<spec_hasher, xcallocator>::find_with_hash(spec_entry*
const&, unsigned int)
        ../../gcc/hash-table.h:840
0x6ba9c2 lookup_template_class_1
        ../../gcc/cp/pt.c:8355
0x6ba9c2 lookup_template_class(tree_node*, tree_node*, tree_node*, tree_node*,
int, int)
        ../../gcc/cp/pt.c:8670
0x6d5f6e listify_autos
        ../../gcc/cp/pt.c:24023
0x6d88eb do_auto_deduction(tree_node*, tree_node*, tree_node*, int,
auto_deduction_context)
        ../../gcc/cp/pt.c:24488
0x66f92f cp_finish_decl(tree_node*, tree_node*, bool, tree_node*, int)
        ../../gcc/cp/decl.c:6706
0x76aeec cp_parser_init_declarator
        ../../gcc/cp/parser.c:18987
0x76b594 cp_parser_simple_declaration
        ../../gcc/cp/parser.c:12566
0x76b935 cp_parser_block_declaration
        ../../gcc/cp/parser.c:12442
0x76c3e9 cp_parser_declaration_statement
        ../../gcc/cp/parser.c:12051
0x74ae43 cp_parser_statement
        ../../gcc/cp/parser.c:10603
0x74bdbd cp_parser_statement_seq_opt
        ../../gcc/cp/parser.c:10935
0x74be9f cp_parser_compound_statement
        ../../gcc/cp/parser.c:10889
0x7698a3 cp_parser_function_body
        ../../gcc/cp/parser.c:20997
0x7698a3 cp_parser_ctor_initializer_opt_and_function_body
        ../../gcc/cp/parser.c:21033
0x76a2e1 cp_parser_function_definition_after_declarator
        ../../gcc/cp/parser.c:25785
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <http://gcc.gnu.org/bugs.html> for instructions.

ICE for the second:

c-a-d_2.cpp: In function ‘int main()’:
c-a-d_2.cpp:5:20: error: direct-list-initialization of ‘auto’ requires exactly
one element [-fpermissive]
  std::tuple y{1,2,3};
                    ^
c-a-d_2.cpp:5:20: note: for deduction to ‘std::initializer_list’, use
copy-list-initialization (i.e. add ‘=’ before the ‘{’)
c-a-d_2.cpp:5:20: internal compiler error: same canonical type node for
different types _Tp and tuple
0x781f7b comptypes(tree_node*, tree_node*, int)
        ../../gcc/cp/typeck.c:1436
0x67fb58 template_args_equal(tree_node*, tree_node*)
        ../../gcc/cp/pt.c:7918
0x67f83f comp_template_args(tree_node*, tree_node*, tree_node**, tree_node**)
        ../../gcc/cp/pt.c:7965
0x68f2f6 spec_hasher::equal(spec_entry*, spec_entry*)
        ../../gcc/cp/pt.c:1652
0x6e2b52 hash_table<spec_hasher, xcallocator>::find_with_hash(spec_entry*
const&, unsigned int)
        ../../gcc/hash-table.h:827
0x6ba9c2 lookup_template_class_1
        ../../gcc/cp/pt.c:8355
0x6ba9c2 lookup_template_class(tree_node*, tree_node*, tree_node*, tree_node*,
int, int)
        ../../gcc/cp/pt.c:8670
0x6d5f6e listify_autos
        ../../gcc/cp/pt.c:24023
0x6d88eb do_auto_deduction(tree_node*, tree_node*, tree_node*, int,
auto_deduction_context)
        ../../gcc/cp/pt.c:24488
0x66f92f cp_finish_decl(tree_node*, tree_node*, bool, tree_node*, int)
        ../../gcc/cp/decl.c:6706
0x76aeec cp_parser_init_declarator
        ../../gcc/cp/parser.c:18987
0x76b594 cp_parser_simple_declaration
        ../../gcc/cp/parser.c:12566
0x76b935 cp_parser_block_declaration
        ../../gcc/cp/parser.c:12442
0x76c3e9 cp_parser_declaration_statement
        ../../gcc/cp/parser.c:12051
0x74ae43 cp_parser_statement
        ../../gcc/cp/parser.c:10603
0x74bdbd cp_parser_statement_seq_opt
        ../../gcc/cp/parser.c:10935
0x74be9f cp_parser_compound_statement
        ../../gcc/cp/parser.c:10889
0x7698a3 cp_parser_function_body
        ../../gcc/cp/parser.c:20997
0x7698a3 cp_parser_ctor_initializer_opt_and_function_body
        ../../gcc/cp/parser.c:21033
0x76a2e1 cp_parser_function_definition_after_declarator
        ../../gcc/cp/parser.c:25785
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <http://gcc.gnu.org/bugs.html> for instructions.

Reply via email to