/* APPLE LOCAL file radar 5939894 */
/* Check that if a definition of struct invoke_impl already exist, then use it. */
/* { dg-options "-fblocks" } */
/* { dg-do compile } */

struct invoke_impl {
 void   *isa;
 int Flags;
 int Size;
 void *FuncPtr;
};

enum numbers
{
    zero, one, two, three, four
};

typedef enum numbers (^myblock)(enum numbers);


double test(myblock I) {
  return I(three);
}

int main() {
  __block enum numbers x = one;
  __block enum numbers y = two;

  myblock CL = ^(enum numbers z)
		{ y = z; 
		 test (
		 ^ (enum numbers z) { 
		   x = z;
		   return (enum numbers) four;
		  }
		  );
		  return x;
		};

  enum numbers res = (numbers)test(CL);

  return 0;
}
