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