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