typedef union _yystype { int i; int *iptr; int (*ifunc)(int); void (*vfunc)(int); } YYSTYPE; extern int f1(int k); void test() { YYSTYPE a; int (*iptr)(int); int foo[5]; a = f1; /* { dg-error "incompatible types" } */ a = (YYSTYPE)f1; a = (YYSTYPE)foo; a = (YYSTYPE)(int *)foo; iptr = f1; a = iptr; /* { dg-error "incompatible types" } */ a = (YYSTYPE)iptr; }