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 ||"

Reply via email to