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

            Bug ID: 89522
           Summary: [8/9 Regression] ICE: trying to capture 'f' in
                    instantiation of generic lambda
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: gs...@t-online.de
  Target Milestone: ---

Changed between 20190113 (error) and 20190120 (ICE) :


$ cat z1.cc
template <typename F>
void foo (F f)
{
  f (1);
}
template <typename T>
void bar (T)
{
  auto f = [&](auto i) { if (f); };
  foo (f);
}
int main ()
{
  bar (0);
}


$ g++-9-20190224 -c z1.cc
z1.cc: In instantiation of 'bar(T) [with T = int]::<lambda(auto:1)> [with
auto:1 = int]':
z1.cc:4:5:   required from 'void foo(F) [with F = bar(T) [with T =
int]::<lambda(auto:1)>]'
z1.cc:10:7:   required from 'void bar(T) [with T = int]'
z1.cc:14:9:   required from here
z1.cc:9:30: internal compiler error: trying to capture 'f' in instantiation of
generic lambda
    9 |   auto f = [&](auto i) { if (f); };
      |                              ^
0x723c84 add_capture(tree_node*, tree_node*, tree_node*, bool, bool)
        ../../gcc/cp/lambda.c:640
0x723fda add_default_capture(tree_node*, tree_node*, tree_node*)
        ../../gcc/cp/lambda.c:702
0x7ef00c tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
        ../../gcc/cp/pt.c:19413
0x7ef07d tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
        ../../gcc/cp/pt.c:19529
0x7d531e tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/cp/pt.c:17843
0x7d4a9d tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/cp/pt.c:17195
0x7d51b9 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/cp/pt.c:17250
0x7d51b9 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/cp/pt.c:17250
0x7d51b9 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/cp/pt.c:17250
0x817014 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/cp/pt.c:16934
0x817014 instantiate_decl(tree_node*, bool, bool)
        ../../gcc/cp/pt.c:24661
0x6ef157 maybe_instantiate_decl
        ../../gcc/cp/decl2.c:5286
0x6f1f3c mark_used(tree_node*, int)
        ../../gcc/cp/decl2.c:5442
0x62754c build_over_call
        ../../gcc/cp/call.c:8552
0x639d38 build_op_call_1
        ../../gcc/cp/call.c:4671
0x639d38 build_op_call(tree_node*, vec<tree_node*, va_gc, vl_embed>**, int)
        ../../gcc/cp/call.c:4700
0x83c1f3 finish_call_expr(tree_node*, vec<tree_node*, va_gc, vl_embed>**, bool,
bool, int)
        ../../gcc/cp/semantics.c:2586
0x7f0363 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
        ../../gcc/cp/pt.c:19018
0x7d531e tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/cp/pt.c:17843
0x7d50a6 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/cp/pt.c:16963

Reply via email to