https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79797
Bug ID: 79797
Summary: [5/6/7 Regression] ICE with NSDMI, this pointer and
constexpr
Product: gcc
Version: 7.0
Status: UNCONFIRMED
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 (compiled with -std=c++1y) triggers an ICE
since GCC 5.1.0:
=========================
struct A
{
A* x[1]{(A*)this};
};
constexpr A a{};
=========================
bug.cc:6:15: internal compiler error: in cxx_eval_constant_expression, at
cp/constexpr.c:4477
constexpr A a{};
^
0x83eb95 cxx_eval_constant_expression
../../gcc/gcc/cp/constexpr.c:4477
0x83bad3 cxx_eval_constant_expression
../../gcc/gcc/cp/constexpr.c:4119
0x83d1ca cxx_eval_constant_expression
../../gcc/gcc/cp/constexpr.c:4343
0x83ceb3 cxx_eval_bare_aggregate
../../gcc/gcc/cp/constexpr.c:2686
0x83ceb3 cxx_eval_constant_expression
../../gcc/gcc/cp/constexpr.c:4316
0x83ceb3 cxx_eval_bare_aggregate
../../gcc/gcc/cp/constexpr.c:2686
0x83ceb3 cxx_eval_constant_expression
../../gcc/gcc/cp/constexpr.c:4316
0x8422fe cxx_eval_outermost_constant_expr
../../gcc/gcc/cp/constexpr.c:4615
0x6b6862 store_init_value(tree_node*, tree_node*, vec<tree_node*, va_gc,
vl_embed>**, int)
../../gcc/gcc/cp/typeck2.c:817
0x61242b check_initializer
../../gcc/gcc/cp/decl.c:6365
0x63cc3c cp_finish_decl(tree_node*, tree_node*, bool, tree_node*, int)
../../gcc/gcc/cp/decl.c:7037
0x71b333 cp_parser_init_declarator
../../gcc/gcc/cp/parser.c:19375
0x73f3ec cp_parser_simple_declaration
../../gcc/gcc/cp/parser.c:12772
0x740195 cp_parser_block_declaration
../../gcc/gcc/cp/parser.c:12597
0x7455a4 cp_parser_declaration
../../gcc/gcc/cp/parser.c:12495
0x7471cb cp_parser_declaration_seq_opt
../../gcc/gcc/cp/parser.c:12371
0x7474aa cp_parser_translation_unit
../../gcc/gcc/cp/parser.c:4366
0x7474aa c_parse_file()
../../gcc/gcc/cp/parser.c:38418
0x8a6ad3 c_common_parse_file()
../../gcc/gcc/c-family/c-opts.c:1107
Please submit a full bug report, [etc.]
The code was rejected with a "sorry" message in GCC 4.8 / 4.9:
bug.cc:6:15: in constexpr expansion of 'A()'
bug.cc:6:15: sorry, unimplemented: use of the value of the object being
constructed in a constant expression
constexpr A a{};