1ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian// RUN: %clang_cc1 %s -O1 -emit-llvm -o - | FileCheck %s 2ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian// rdar://8315199 3ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian 4ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian/* Test for builtin conj, creal, cimag. */ 5ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian/* Origin: Joseph Myers <jsm28@cam.ac.uk> */ 6ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian 7ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanianextern float _Complex conjf (float _Complex); 8ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanianextern double _Complex conj (double _Complex); 9ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanianextern long double _Complex conjl (long double _Complex); 10ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian 11ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanianextern float crealf (float _Complex); 12ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanianextern double creal (double _Complex); 13ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanianextern long double creall (long double _Complex); 14ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian 15ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanianextern float cimagf (float _Complex); 16ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanianextern double cimag (double _Complex); 17ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanianextern long double cimagl (long double _Complex); 18ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian 19ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanianextern void abort (void); 20ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanianextern void link_error (void); 21ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian 22ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanianint 23ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanianmain () 24ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian{ 25ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian /* For each type, test both runtime and compile time (constant folding) 26ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian optimization. */ 27ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian volatile float _Complex fc = 1.0F + 2.0iF; 28ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian volatile double _Complex dc = 1.0 + 2.0i; 29ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian volatile long double _Complex ldc = 1.0L + 2.0iL; 30ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian /* Test floats. */ 31ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian if (__builtin_conjf (fc) != 1.0F - 2.0iF) 32ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian abort (); 33ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian if (__builtin_conjf (1.0F + 2.0iF) != 1.0F - 2.0iF) 34ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian link_error (); 35ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian if (__builtin_crealf (fc) != 1.0F) 36ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian abort (); 37ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian if (__builtin_crealf (1.0F + 2.0iF) != 1.0F) 38ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian link_error (); 39ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian if (__builtin_cimagf (fc) != 2.0F) 40ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian abort (); 41ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian if (__builtin_cimagf (1.0F + 2.0iF) != 2.0F) 42ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian link_error (); 43ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian /* Test doubles. */ 44ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian if (__builtin_conj (dc) != 1.0 - 2.0i) 45ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian abort (); 46ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian if (__builtin_conj (1.0 + 2.0i) != 1.0 - 2.0i) 47ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian link_error (); 48ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian if (__builtin_creal (dc) != 1.0) 49ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian abort (); 50ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian if (__builtin_creal (1.0 + 2.0i) != 1.0) 51ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian link_error (); 52ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian if (__builtin_cimag (dc) != 2.0) 53ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian abort (); 54ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian if (__builtin_cimag (1.0 + 2.0i) != 2.0) 55ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian link_error (); 56ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian /* Test long doubles. */ 57ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian if (__builtin_conjl (ldc) != 1.0L - 2.0iL) 58ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian abort (); 59ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian if (__builtin_conjl (1.0L + 2.0iL) != 1.0L - 2.0iL) 60ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian link_error (); 61ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian if (__builtin_creall (ldc) != 1.0L) 62ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian abort (); 63ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian if (__builtin_creall (1.0L + 2.0iL) != 1.0L) 64ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian link_error (); 65ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian if (__builtin_cimagl (ldc) != 2.0L) 66ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian abort (); 67ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian if (__builtin_cimagl (1.0L + 2.0iL) != 2.0L) 68ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian link_error (); 69ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian} 70ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian 71ce23bb7cdc51db26411d75da3b20818ac2cc1db6Fariborz Jahanian// CHECK-NOT: link_error 72