44 lines
633 B
C
44 lines
633 B
C
|
/* { dg-do run } */
|
||
|
/* { dg-options "-O2" } */
|
||
|
typedef void (*listener_fun)(
|
||
|
int a,
|
||
|
int b,
|
||
|
int c);
|
||
|
|
||
|
struct data_t
|
||
|
{
|
||
|
int a;
|
||
|
|
||
|
listener_fun listener;
|
||
|
|
||
|
int b;
|
||
|
int c;
|
||
|
int d;
|
||
|
};
|
||
|
|
||
|
extern void abort(void);
|
||
|
void function_calling_listener (struct data_t data);
|
||
|
|
||
|
void function_calling_listener (struct data_t data)
|
||
|
{
|
||
|
data.listener(data.a, data.c, data.d);
|
||
|
}
|
||
|
|
||
|
void my_listener(int a, int b, int c)
|
||
|
{
|
||
|
if (a != 42 || b != 44 || c != 45)
|
||
|
abort ();
|
||
|
}
|
||
|
|
||
|
int main()
|
||
|
{
|
||
|
struct data_t d;
|
||
|
d.a = 42;
|
||
|
d.b = 43;
|
||
|
d.c = 44;
|
||
|
d.d = 45;
|
||
|
d.listener = my_listener;
|
||
|
function_calling_listener (d);
|
||
|
return 0;
|
||
|
}
|