/* Generated by CIL v. 1.3.7 */
/* print_CIL_Input is true */

typedef int (*(*g[5])(int (*wtf)[5] ))(int wtf );

// a: pointer to int!
int *a  = 
      (int *)((void *)0);

// b: pointer to function accepting int*, returning int.
int (*b)(int * )  = 
      (int (*)(int * ))((void *)0);

// c: an array of pointers to functions accepting int*, returning int.
int (*c[5])(int * )  = 
      {(int (*)(int * ))((void *)0), (int (*)(int * ))((void *)0), (int (*)(int * ))((void *)0), (int (*)(int * ))((void *)0), (int (*)(int * ))((void *)0)};

// d: an array of pointers to functions accepting pointers (to functions
// accepting ?, returning int), returning int.
int (*d[5])(int (*)() )  = 
      {(int (*)(int (*)() ))((void *)0), (int (*)(int (*)() ))((void *)0), (int (*)(int (*)() ))((void *)0), (int (*)(int (*)() ))((void *)0), (int (*)(int (*)() ))((void *)0)};

// e: left as an exercise to the reader.
int (*(*e[5])(int (*wtf)[5] ))(int wtf )  = 
      {(int (*(*)(int (*wtf)[5] ))(int wtf ))((void *)0), (int (*(*)(int (*wtf)[5] ))(int wtf ))((void *)0), (int (*(*)(int (*wtf)[5] ))(int wtf ))((void *)0), (int (*(*)(int (*wtf)[5] ))(int wtf ))((void *)0), (int (*(*)(int (*wtf)[5] ))(int wtf ))((void *)0)};

// f: this must be a function.
char (*(*f(void))[])[5] 
{ 
  { return ((char (*(*)[])[5])((void *)0)); }
}

int main(void) 
{ g x ;
  char (*(*tmp)[])[5];
  int a;
  int b;
{
  x[0] = (int (*(*)(int (*wtf)[5] ))(int wtf ))((void *)0);
  x[1] = (int (*(*)(int (*wtf)[5] ))(int wtf ))((void *)0);
  x[2] = (int (*(*)(int (*wtf)[5] ))(int wtf ))((void *)0);
  x[3] = (int (*(*)(int (*wtf)[5] ))(int wtf ))((void *)0);
  x[4] = (int (*(*)(int (*wtf)[5] ))(int wtf ))((void *)0);
  tmp = f();
  a = (int)tmp;
  b = (int)x[4];
  return 0;
}
}
