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)9 static float real_part(COMPLEX_FLOAT a)
10 {
11   return *(float*)(&a);
12 }
13 
14 __attribute__ ((noinline))
real_part_2(COMPLEX_FLOAT a)15 static float real_part_2(COMPLEX_FLOAT a)
16 {
17   return ((float*)(&a))[0];
18 }
19 
main()20 int 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