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