1 /* { dg-do run } */
2 /* { dg-options "-O2" } */
3 typedef void (*listener_fun)(
4         int a,
5         int b,
6         int c);
7 
8 struct data_t
9 {
10   int a;
11 
12   listener_fun listener;
13 
14   int b;
15   int c;
16   int d;
17 };
18 
19 extern void abort(void);
20 void function_calling_listener (struct data_t data);
21 
function_calling_listener(struct data_t data)22 void function_calling_listener (struct data_t data)
23 {
24   data.listener(data.a, data.c, data.d);
25 }
26 
my_listener(int a,int b,int c)27 void my_listener(int a, int b, int c)
28 {
29   if (a != 42 || b != 44 || c != 45)
30     abort ();
31 }
32 
main()33 int main()
34 {
35   struct data_t d;
36   d.a = 42;
37   d.b = 43;
38   d.c = 44;
39   d.d = 45;
40   d.listener = my_listener;
41   function_calling_listener (d);
42   return 0;
43 }
44