1 /* { dg-do compile } */
2 /* { dg-options "-O2 -fdump-ipa-icf"  } */
3 
destroy(void)4 void destroy (void)
5 {
6 }
7 
remove(void)8 void remove (void)
9 {
10 }
11 
12 
13 struct callbacks
14 {
15   void (*success) (void);
16   void (*error) (void);
17 };
18 
19 struct callbacks my_callbacks;
20 
21 __attribute__ ((noinline))
foo()22 void foo()
23 {
24   my_callbacks.success = destroy;
25 }
26 
27 __attribute__ ((noinline))
bar()28 void bar()
29 {
30   my_callbacks.success = remove;
31 }
32 
main()33 int main()
34 {
35   foo();
36   bar();
37 
38   return 0;
39 }
40 
41 /* { dg-final { scan-ipa-dump "Semantic equality hit:destroy->remove" "icf"  } } */
42 /* { dg-final { scan-ipa-dump "Equal symbols: 1" "icf"  } } */
43