https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84808
Bug ID: 84808 Summary: [8 Regression] ICE with constexpr and array Product: gcc Version: 8.0.1 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 on trunk: ================================= struct A { int i; constexpr A() : i() {} }; struct B { A a[8]; }; constexpr int foo(int n) { B b; ++b.a[n+2].i; ++b.a[n].i; return 0; } constexpr int i = foo(2); ================================= bug.cc:20:22: in 'constexpr' expansion of 'foo(2)' bug.cc:20:24: internal compiler error: Segmentation fault constexpr int i = foo(2); ^ 0xeb9a7f crash_signal ../../gcc/gcc/toplev.c:325 0x84e8e3 find_constructor ../../gcc/gcc/cp/constexpr.c:1255 0x116183b walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, default_hash_traits<tree_node*> >*, tree_node* (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, default_hash_traits<tree_node*> >*)) ../../gcc/gcc/tree.c:11400 0x84ee9e unshare_constructor ../../gcc/gcc/cp/constexpr.c:1268 0x853c1d find_array_ctor_elt ../../gcc/gcc/cp/constexpr.c:2257 0x859cef cxx_eval_store_expression ../../gcc/gcc/cp/constexpr.c:3633 0x8571df cxx_eval_constant_expression ../../gcc/gcc/cp/constexpr.c:4262 0x856986 cxx_eval_increment_expression ../../gcc/gcc/cp/constexpr.c:3789 0x856986 cxx_eval_constant_expression ../../gcc/gcc/cp/constexpr.c:4670 0x85777f cxx_eval_constant_expression ../../gcc/gcc/cp/constexpr.c:4566 0x8562a7 cxx_eval_constant_expression ../../gcc/gcc/cp/constexpr.c:4310 0x8562a7 cxx_eval_constant_expression ../../gcc/gcc/cp/constexpr.c:4310 0x856ed1 cxx_eval_statement_list ../../gcc/gcc/cp/constexpr.c:3912 0x856ed1 cxx_eval_constant_expression ../../gcc/gcc/cp/constexpr.c:4657 0x85623d cxx_eval_constant_expression ../../gcc/gcc/cp/constexpr.c:4661 0x855472 cxx_eval_call_expression ../../gcc/gcc/cp/constexpr.c:1700 0x85625b cxx_eval_constant_expression ../../gcc/gcc/cp/constexpr.c:4184 0x85b8e7 cxx_eval_outermost_constant_expr ../../gcc/gcc/cp/constexpr.c:4833 0x85e596 maybe_constant_value(tree_node*, tree_node*) ../../gcc/gcc/cp/constexpr.c:5051 0x9f2729 store_init_value(tree_node*, tree_node*, vec<tree_node*, va_gc, vl_embed>**, int) ../../gcc/gcc/cp/typeck2.c:825 Please submit a full bug report, [etc.] The regression was introduced between 2018-02-07 and 2018-02-15. The bug depends on the size of the array B::a and the value passed into foo. Due to this fragile behavior, it might be that the bug was latent before.