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.

Reply via email to