15b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman// RUN: %clang_cc1 -emit-llvm-only %s
2bacfa02138dce5e380bca924b2c9c40bf7959aabGabor Greif
3b02d4b4bdf07273e86bf73414d51ea16ce46b081Gabor Greifint main(void)
4bacfa02138dce5e380bca924b2c9c40bf7959aabGabor Greif{
5bacfa02138dce5e380bca924b2c9c40bf7959aabGabor Greif  double _Complex a = 5;
6bacfa02138dce5e380bca924b2c9c40bf7959aabGabor Greif  double _Complex b = 42;
7bacfa02138dce5e380bca924b2c9c40bf7959aabGabor Greif
8b02d4b4bdf07273e86bf73414d51ea16ce46b081Gabor Greif  return a * b != b * a;
9bacfa02138dce5e380bca924b2c9c40bf7959aabGabor Greif}
1012b2be25f8575fb0a1f6ecf5802e3bcb78af6adaChris Lattner
1112b2be25f8575fb0a1f6ecf5802e3bcb78af6adaChris Lattner_Complex double bar(int);
1212b2be25f8575fb0a1f6ecf5802e3bcb78af6adaChris Lattnervoid test(_Complex double*);
13fd90ac054e9703b0a8f39da388e28f2b70d08dccChris Lattnervoid takecomplex(_Complex double);
1412b2be25f8575fb0a1f6ecf5802e3bcb78af6adaChris Lattner
1512b2be25f8575fb0a1f6ecf5802e3bcb78af6adaChris Lattnervoid test2(int c) {
1612b2be25f8575fb0a1f6ecf5802e3bcb78af6adaChris Lattner  _Complex double X;
1712b2be25f8575fb0a1f6ecf5802e3bcb78af6adaChris Lattner  X = bar(1);
1812b2be25f8575fb0a1f6ecf5802e3bcb78af6adaChris Lattner  test(&X);
19fd90ac054e9703b0a8f39da388e28f2b70d08dccChris Lattner  takecomplex(X);
2012b2be25f8575fb0a1f6ecf5802e3bcb78af6adaChris Lattner}
2112b2be25f8575fb0a1f6ecf5802e3bcb78af6adaChris Lattner
22fd90ac054e9703b0a8f39da388e28f2b70d08dccChris Lattner_Complex double g1, g2;
238ae3a9f8bec69b5251abd695ffcd306a90b84d61Chris Lattner_Complex float cf;
248ae3a9f8bec69b5251abd695ffcd306a90b84d61Chris Lattnerdouble D;
25fd90ac054e9703b0a8f39da388e28f2b70d08dccChris Lattner
26fd90ac054e9703b0a8f39da388e28f2b70d08dccChris Lattnervoid test3() {
27fd90ac054e9703b0a8f39da388e28f2b70d08dccChris Lattner  g1 = g1 + g2;
28fd90ac054e9703b0a8f39da388e28f2b70d08dccChris Lattner  g1 = g1 - g2;
29fd90ac054e9703b0a8f39da388e28f2b70d08dccChris Lattner  g1 = g1 * g2;
30fd90ac054e9703b0a8f39da388e28f2b70d08dccChris Lattner  g1 = +-~g1;
3146f93d021a1778442c1c4a53f0b94a68bfae3be5Chris Lattner
3246f93d021a1778442c1c4a53f0b94a68bfae3be5Chris Lattner  double Gr = __real g1;
338ae3a9f8bec69b5251abd695ffcd306a90b84d61Chris Lattner
349cff1a9ac25f2b1386d3157e8daa0b219573d6a6Chris Lattner  cf += D;
35ab3a852ae713189444dcbf75e70accf1e8c2b7f2Eli Friedman  // FIXME: Currently unsupported!
36ab3a852ae713189444dcbf75e70accf1e8c2b7f2Eli Friedman  //D += cf;
378ae3a9f8bec69b5251abd695ffcd306a90b84d61Chris Lattner  cf /= g1;
389cff1a9ac25f2b1386d3157e8daa0b219573d6a6Chris Lattner  g1 = g1 + D;
399cff1a9ac25f2b1386d3157e8daa0b219573d6a6Chris Lattner  g1 = D + g1;
40fd90ac054e9703b0a8f39da388e28f2b70d08dccChris Lattner}
417da36f642e907ff5a5ba4b18b5bfebfabf36ecc7Chris Lattner
425b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman__complex__ int ci1, ci2;
435b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman__complex__ short cs;
445b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedmanint i;
455b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedmanvoid test3int() {
465b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  ci1 = ci1 + ci2;
475b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  ci1 = ci1 - ci2;
485b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  ci1 = ci1 * ci2;
495b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  ci1 = +-~ci1;
505b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman
515b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  i = __real ci1;
525b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman
535b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  cs += i;
545b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  // FIXME: Currently unsupported!
555b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  //D += cf;
565b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  cs /= ci1;
575b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  ci1 = ci1 + i;
585b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  ci1 = i + ci1;
595b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman}
605b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman
617da36f642e907ff5a5ba4b18b5bfebfabf36ecc7Chris Lattnervoid t1() {
627da36f642e907ff5a5ba4b18b5bfebfabf36ecc7Chris Lattner  (__real__ cf) = 4.0;
637da36f642e907ff5a5ba4b18b5bfebfabf36ecc7Chris Lattner}
647da36f642e907ff5a5ba4b18b5bfebfabf36ecc7Chris Lattner
657da36f642e907ff5a5ba4b18b5bfebfabf36ecc7Chris Lattnervoid t2() {
667da36f642e907ff5a5ba4b18b5bfebfabf36ecc7Chris Lattner  (__imag__ cf) = 4.0;
677da36f642e907ff5a5ba4b18b5bfebfabf36ecc7Chris Lattner}
687da36f642e907ff5a5ba4b18b5bfebfabf36ecc7Chris Lattner
699b2dc287177394a8f73833e2ad4f7ca8cd6f22bbChris Lattner// PR1960
709b2dc287177394a8f73833e2ad4f7ca8cd6f22bbChris Lattnervoid t3() {
719b2dc287177394a8f73833e2ad4f7ca8cd6f22bbChris Lattner  __complex__ long long v = 2;
729b2dc287177394a8f73833e2ad4f7ca8cd6f22bbChris Lattner}
739b2dc287177394a8f73833e2ad4f7ca8cd6f22bbChris Lattner
74ad3d6917dabbdab3399ff8307240aad58247d2e3Anders Carlsson// PR3131
75ad3d6917dabbdab3399ff8307240aad58247d2e3Anders Carlssonfloat _Complex t4();
76ad3d6917dabbdab3399ff8307240aad58247d2e3Anders Carlsson
77ad3d6917dabbdab3399ff8307240aad58247d2e3Anders Carlssonvoid t5() {
78ad3d6917dabbdab3399ff8307240aad58247d2e3Anders Carlsson  float _Complex x = t4();
79ad3d6917dabbdab3399ff8307240aad58247d2e3Anders Carlsson}
80ad3d6917dabbdab3399ff8307240aad58247d2e3Anders Carlsson
815b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedmanvoid t6() {
825b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  g1++;
835b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  g1--;
845b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  ++g1;
855b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  --g1;
865b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  ci1++;
875b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  ci1--;
885b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  ++ci1;
895b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  --ci1;
905b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman}
915b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman
92abd3a857ace59100305790545d1baae5877b8945John McCall// <rdar://problem/7958272>
93abd3a857ace59100305790545d1baae5877b8945John McCalldouble t7(double _Complex c) {
94abd3a857ace59100305790545d1baae5877b8945John McCall  return __builtin_fabs(__real__(c));
95abd3a857ace59100305790545d1baae5877b8945John McCall}
9643e890b0354c40b9bfe9281a47985e7a4e2fc2c3Eli Friedman
9743e890b0354c40b9bfe9281a47985e7a4e2fc2c3Eli Friedmanvoid t8() {
9843e890b0354c40b9bfe9281a47985e7a4e2fc2c3Eli Friedman  __complex__ int *x = &(__complex__ int){1};
9943e890b0354c40b9bfe9281a47985e7a4e2fc2c3Eli Friedman}
100