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" }
+  }
+};

Reply via email to