1 /* { dg-do compile } */ 2 /* { dg-options "-O2 -fdump-ipa-icf" } */ 3 destroy(void)4void destroy (void) 5 { 6 } 7 remove(void)8void 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()22void foo() 23 { 24 my_callbacks.success = destroy; 25 } 26 27 __attribute__ ((noinline)) bar()28void bar() 29 { 30 my_callbacks.success = remove; 31 } 32 main()33int 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