https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65339
Bug ID: 65339 Summary: [5 Regression] C++ ICE with lambda and no capture list Product: gcc Version: 5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: aldyh at gcc dot gnu.org ./cc1plus a.ii -fdump-tree-all -quiet -I/tmp -std=c++11 a.ii: In static member function ‘static Object Object::Method()::<lambda()>::_FUN()’: a.ii:22:3: internal compiler error: Segmentation fault }); ^ 0xf462c2 crash_signal /source/gcc/gcc/toplev.c:383 0x697de7 contains_struct_check(tree_node*, tree_node_structure_enum, char const*, int, char const*) /source/gcc/gcc/tree.h:2959 0x91da6a lambda_expr_this_capture(tree_node*, bool) /source/gcc/gcc/cp/lambda.c:752 0x91dd46 maybe_resolve_dummy(tree_node*, bool) /source/gcc/gcc/cp/lambda.c:789 0x6b4f06 build_new_method_call_1 /source/gcc/gcc/cp/call.c:8023 0x6b6280 build_new_method_call(tree_node*, tree_node*, vec<tree_node*, va_gc, vl_embed>**, tree_node*, int, tree_node**, int) /source/gcc/gcc/cp/call.c:8271 0x6b4216 build_special_member_call(tree_node*, tree_node*, vec<tree_node*, va_gc, vl_embed>**, tree_node*, int, int) /source/gcc/gcc/cp/call.c:7815 0x6ac5bf build_temp ... ... $ cat a.ii class FuncWrapper { public: template <typename Func> void callfunc(Func f) { f(); } }; class Object { int field; public: void Method(); Object() { field = 555; } }; void Object::Method () { FuncWrapper wrap; wrap.callfunc([]() { return Object(); }); } Notice the empty cature list. We are hitting lambda_expr_this_capture() with current_class_ref == NULL: /* To make sure that current_class_ref is for the lambda. */ gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref)) == LAMBDA_EXPR_CLOSURE (lambda)); Perhaps we can add "!current_class_ref ||"