1 /* { dg-do compile { target c99_runtime } } */
2 /* { dg-options "-O2 -fdump-ipa-icf"  } */
3 /* { dg-add-options c99_runtime } */
4 
5 #include <complex.h>
6 
7 static double test;
8 
9 __attribute__ ((noinline))
f1(void)10 double f1(void)
11 {
12   double complex z1 = 1.0 + 3.0 * I;
13   double complex z2 = 1.0 - 4.0 * I;
14 
15   unsigned a = 123;
16   unsigned b = 321;
17 
18   if (a & b)
19     return 1.2f;
20 
21   if(cimag(z1) > 1)
22     return 1.0f;
23 
24   test = cimag(z1) + 2;
25 
26   return cimag(z1 + z2);
27 }
28 
29 __attribute__ ((noinline))
f2(void)30 double f2(void)
31 {
32   double complex z1 = 1.0 + 3.0 * I;
33   double complex z2 = 1.0 - 4.0 * I;
34 
35   unsigned a = 123;
36   unsigned b = 321;
37 
38   if (a & b)
39     return 1.2f;
40 
41   if(cimag(z1) > 1)
42     return 1.0f;
43 
44   test = cimag(z1) + 2;
45 
46   return cimag(z1 + z2);
47 }
48 
main()49 int main()
50 {
51   return 1;
52 }
53 
54 /* { dg-final { scan-ipa-dump "Semantic equality hit:f1->f2" "icf"  } } */
55 /* { dg-final { scan-ipa-dump "Equal symbols: 1" "icf"  } } */
56