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;
350934e18b620ecaa6c7ec18ba5c4286b6122d6fb8Eli Friedman  D += cf;
368ae3a9f8bec69b5251abd695ffcd306a90b84d61Chris Lattner  cf /= g1;
379cff1a9ac25f2b1386d3157e8daa0b219573d6a6Chris Lattner  g1 = g1 + D;
389cff1a9ac25f2b1386d3157e8daa0b219573d6a6Chris Lattner  g1 = D + g1;
39fd90ac054e9703b0a8f39da388e28f2b70d08dccChris Lattner}
407da36f642e907ff5a5ba4b18b5bfebfabf36ecc7Chris Lattner
415b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman__complex__ int ci1, ci2;
425b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman__complex__ short cs;
435b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedmanint i;
445b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedmanvoid test3int() {
455b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  ci1 = ci1 + ci2;
465b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  ci1 = ci1 - ci2;
475b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  ci1 = ci1 * ci2;
485b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  ci1 = +-~ci1;
495b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman
505b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  i = __real ci1;
515b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman
525b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  cs += i;
530934e18b620ecaa6c7ec18ba5c4286b6122d6fb8Eli Friedman  D += cf;
545b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  cs /= ci1;
555b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  ci1 = ci1 + i;
565b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  ci1 = i + ci1;
575b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman}
585b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman
597da36f642e907ff5a5ba4b18b5bfebfabf36ecc7Chris Lattnervoid t1() {
607da36f642e907ff5a5ba4b18b5bfebfabf36ecc7Chris Lattner  (__real__ cf) = 4.0;
617da36f642e907ff5a5ba4b18b5bfebfabf36ecc7Chris Lattner}
627da36f642e907ff5a5ba4b18b5bfebfabf36ecc7Chris Lattner
637da36f642e907ff5a5ba4b18b5bfebfabf36ecc7Chris Lattnervoid t2() {
647da36f642e907ff5a5ba4b18b5bfebfabf36ecc7Chris Lattner  (__imag__ cf) = 4.0;
657da36f642e907ff5a5ba4b18b5bfebfabf36ecc7Chris Lattner}
667da36f642e907ff5a5ba4b18b5bfebfabf36ecc7Chris Lattner
679b2dc287177394a8f73833e2ad4f7ca8cd6f22bbChris Lattner// PR1960
689b2dc287177394a8f73833e2ad4f7ca8cd6f22bbChris Lattnervoid t3() {
699b2dc287177394a8f73833e2ad4f7ca8cd6f22bbChris Lattner  __complex__ long long v = 2;
709b2dc287177394a8f73833e2ad4f7ca8cd6f22bbChris Lattner}
719b2dc287177394a8f73833e2ad4f7ca8cd6f22bbChris Lattner
72ad3d6917dabbdab3399ff8307240aad58247d2e3Anders Carlsson// PR3131
73ad3d6917dabbdab3399ff8307240aad58247d2e3Anders Carlssonfloat _Complex t4();
74ad3d6917dabbdab3399ff8307240aad58247d2e3Anders Carlsson
75ad3d6917dabbdab3399ff8307240aad58247d2e3Anders Carlssonvoid t5() {
76ad3d6917dabbdab3399ff8307240aad58247d2e3Anders Carlsson  float _Complex x = t4();
77ad3d6917dabbdab3399ff8307240aad58247d2e3Anders Carlsson}
78ad3d6917dabbdab3399ff8307240aad58247d2e3Anders Carlsson
795b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedmanvoid t6() {
805b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  g1++;
815b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  g1--;
825b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  ++g1;
835b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  --g1;
845b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  ci1++;
855b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  ci1--;
865b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  ++ci1;
875b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman  --ci1;
885b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman}
895b088a10e106a287684bef78cd6c3a3830ac0721Eli Friedman
90abd3a857ace59100305790545d1baae5877b8945John McCall// <rdar://problem/7958272>
91abd3a857ace59100305790545d1baae5877b8945John McCalldouble t7(double _Complex c) {
92abd3a857ace59100305790545d1baae5877b8945John McCall  return __builtin_fabs(__real__(c));
93abd3a857ace59100305790545d1baae5877b8945John McCall}
9443e890b0354c40b9bfe9281a47985e7a4e2fc2c3Eli Friedman
9543e890b0354c40b9bfe9281a47985e7a4e2fc2c3Eli Friedmanvoid t8() {
9643e890b0354c40b9bfe9281a47985e7a4e2fc2c3Eli Friedman  __complex__ int *x = &(__complex__ int){1};
9743e890b0354c40b9bfe9281a47985e7a4e2fc2c3Eli Friedman}
98be6d9130585c33aaea3ee152f365031999d8debeEli Friedman
99be6d9130585c33aaea3ee152f365031999d8debeEli Friedmanconst _Complex double test9const = 0;
100be6d9130585c33aaea3ee152f365031999d8debeEli Friedman_Complex double test9func() { return test9const; }
101