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

            Bug ID: 85112
           Summary: [8 Regression] ICE with invalid constexpr
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Keywords: error-recovery, ice-on-invalid-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 invalid code snippet triggers an ICE on trunk:

===============================
struct A
{
  int m;
  int n : 4;
};

int i;

void foo()
{
  constexpr int j = i;
  A a;
  a.n = j;
}
===============================

bug.cc: In function 'void foo()':
bug.cc:11:21: error: the value of 'i' is not usable in a constant expression
   constexpr int j = i;
                     ^
bug.cc:7:5: note: 'int i' is not const
 int i;
     ^
bug.cc:13:7: internal compiler error: tree check: expected class 'type', have
'exceptional' (error_mark) in useless_type_conversion_p, at gimple-expr.c:86
   a.n = j;
   ~~~~^~~
0x78cafe tree_class_check_failed(tree_node const*, tree_code_class, char
const*, int, char const*)
        ../../gcc/gcc/tree.c:9372
0x6ce53d tree_class_check(tree_node*, tree_code_class, char const*, int, char
const*)
        ../../gcc/gcc/tree.h:3258
0x6ce53d useless_type_conversion_p(tree_node*, tree_node*)
        ../../gcc/gcc/gimple-expr.c:86
0x10bc78a tree_ssa_strip_useless_type_conversions(tree_node*)
        ../../gcc/gcc/tree-ssa.c:1253
0xc645a7 gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*),
int)
        ../../gcc/gcc/gimplify.c:11330
0xc74513 gimplify_modify_expr
        ../../gcc/gcc/gimplify.c:5625
0xc65c10 gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*),
int)
        ../../gcc/gcc/gimplify.c:11434
0xc68d16 gimplify_stmt(tree_node**, gimple**)
        ../../gcc/gcc/gimplify.c:6658
0xc66bb2 gimplify_cleanup_point_expr
        ../../gcc/gcc/gimplify.c:6399
0xc66bb2 gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*),
int)
        ../../gcc/gcc/gimplify.c:11811
0xc68d16 gimplify_stmt(tree_node**, gimple**)
        ../../gcc/gcc/gimplify.c:6658
0xc664bb gimplify_statement_list
        ../../gcc/gcc/gimplify.c:1764
0xc664bb gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*),
int)
        ../../gcc/gcc/gimplify.c:11863
0xc68d16 gimplify_stmt(tree_node**, gimple**)
        ../../gcc/gcc/gimplify.c:6658
0xc69a3c gimplify_bind_expr
        ../../gcc/gcc/gimplify.c:1331
0xc66b2a gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*),
int)
        ../../gcc/gcc/gimplify.c:11635
0xc68d16 gimplify_stmt(tree_node**, gimple**)
        ../../gcc/gcc/gimplify.c:6658
0xc6a70a gimplify_body(tree_node*, bool)
        ../../gcc/gcc/gimplify.c:12635
0xc6ac04 gimplify_function_tree(tree_node*)
        ../../gcc/gcc/gimplify.c:12800
0xaef847 cgraph_node::analyze()
        ../../gcc/gcc/cgraphunit.c:670
Please submit a full bug report, [etc.]

The regression was introduced between 2017-06-06 and 2017-06-10.

Reply via email to