| // RUN: %clang_cc1 -emit-llvm-only %s |
| |
| int main(void) |
| { |
| double _Complex a = 5; |
| double _Complex b = 42; |
| |
| return a * b != b * a; |
| } |
| |
| _Complex double bar(int); |
| void test(_Complex double*); |
| void takecomplex(_Complex double); |
| |
| void test2(int c) { |
| _Complex double X; |
| X = bar(1); |
| test(&X); |
| takecomplex(X); |
| } |
| |
| _Complex double g1, g2; |
| _Complex float cf; |
| double D; |
| |
| void test3() { |
| g1 = g1 + g2; |
| g1 = g1 - g2; |
| g1 = g1 * g2; |
| g1 = +-~g1; |
| |
| double Gr = __real g1; |
| |
| cf += D; |
| D += cf; |
| cf /= g1; |
| g1 = g1 + D; |
| g1 = D + g1; |
| } |
| |
| __complex__ int ci1, ci2; |
| __complex__ short cs; |
| int i; |
| void test3int() { |
| ci1 = ci1 + ci2; |
| ci1 = ci1 - ci2; |
| ci1 = ci1 * ci2; |
| ci1 = +-~ci1; |
| |
| i = __real ci1; |
| |
| cs += i; |
| D += cf; |
| cs /= ci1; |
| ci1 = ci1 + i; |
| ci1 = i + ci1; |
| } |
| |
| void t1() { |
| (__real__ cf) = 4.0; |
| } |
| |
| void t2() { |
| (__imag__ cf) = 4.0; |
| } |
| |
| // PR1960 |
| void t3() { |
| __complex__ long long v = 2; |
| } |
| |
| // PR3131 |
| float _Complex t4(); |
| |
| void t5() { |
| float _Complex x = t4(); |
| } |
| |
| void t6() { |
| g1++; |
| g1--; |
| ++g1; |
| --g1; |
| ci1++; |
| ci1--; |
| ++ci1; |
| --ci1; |
| } |
| |
| // <rdar://problem/7958272> |
| double t7(double _Complex c) { |
| return __builtin_fabs(__real__(c)); |
| } |
| |
| void t8() { |
| __complex__ int *x = &(__complex__ int){1}; |
| } |
| |
| const _Complex double test9const = 0; |
| _Complex double test9func() { return test9const; } |
| |
| // D6217 |
| void t91() { |
| // Check for proper type promotion of conditional expression |
| char c[(int)(sizeof(typeof((0 ? 2.0f : (_Complex double) 2.0f))) - sizeof(_Complex double))]; |
| // Check for proper codegen |
| (0 ? 2.0f : (_Complex double) 2.0f); |
| } |
| |
| void t92() { |
| // Check for proper type promotion of conditional expression |
| char c[(int)(sizeof(typeof((0 ? (_Complex double) 2.0f : 2.0f))) - sizeof(_Complex double))]; |
| // Check for proper codegen |
| (0 ? (_Complex double) 2.0f : 2.0f); |
| } |
| |