// RUN: %clang_cc1 %s -fsyntax-only -verify -fblocks

void take(void*);

void test() {
  take(^(int x){});
  take(^(int x, int y){});
  take(^(int x, int y){});
  take(^(int x,      // expected-note {{previous declaration is here}}
         int x){});  // expected-error {{redefinition of parameter 'x'}}


  take(^(int x) { return x+1; });

  int (^CP)(int) = ^(int x) { return x*x; };
  take(CP);

  int arg;
  ^{return 1;}();
  ^{return 2;}(arg); // expected-error {{too many arguments to block call}}
  ^(void){return 3;}(1); // expected-error {{too many arguments to block call}}
  ^(){return 4;}(arg); // expected-error {{too many arguments to block call}}
  ^(int x, ...){return 5;}(arg, arg);   // Explicit varargs, ok.
}

int main(int argc, char** argv) {
  ^(int argCount) {
    argCount = 3;
  }(argc);
}

// radar 7528255
void f0() {
  ^(int, double d, char) {}(1, 1.34, 'a'); // expected-error {{parameter name omitted}} \
				 	   // expected-error {{parameter name omitted}}
}

// rdar://problem/8962770
void test4() {
  int (^f)() = ^((x)) { }; // expected-error {{expected ')'}} expected-warning {{type specifier missing}} expected-note {{to match this}}
}

// rdar://problem/9170609
void test5_helper(void (^)(int, int[*]));
void test5(void) {
  test5_helper(^(int n, int array[n]) {});
}

// Reduced from a problem on platforms where va_list is an array.
struct tag {
  int x;
};
typedef struct tag array_ty[1];
void test6(void) {
  void (^block)(array_ty) = ^(array_ty arr) { };
  array_ty arr;
  block(arr);
}
