blob: 4fac9dc2105b18e3837e556a88203fa7887638c4 [file] [log] [blame]
extern int ival;
extern int *ipval;
extern int array[3];
extern int matrix[3][3];
extern int fun(int);
// via an argument
void arg(int a, int *p, int (*fb)(unsigned char), int (*fi)(int), int (*fl)(long), int (*fv)(void), int (*fip)(int *), int (*fim)(int (*)[3]), int (*fvp)(void *), int (*ffp)(int (*)(int)));
void arg(int a, int *p, int (*fb)(unsigned char), int (*fi)(int), int (*fl)(long), int (*fv)(void), int (*fip)(int *), int (*fim)(int (*)[3]), int (*fvp)(void *), int (*ffp)(int (*)(int)))
{
fv();
fb(a);
fi(a);
fl(a);
fb(123);
fi(123);
fl(123);
fb(123L);
fi(123L);
fl(123L);
fb(ival);
fi(ival);
fl(ival);
fip(p);
fip((void*)0);
fip(ipval);
fip(&ival);
fip(array);
fim(matrix);
fvp(p);
fvp((void*)0);
fvp(ipval);
fvp(&ival);
fvp(array);
fvp(matrix);
fvp(fun);
fvp(&fun);
ffp(fun);
ffp(&fun);
}
// a global
extern int (*fb)(unsigned char);
extern int (*fi)(int);
extern int (*fl)(long);
extern int (*fv)(void);
extern int (*fip)(int *);
extern int (*fim)(int (*)[3]);
extern int (*fvp)(void *);
extern int (*ffp)(int (*)(int));
void glb(int a, int *p);
void glb(int a, int *p)
{
fv();
fb(a);
fi(a);
fl(a);
fb(123);
fi(123);
fl(123);
fb(123L);
fi(123L);
fl(123L);
fb(ival);
fi(ival);
fl(ival);
fip(p);
fip((void*)0);
fip(ipval);
fip(&ival);
fip(array);
fim(matrix);
fvp(p);
fvp((void*)0);
fvp(ipval);
fvp(&ival);
fvp(array);
fvp(matrix);
fvp(fun);
fvp(&fun);
ffp(fun);
ffp(&fun);
}
// via a struct member:
// -> force to create a register containing the function pointer
struct ops {
int (*fb)(unsigned char);
int (*fi)(int);
int (*fl)(long);
int (*fv)(void);
int (*fip)(int *);
int (*fim)(int (*)[3]);
int (*fvp)(void *);
int (*ffp)(int (*)(int));
int (*const cfi)(int); // for the fun of it
};
void ops(int a, int *p, struct ops *ops);
void ops(int a, int *p, struct ops *ops)
{
ops->fv();
ops->fb(a);
ops->fi(a);
ops->fl(a);
ops->fb(123);
ops->fi(123);
ops->fl(123);
ops->fb(123L);
ops->fi(123L);
ops->fl(123L);
ops->fb(ival);
ops->fi(ival);
ops->fl(ival);
ops->fip(p);
ops->fip((void*)0);
ops->fip(ipval);
ops->fip(&ival);
ops->fip(array);
ops->fim(matrix);
ops->fvp(p);
ops->fvp((void*)0);
ops->fvp(ipval);
ops->fvp(&ival);
ops->fvp(array);
ops->fvp(matrix);
ops->fvp(fun);
ops->fvp(&fun);
ops->ffp(fun);
ops->ffp(&fun);
ops->fvp(fi);
ops->cfi(42);
}
/*
* check-name: Function pointer code generation
* check-command: sparsec -c $file -o tmp.o
*/