1 /* { dg-do compile { target c99_runtime } } */
2 /* { dg-options "-O0 -fipa-icf -fdump-ipa-icf-optimized" } */
3
4 #include <complex.h>
5
6 typedef _Complex float COMPLEX_FLOAT;
7
8 __attribute__ ((noinline))
9 static float real_part(COMPLEX_FLOAT a)
10 {
11 return *(float*)(&a);
12 }
13
14 __attribute__ ((noinline))
15 static float real_part_2(COMPLEX_FLOAT a)
16 {
17 return ((float*)(&a))[0];
18 }
19
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/\[0-9+\]+->real_part_2/\[0-9+\]+" "icf" } } */
31 /* { dg-final { scan-ipa-dump "Equal symbols: 1" "icf" } } */