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
7static double test;
8
9__attribute__ ((noinline))
10double 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))
30double 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
49int main()
50{
51  return 1;
52}
53
54/* { dg-final { scan-ipa-dump "Semantic equality hit:f2->f1" "icf"  } } */
55/* { dg-final { scan-ipa-dump "Equal symbols: 1" "icf"  } } */
56/* { dg-final { cleanup-ipa-dump "icf" } } */
57