1*f4a2713aSLionel Sambuc // RUN: %clang_cc1 -emit-llvm-only %s 2*f4a2713aSLionel Sambuc 3*f4a2713aSLionel Sambuc int main(void) 4*f4a2713aSLionel Sambuc { 5*f4a2713aSLionel Sambuc double _Complex a = 5; 6*f4a2713aSLionel Sambuc double _Complex b = 42; 7*f4a2713aSLionel Sambuc 8*f4a2713aSLionel Sambuc return a * b != b * a; 9*f4a2713aSLionel Sambuc } 10*f4a2713aSLionel Sambuc 11*f4a2713aSLionel Sambuc _Complex double bar(int); 12*f4a2713aSLionel Sambuc void test(_Complex double*); 13*f4a2713aSLionel Sambuc void takecomplex(_Complex double); 14*f4a2713aSLionel Sambuc 15*f4a2713aSLionel Sambuc void test2(int c) { 16*f4a2713aSLionel Sambuc _Complex double X; 17*f4a2713aSLionel Sambuc X = bar(1); 18*f4a2713aSLionel Sambuc test(&X); 19*f4a2713aSLionel Sambuc takecomplex(X); 20*f4a2713aSLionel Sambuc } 21*f4a2713aSLionel Sambuc 22*f4a2713aSLionel Sambuc _Complex double g1, g2; 23*f4a2713aSLionel Sambuc _Complex float cf; 24*f4a2713aSLionel Sambuc double D; 25*f4a2713aSLionel Sambuc 26*f4a2713aSLionel Sambuc void test3() { 27*f4a2713aSLionel Sambuc g1 = g1 + g2; 28*f4a2713aSLionel Sambuc g1 = g1 - g2; 29*f4a2713aSLionel Sambuc g1 = g1 * g2; 30*f4a2713aSLionel Sambuc g1 = +-~g1; 31*f4a2713aSLionel Sambuc 32*f4a2713aSLionel Sambuc double Gr = __real g1; 33*f4a2713aSLionel Sambuc 34*f4a2713aSLionel Sambuc cf += D; 35*f4a2713aSLionel Sambuc D += cf; 36*f4a2713aSLionel Sambuc cf /= g1; 37*f4a2713aSLionel Sambuc g1 = g1 + D; 38*f4a2713aSLionel Sambuc g1 = D + g1; 39*f4a2713aSLionel Sambuc } 40*f4a2713aSLionel Sambuc 41*f4a2713aSLionel Sambuc __complex__ int ci1, ci2; 42*f4a2713aSLionel Sambuc __complex__ short cs; 43*f4a2713aSLionel Sambuc int i; 44*f4a2713aSLionel Sambuc void test3int() { 45*f4a2713aSLionel Sambuc ci1 = ci1 + ci2; 46*f4a2713aSLionel Sambuc ci1 = ci1 - ci2; 47*f4a2713aSLionel Sambuc ci1 = ci1 * ci2; 48*f4a2713aSLionel Sambuc ci1 = +-~ci1; 49*f4a2713aSLionel Sambuc 50*f4a2713aSLionel Sambuc i = __real ci1; 51*f4a2713aSLionel Sambuc 52*f4a2713aSLionel Sambuc cs += i; 53*f4a2713aSLionel Sambuc D += cf; 54*f4a2713aSLionel Sambuc cs /= ci1; 55*f4a2713aSLionel Sambuc ci1 = ci1 + i; 56*f4a2713aSLionel Sambuc ci1 = i + ci1; 57*f4a2713aSLionel Sambuc } 58*f4a2713aSLionel Sambuc 59*f4a2713aSLionel Sambuc void t1() { 60*f4a2713aSLionel Sambuc (__real__ cf) = 4.0; 61*f4a2713aSLionel Sambuc } 62*f4a2713aSLionel Sambuc 63*f4a2713aSLionel Sambuc void t2() { 64*f4a2713aSLionel Sambuc (__imag__ cf) = 4.0; 65*f4a2713aSLionel Sambuc } 66*f4a2713aSLionel Sambuc 67*f4a2713aSLionel Sambuc // PR1960 68*f4a2713aSLionel Sambuc void t3() { 69*f4a2713aSLionel Sambuc __complex__ long long v = 2; 70*f4a2713aSLionel Sambuc } 71*f4a2713aSLionel Sambuc 72*f4a2713aSLionel Sambuc // PR3131 73*f4a2713aSLionel Sambuc float _Complex t4(); 74*f4a2713aSLionel Sambuc 75*f4a2713aSLionel Sambuc void t5() { 76*f4a2713aSLionel Sambuc float _Complex x = t4(); 77*f4a2713aSLionel Sambuc } 78*f4a2713aSLionel Sambuc 79*f4a2713aSLionel Sambuc void t6() { 80*f4a2713aSLionel Sambuc g1++; 81*f4a2713aSLionel Sambuc g1--; 82*f4a2713aSLionel Sambuc ++g1; 83*f4a2713aSLionel Sambuc --g1; 84*f4a2713aSLionel Sambuc ci1++; 85*f4a2713aSLionel Sambuc ci1--; 86*f4a2713aSLionel Sambuc ++ci1; 87*f4a2713aSLionel Sambuc --ci1; 88*f4a2713aSLionel Sambuc } 89*f4a2713aSLionel Sambuc 90*f4a2713aSLionel Sambuc // <rdar://problem/7958272> 91*f4a2713aSLionel Sambuc double t7(double _Complex c) { 92*f4a2713aSLionel Sambuc return __builtin_fabs(__real__(c)); 93*f4a2713aSLionel Sambuc } 94*f4a2713aSLionel Sambuc 95*f4a2713aSLionel Sambuc void t8() { 96*f4a2713aSLionel Sambuc __complex__ int *x = &(__complex__ int){1}; 97*f4a2713aSLionel Sambuc } 98*f4a2713aSLionel Sambuc 99*f4a2713aSLionel Sambuc const _Complex double test9const = 0; 100*f4a2713aSLionel Sambuc _Complex double test9func() { return test9const; } 101