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