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

            Bug ID: 85136
           Summary: ICE with array as template variable
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Keywords: ice-on-valid-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 valid code snippet triggers an ICE since GCC 5.1.0
(when variable templates were introduced):

================================================
enum { e };

template<int> const int x[] = { [e] = 0 };
================================================

bug.cc:3:41: internal compiler error: tree check: expected integer_cst, have
nop_expr in get_len, at tree.h:5572
 template<int> const int x[] = { [e] = 0 };
                                         ^
0x78c8a6 tree_check_failed(tree_node const*, char const*, int, char const*,
...)
        ../../gcc/gcc/tree.c:9322
0x67da95 tree_check(tree_node const*, char const*, int, char const*, tree_code)
        ../../gcc/gcc/tree.h:3391
0x67da95 wi::extended_tree<192>::get_len() const
        ../../gcc/gcc/tree.h:5572
0x67da95 wi::int_traits<generic_wide_int<wi::extended_tree<192> >
>::decompose(long*, unsigned int, generic_wide_int<wi::extended_tree<192> >
const&)
        ../../gcc/gcc/wide-int.h:934
0x67da95 wide_int_ref_storage<true,
false>::wide_int_ref_storage<generic_wide_int<wi::extended_tree<192> >
>(generic_wide_int<wi::extended_tree<192> > const&, unsigned int)
        ../../gcc/gcc/wide-int.h:983
0x67da95 generic_wide_int<wide_int_ref_storage<true, false>
>::generic_wide_int<generic_wide_int<wi::extended_tree<192> >
>(generic_wide_int<wi::extended_tree<192> > const&, unsigned int)
        ../../gcc/gcc/wide-int.h:758
0x67da95 bool wi::lts_p<generic_wide_int<wi::extended_tree<192> >,
generic_wide_int<wi::extended_tree<192> >
>(generic_wide_int<wi::extended_tree<192> > const&,
generic_wide_int<wi::extended_tree<192> > const&)
        ../../gcc/gcc/wide-int.h:1849
0x67da95 wi::binary_traits<generic_wide_int<wi::extended_tree<192> >,
generic_wide_int<wi::extended_tree<192> >,
wi::int_traits<generic_wide_int<wi::extended_tree<192> > >::precision_type,
wi::int_traits<generic_wide_int<wi::extended_tree<192> >
>::precision_type>::signed_predicate_result operator<
<generic_wide_int<wi::extended_tree<192> >,
generic_wide_int<wi::extended_tree<192> >
>(generic_wide_int<wi::extended_tree<192> > const&,
generic_wide_int<wi::extended_tree<192> > const&)
        ../../gcc/gcc/wide-int.h:3170
0x67da95 tree_int_cst_lt(tree_node const*, tree_node const*)
        ../../gcc/gcc/tree.h:5728
0x67da95 complete_array_type(tree_node**, tree_node*, bool)
        ../../gcc/gcc/c-family/c-common.c:6363
0x887821 cp_complete_array_type(tree_node**, tree_node*, bool)
        ../../gcc/gcc/cp/decl.c:8369
0x887a4e maybe_deduce_size_from_array_init
        ../../gcc/gcc/cp/decl.c:5474
0x8a047c cp_finish_decl(tree_node*, tree_node*, bool, tree_node*, int)
        ../../gcc/gcc/cp/decl.c:7030
0x93c9fb cp_parser_init_declarator
        ../../gcc/gcc/cp/parser.c:19741
0x942fca cp_parser_single_declaration
        ../../gcc/gcc/cp/parser.c:27303
0x94310c cp_parser_template_declaration_after_parameters
        ../../gcc/gcc/cp/parser.c:26905
0x9439cc cp_parser_explicit_template_declaration
        ../../gcc/gcc/cp/parser.c:27142
0x9439cc cp_parser_template_declaration_after_export
        ../../gcc/gcc/cp/parser.c:27161
0x948d69 cp_parser_declaration
        ../../gcc/gcc/cp/parser.c:12731
0x949051 cp_parser_declaration_seq_opt
        ../../gcc/gcc/cp/parser.c:12658
Please submit a full bug report, [etc.]

Reply via email to