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

            Bug ID: 89217
           Summary: ICE tree check: expected constructor, have error_mark
                    in split_nonconstant_init_1
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: mawww at kakoune dot org
  Target Milestone: ---

Created attachment 45613
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=45613&action=edit
Source file that triggers the bug.

Compiling the following source (attached as well):

struct R {};

struct C
{
    R* begin() const { return &r; }
    R* end() const { return &r; }

    R& r;
};

struct S
{
    void f1() { f2<true>(); }

    template<bool>
    void f2()
    {
        for (auto i : C{r}) {}
    }

    R& r;
};


Leads to an internal compiler error:

test.cc: In instantiation of ‘void S::f2() [with bool <anonymous> = true]’:
test.cc:13:26:   required from here
test.cc:18:9: error: cannot convert ‘((S*)this)->S::r’ from type ‘R’ to type
‘R*’
   18 |         for (auto i : C{r}) {}
      |         ^~~
test.cc:18:9: internal compiler error: tree check: expected constructor, have
error_mark in split_nonconstant_init_1, at cp/typeck2.c:635
0x7bb804 tree_check_failed(tree_node const*, char const*, int, char const*,
...)
        ../.././gcc/tree.c:9813
0x671510 tree_check(tree_node*, char const*, int, char const*, tree_code)
        ../.././gcc/tree.h:3176
0x671510 split_nonconstant_init_1
        ../.././gcc/cp/typeck2.c:635
0xa5fced split_nonconstant_init(tree_node*, tree_node*)
        ../.././gcc/cp/typeck2.c:760
0x896f15 set_up_extended_ref_temp
        ../.././gcc/cp/call.c:11297
0x896f15 extend_ref_init_temps_1
        ../.././gcc/cp/call.c:11434
0xa628a7 store_init_value(tree_node*, tree_node*, vec<tree_node*, va_gc,
vl_embed>**, int)
        ../.././gcc/cp/typeck2.c:833
0x8f07c2 check_initializer
        ../.././gcc/cp/decl.c:6508
0x91079c cp_finish_decl(tree_node*, tree_node*, bool, tree_node*, int)
        ../.././gcc/cp/decl.c:7184
0x9804b1 cp_convert_range_for(tree_node*, tree_node*, tree_node*, tree_node*,
unsigned int, bool, unsigned short)
        ../.././gcc/cp/parser.c:12361
0x9cf457 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../.././gcc/cp/pt.c:17116
0x9cc449 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../.././gcc/cp/pt.c:17212
0x9cbdce tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../.././gcc/cp/pt.c:16896
0x9cbdce instantiate_decl(tree_node*, bool, bool)
        ../.././gcc/cp/pt.c:24584
0xa01f3b instantiate_pending_templates(int)
        ../.././gcc/cp/pt.c:24700
0x9200f0 c_parse_final_cleanups()
        ../.././gcc/cp/decl2.c:4792

Reply via email to