154042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor// RUN: %clang_cc1 -fsyntax-only -std=c++11 %s -verify 254042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor 354042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregorvoid missing_lambda_declarator() { 454042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor [](){}(); 554042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor} 654042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor 754042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregortemplate<typename T> T get(); 854042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor 954042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregorvoid infer_void_return_type(int i) { 1054042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor if (i > 17) 1154042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor return []() { }(); 1254042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor 1354042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor if (i > 11) 1454042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor return []() { return; }(); 1554042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor 1654042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor return [](int x) { 1754042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor switch (x) { 1854042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor case 0: return get<void>(); 1954042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor case 1: return; 20a0c2b21e0d84ad289781e08e14148da6b8b8b76dDouglas Gregor case 2: return { 1, 2.0 }; // expected-error{{cannot deduce lambda return type from initializer list}} 2154042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor } 2254042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor }(7); 2354042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor} 2454042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor 2554042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregorstruct X { }; 2654042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor 2754042f1bd78f1f1ea86be7d4af541462e127d2edDouglas GregorX infer_X_return_type(X x) { 2854042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor return [&x](int y) { // expected-warning{{omitted result type}} 2954042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor if (y > 0) 3054042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor return X(); 3154042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor else 3254042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor return x; 3354042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor }(5); 3454042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor} 3554042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor 3654042f1bd78f1f1ea86be7d4af541462e127d2edDouglas GregorX infer_X_return_type_fail(X x) { 3754042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor return [x](int y) { // expected-warning{{omitted result type}} 3854042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor if (y > 0) 3954042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor return X(); 404e88df72e690498aeba2dc3d5089388b27be66faDouglas Gregor else 414e88df72e690498aeba2dc3d5089388b27be66faDouglas Gregor return x; // expected-error{{return type 'const X' must match previous return type 'X' when lambda expression has unspecified explicit return type}} 4254042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor }(5); 4354042f1bd78f1f1ea86be7d4af541462e127d2edDouglas Gregor} 4453393f23d8b767f976427a6d45b310bf37dd91c4Douglas Gregor 4553393f23d8b767f976427a6d45b310bf37dd91c4Douglas Gregorstruct Incomplete; // expected-note{{forward declaration of 'Incomplete'}} 4653393f23d8b767f976427a6d45b310bf37dd91c4Douglas Gregorvoid test_result_type(int N) { 4753393f23d8b767f976427a6d45b310bf37dd91c4Douglas Gregor auto l1 = [] () -> Incomplete { }; // expected-error{{incomplete result type 'Incomplete' in lambda expression}} 4853393f23d8b767f976427a6d45b310bf37dd91c4Douglas Gregor 4953393f23d8b767f976427a6d45b310bf37dd91c4Douglas Gregor typedef int vla[N]; 5053393f23d8b767f976427a6d45b310bf37dd91c4Douglas Gregor auto l2 = [] () -> vla { }; // expected-error{{function cannot return array type 'vla' (aka 'int [N]')}} 5153393f23d8b767f976427a6d45b310bf37dd91c4Douglas Gregor} 52