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

Reply via email to