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.]