block-complicated-type.C   [plain text]


/* APPLE LOCAL file radar 5988995 */
/* Type compatibility issue for blocks which return blocks. */
/* { dg-do compile } */
/* { dg-options "-fblocks" } */

int (^f)(char, int);

int (^farray[10])(float, int);

int (^func(int x))(char, int) {
   return f;
}

// intent: block taking int returning block that takes char,int and returns int
int (^(^block)(double x))(char, short);

void foo() {
   int one = 1;
   /* APPLE LOCAL radar 6230297 */
   block = ^(double x){ return ^(char c, short y) { return one + (int)c + y; };}; /* { dg-error "returning block that lives on the local stack" } */
}