block-args.C   [plain text]


/* APPLE LOCAL file radar 5732232 - blocks */
/* { dg-do compile } */
/* { dg-options "-fblocks" } */

void take(void*);

void test() {
  take(^(int x){});
  take(^(int x, int y){});
  take(^(int x, int y){});
  take(^(int x, int x){});  /* { dg-error "redeclaration of" } */
			    /* { dg-error "previously declared" "" { target *-*-* } 11 } */


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

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

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