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