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{};