// RUN: %clang_cc1 -fsyntax-only -std=c++11 %s -verify
// RUN: %clang_cc1 -fsyntax-only -std=c++1y %s -verify -DCPP1Y

void missing_lambda_declarator() {
  [](){}();
}

template<typename T> T get();

void infer_void_return_type(int i) {
  if (i > 17)
    return []() { }();

  if (i > 11)
    return []() { return; }();

  return [](int x) {
    switch (x) {
    case 0: return get<void>();
    case 1: return;
    case 2: return { 1, 2.0 }; //expected-error{{cannot deduce}}
    }
  }(7);
}

struct X { };

X infer_X_return_type(X x) {
  return [&x](int y) {
    if (y > 0)
      return X();
    else
      return x;
  }(5);
}

X infer_X_return_type_2(X x) {
  return [x](int y) {
    if (y > 0)
      return X();
    else
      return x; // ok even in c++11, per dr1048.
  }(5);
}

struct Incomplete; // expected-note 2{{forward declaration of 'Incomplete'}}
void test_result_type(int N) {  // expected-note {{declared here}}
  auto l1 = [] () -> Incomplete { }; // expected-error{{incomplete result type 'Incomplete' in lambda expression}}

  typedef int vla[N]; // expected-warning {{variable length arrays in C++ are a Clang extension}} \
                         expected-note {{function parameter 'N' with unknown value cannot be used in a constant expression}}
  auto l2 = [] () -> vla { }; // expected-error{{function cannot return array type 'vla' (aka 'int[N]')}}
}

template <typename T>
void test_result_type_tpl(int N) { // expected-note 2{{declared here}}
  auto l1 = []() -> T {}; // expected-error{{incomplete result type 'Incomplete' in lambda expression}}
  typedef int vla[N]; // expected-warning 2{{variable length arrays in C++ are a Clang extension}} \
                         expected-note 2{{function parameter 'N' with unknown value cannot be used in a constant expression}}
  auto l2 = []() -> vla {}; // expected-error{{function cannot return array type 'vla' (aka 'int[N]')}}
}

void test_result_type_call() {
  test_result_type_tpl<Incomplete>(10); // expected-note {{requested here}}
}
