https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68359
Bug ID: 68359 Summary: ice: tree check: expected integer_cst, have nop_expr in get_len Product: gcc Version: 6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: adam at os dot inf.tu-dresden.de Target Milestone: --- With gcc version 6.0.0 20151115 (experimental) (GCC), x86_64: $ cat t.i struct G {}; struct L { enum class T { S } t; G f() const { switch (t) { case T::S: return G(); } } }; $ g++ -c t.i t.i: In member function ‘G L::f() const’: t.i:10:15: internal compiler error: tree check: expected integer_cst, have nop_expr in get_len, at tree.h:5167 case T::S: return G(); ^ 0xf534ec tree_check_failed(tree_node const*, char const*, int, char const*, ...) ../../gcc/gcc/tree.c:9587 0x8502b8 tree_check(tree_node const*, char const*, int, char const*, tree_code) ../../gcc/gcc/tree.h:3212 0x8502b8 wi::extended_tree<192>::get_len() const ../../gcc/gcc/tree.h:5167 0x8502b8 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:898 0x8502b8 wide_int_ref_storage<true>::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:945 0x8502b8 generic_wide_int<wide_int_ref_storage<true> >::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:722 0x8502b8 int wi::cmps<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:1900 0x8502b8 tree_int_cst_compare(tree_node const*, tree_node const*) ../../gcc/gcc/tree.h:5236 0x8502b8 c_add_case_label(unsigned int, splay_tree_s*, tree_node*, tree_node*, tree_node*, tree_node*, bool*) ../../gcc/gcc/c-family/c-common.c:6633 0x5f07e3 finish_case_label(unsigned int, tree_node*, tree_node*) ../../gcc/gcc/cp/decl.c:3417 0x6fec62 cp_parser_label_for_labeled_statement ../../gcc/gcc/cp/parser.c:10259 0x711c00 cp_parser_statement ../../gcc/gcc/cp/parser.c:10132 0x712fc1 cp_parser_statement_seq_opt ../../gcc/gcc/cp/parser.c:10456 0x7130c3 cp_parser_compound_statement ../../gcc/gcc/cp/parser.c:10410 0x71a8fd cp_parser_implicitly_scoped_statement ../../gcc/gcc/cp/parser.c:11550 0x712404 cp_parser_selection_statement ../../gcc/gcc/cp/parser.c:10632 0x712404 cp_parser_statement ../../gcc/gcc/cp/parser.c:10040 0x712fc1 cp_parser_statement_seq_opt ../../gcc/gcc/cp/parser.c:10456 0x7130c3 cp_parser_compound_statement ../../gcc/gcc/cp/parser.c:10410 0x713250 cp_parser_function_body ../../gcc/gcc/cp/parser.c:20225 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. The ICE goes away when removing the 'const'. The code works/compiles with gcc <= 5 and with gcc6 about a week old.