Index: lib/Parse/ParseExprCXX.cpp
===================================================================
--- lib/Parse/ParseExprCXX.cpp	(revision 162792)
+++ lib/Parse/ParseExprCXX.cpp	(working copy)
@@ -803,6 +803,11 @@
       TrailingReturnType = ParseTrailingReturnType(Range);
       if (Range.getEnd().isValid())
         DeclEndLoc = Range.getEnd();
+
+      // If the trailing return type is invalid, pretend it is void. We have
+      // already diagnosed the missing type.
+      if (TrailingReturnType.isInvalid())
+        TrailingReturnType = TypeResult();
     }
 
     PrototypeScope.Exit();
@@ -849,6 +854,11 @@
       TrailingReturnType = ParseTrailingReturnType(Range);
       if (Range.getEnd().isValid())
         DeclEndLoc = Range.getEnd();      
+
+      // If the trailing return type is invalid, pretend it is void. We have
+      // already diagnosed the missing type.
+      if (TrailingReturnType.isInvalid())
+        TrailingReturnType = TypeResult();
     }
 
     ParsedAttributes Attr(AttrFactory);
Index: test/Parser/cxx0x-lambda-expressions.cpp
===================================================================
--- test/Parser/cxx0x-lambda-expressions.cpp	(revision 162792)
+++ test/Parser/cxx0x-lambda-expressions.cpp	(working copy)
@@ -14,6 +14,7 @@
     [&this] {}; // expected-error {{'this' cannot be captured by reference}}
     [&,] {}; // expected-error {{expected variable name or 'this' in lambda capture list}}
     [=,] {}; // expected-error {{expected variable name or 'this' in lambda capture list}}
+    [](int) -> {}; // expected-error {{expected a type}}
     [] {}; 
     [=] (int i) {}; 
     [&] (int) mutable -> void {}; 
