1 /* { dg-do compile } */
2 /* { dg-options "-O2 -fdump-ipa-icf-optimized" } */
3
4 void destroy (void)
5 {
6 }
7
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))
22 void foo()
23 {
24 my_callbacks.success = destroy;
25 }
26
27 __attribute__ ((noinline))
28 void bar()
29 {
30 my_callbacks.success = remove;
31 }
32
33 int main()
34 {
35 foo();
36 bar();
37
38 return 0;
39 }
40
41 /* { dg-final { scan-ipa-dump "Semantic equality hit:destroy/\[0-9+\]+->remove/\[0-9+\]+" "icf" } } */
42 /* { dg-final { scan-ipa-dump "Equal symbols: 1" "icf" } } */