On 11 October 2015 at 20:05, Ville Voutilainen <ville.voutilai...@gmail.com> wrote: > Tested on Linux-PPC64. > > /cp > 2015-10-11 Ville Voutilainen <ville.voutilai...@gmail.com> > > PR c++/58566 > * lambda.c (lambda_return_type): Return error_mark_node > instead of void_type_node for the error cases. > > /testsuite > 2015-10-11 Ville Voutilainen <ville.voutilai...@gmail.com> > > PR c++/58566 > * g++.dg/cpp0x/lambda/lambda-58566.C: New.
..and now with the actual patch attached. :)
diff --git a/gcc/cp/lambda.c b/gcc/cp/lambda.c index ceab646..b4f19af 100644 --- a/gcc/cp/lambda.c +++ b/gcc/cp/lambda.c @@ -175,7 +175,7 @@ lambda_return_type (tree expr) || BRACE_ENCLOSED_INITIALIZER_P (expr)) { cxx_incomplete_type_error (expr, TREE_TYPE (expr)); - return void_type_node; + return error_mark_node; } gcc_checking_assert (!type_dependent_expression_p (expr)); return cv_unqualified (type_decays_to (unlowered_expr_type (expr))); diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-58566.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-58566.C new file mode 100644 index 0000000..3101d0a --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-58566.C @@ -0,0 +1,10 @@ +// PR c++/58566 +// { dg-do compile { target c++11 } } + +struct A +{ + int foo() + { + [this]{ return foo; }; // { dg-error "invalid use of member function|cannot convert" } + } +};