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


int (^IFP) ();
int (^II) (int);
int main() {
	int (^PFR) (int) = IFP;
	PFR = II;


	int (^IFP) () = PFR;	/* This is now ok in c (radar 6196572) */


	const int (^CIC) () = IFP;

	const int (^CICC) () = CIC;

	int * const (^IPCC) () = 0;

	int * const (^IPCC1) () = IPCC;

	int * (^IPCC2) () = IPCC; /* { dg-error "incompatible block pointer types initializing" } */

	int (^IPCC3) (const int) = PFR;

	int (^IPCC4) (int, char (^CArg) (double));


	int (^IPCC5) (int, char (^CArg) (double)) = IPCC4;

	int (^IPCC6) (int, char (^CArg) (float))  = IPCC4; /* { dg-error "incompatible block pointer types initializing" } */

	IPCC2 = 0;
	IPCC2 = 1; /* { dg-error "invalid block pointer conversion" } */
	int (^x)() = 0;
	int (^y)() = 3;   /* { dg-error "invalid block pointer conversion" } */
	int a = 1;
	int (^z)() = a+4;   /* { dg-error "invalid block pointer conversion" } */
	return 0;
}

int blah() {
	int (^IFP) (float);
	char (^PCP)(double, double, char);

	IFP(1.0);
	IFP (1.0, 2.0);	/* { dg-error "too many arguments to block call" } */

	char ch = PCP(1.0, 2.0, 'a');
	return PCP(1.0, 2.0);	/* { dg-error "too few arguments to block" } */
}

void foo() {

  /*  compare with: int (*xx1)(char *s);
      int (*xx2)(const char *s) = xx1; */
  /* APPLE LOCAL radar 6246965 */
  int (^xx)(const char *s) = ^(char *s) { return 1; };  /* { dg-error "incompatible block pointer types initializing" } */

}

