// RUN: %clang_cc1 %s -O1 -emit-llvm -o - | FileCheck %s
// rdar://8315199

/* Test for builtin conj, creal, cimag.  */
/* Origin: Joseph Myers <jsm28@cam.ac.uk> */

extern float _Complex conjf (float _Complex);
extern double _Complex conj (double _Complex);
extern long double _Complex conjl (long double _Complex);

extern float crealf (float _Complex);
extern double creal (double _Complex);
extern long double creall (long double _Complex);

extern float cimagf (float _Complex);
extern double cimag (double _Complex);
extern long double cimagl (long double _Complex);

extern void abort (void);
extern void link_error (void);

int
main ()
{
  /* For each type, test both runtime and compile time (constant folding)
     optimization.  */
  volatile float _Complex fc = 1.0F + 2.0iF;
  volatile double _Complex dc = 1.0 + 2.0i;
  volatile long double _Complex ldc = 1.0L + 2.0iL;
  /* Test floats.  */
  if (__builtin_conjf (fc) != 1.0F - 2.0iF)
    abort ();
  if (__builtin_conjf (1.0F + 2.0iF) != 1.0F - 2.0iF)
    link_error ();
  if (__builtin_crealf (fc) != 1.0F)
    abort ();
  if (__builtin_crealf (1.0F + 2.0iF) != 1.0F)
    link_error ();
  if (__builtin_cimagf (fc) != 2.0F)
    abort ();
  if (__builtin_cimagf (1.0F + 2.0iF) != 2.0F)
    link_error ();
  /* Test doubles.  */
  if (__builtin_conj (dc) != 1.0 - 2.0i)
    abort ();
  if (__builtin_conj (1.0 + 2.0i) != 1.0 - 2.0i)
    link_error ();
  if (__builtin_creal (dc) != 1.0)
    abort ();
  if (__builtin_creal (1.0 + 2.0i) != 1.0)
    link_error ();
  if (__builtin_cimag (dc) != 2.0)
    abort ();
  if (__builtin_cimag (1.0 + 2.0i) != 2.0)
    link_error ();
  /* Test long doubles.  */
  if (__builtin_conjl (ldc) != 1.0L - 2.0iL)
    abort ();
  if (__builtin_conjl (1.0L + 2.0iL) != 1.0L - 2.0iL)
    link_error ();
  if (__builtin_creall (ldc) != 1.0L)
    abort ();
  if (__builtin_creall (1.0L + 2.0iL) != 1.0L)
    link_error ();
  if (__builtin_cimagl (ldc) != 2.0L)
    abort ();
  if (__builtin_cimagl (1.0L + 2.0iL) != 2.0L)
    link_error ();
}

// CHECK-NOT: link_error
