/* { dg-do compile } */ #include void foo(void); void test(int (*f)(void), char *p) { __builtin_call_with_static_chain(f(), p); __builtin_call_with_static_chain(p, f()); /* { dg-error "must be a call" } */ __builtin_call_with_static_chain(f() + 1, p); /* { dg-error "must be a call" } */ __builtin_call_with_static_chain(f(), 0); /* { dg-error "must be a pointer" } */ __builtin_call_with_static_chain(f(), NULL); __builtin_call_with_static_chain(foo, p); /* { dg-error "must be a call" } */ __builtin_call_with_static_chain(foo(), p); __builtin_call_with_static_chain(foo(), foo); }