1 /* { dg-do compile { target c99_runtime } } */ 2 /* { dg-options "-O0 -fipa-icf -fdump-ipa-icf" } */ 3 4 #include <complex.h> 5 6 typedef _Complex float COMPLEX_FLOAT; 7 8 __attribute__ ((noinline)) real_part(COMPLEX_FLOAT a)9static float real_part(COMPLEX_FLOAT a) 10 { 11 return *(float*)(&a); 12 } 13 14 __attribute__ ((noinline)) real_part_2(COMPLEX_FLOAT a)15static float real_part_2(COMPLEX_FLOAT a) 16 { 17 return ((float*)(&a))[0]; 18 } 19 main()20int main() 21 { 22 COMPLEX_FLOAT f = 1.0f + _Complex_I; 23 24 float r1 = real_part(f); 25 float r2 = real_part_2(f); 26 27 return r1 - r2; 28 } 29 30 /* { dg-final { scan-ipa-dump "Semantic equality hit:real_part->real_part_2" "icf" } } */ 31 /* { dg-final { scan-ipa-dump "Equal symbols: 1" "icf" } } */ 32