blob: 1c0e7cb2ee950eefd2a462fd9159d688fe49a380 [file] [log] [blame]
Eli Friedman5b088a12010-01-03 00:20:48 +00001// RUN: %clang_cc1 -emit-llvm-only %s
Gabor Greifbacfa022007-07-13 22:15:44 +00002
Gabor Greifb02d4b42007-07-13 23:40:27 +00003int main(void)
Gabor Greifbacfa022007-07-13 22:15:44 +00004{
5 double _Complex a = 5;
6 double _Complex b = 42;
7
Gabor Greifb02d4b42007-07-13 23:40:27 +00008 return a * b != b * a;
Gabor Greifbacfa022007-07-13 22:15:44 +00009}
Chris Lattner12b2be22007-08-10 17:02:59 +000010
11_Complex double bar(int);
12void test(_Complex double*);
Chris Lattnerfd90ac02007-08-23 23:49:47 +000013void takecomplex(_Complex double);
Chris Lattner12b2be22007-08-10 17:02:59 +000014
15void test2(int c) {
16 _Complex double X;
17 X = bar(1);
18 test(&X);
Chris Lattnerfd90ac02007-08-23 23:49:47 +000019 takecomplex(X);
Chris Lattner12b2be22007-08-10 17:02:59 +000020}
21
Chris Lattnerfd90ac02007-08-23 23:49:47 +000022_Complex double g1, g2;
Chris Lattner8ae3a9f2007-08-26 22:41:57 +000023_Complex float cf;
24double D;
Chris Lattnerfd90ac02007-08-23 23:49:47 +000025
26void test3() {
27 g1 = g1 + g2;
28 g1 = g1 - g2;
29 g1 = g1 * g2;
30 g1 = +-~g1;
Chris Lattner46f93d02007-08-24 21:20:17 +000031
32 double Gr = __real g1;
Chris Lattner8ae3a9f2007-08-26 22:41:57 +000033
Chris Lattner9cff1a92007-08-27 16:37:44 +000034 cf += D;
Eli Friedman0934e182013-06-12 01:40:06 +000035 D += cf;
Chris Lattner8ae3a9f2007-08-26 22:41:57 +000036 cf /= g1;
Chris Lattner9cff1a92007-08-27 16:37:44 +000037 g1 = g1 + D;
38 g1 = D + g1;
Chris Lattnerfd90ac02007-08-23 23:49:47 +000039}
Chris Lattner7da36f62007-10-30 22:53:42 +000040
Eli Friedman5b088a12010-01-03 00:20:48 +000041__complex__ int ci1, ci2;
42__complex__ short cs;
43int i;
44void test3int() {
45 ci1 = ci1 + ci2;
46 ci1 = ci1 - ci2;
47 ci1 = ci1 * ci2;
48 ci1 = +-~ci1;
49
50 i = __real ci1;
51
52 cs += i;
Eli Friedman0934e182013-06-12 01:40:06 +000053 D += cf;
Eli Friedman5b088a12010-01-03 00:20:48 +000054 cs /= ci1;
55 ci1 = ci1 + i;
56 ci1 = i + ci1;
57}
58
Chris Lattner7da36f62007-10-30 22:53:42 +000059void t1() {
60 (__real__ cf) = 4.0;
61}
62
63void t2() {
64 (__imag__ cf) = 4.0;
65}
66
Chris Lattner9b2dc282008-04-04 16:54:41 +000067// PR1960
68void t3() {
69 __complex__ long long v = 2;
70}
71
Anders Carlssonad3d6912008-11-25 22:21:48 +000072// PR3131
73float _Complex t4();
74
75void t5() {
76 float _Complex x = t4();
77}
78
Eli Friedman5b088a12010-01-03 00:20:48 +000079void t6() {
80 g1++;
81 g1--;
82 ++g1;
83 --g1;
84 ci1++;
85 ci1--;
86 ++ci1;
87 --ci1;
88}
89
John McCallabd3a852010-05-07 22:08:54 +000090// <rdar://problem/7958272>
91double t7(double _Complex c) {
92 return __builtin_fabs(__real__(c));
93}
Eli Friedman43e890b2011-06-15 20:17:07 +000094
95void t8() {
96 __complex__ int *x = &(__complex__ int){1};
97}
Eli Friedmanbe6d9132013-07-16 20:19:04 +000098
99const _Complex double test9const = 0;
100_Complex double test9func() { return test9const; }
Stephen Hines176edba2014-12-01 14:53:08 -0800101
102// D6217
103void t91() {
104 // Check for proper type promotion of conditional expression
105 char c[(int)(sizeof(typeof((0 ? 2.0f : (_Complex double) 2.0f))) - sizeof(_Complex double))];
106 // Check for proper codegen
107 (0 ? 2.0f : (_Complex double) 2.0f);
108}
109
110void t92() {
111 // Check for proper type promotion of conditional expression
112 char c[(int)(sizeof(typeof((0 ? (_Complex double) 2.0f : 2.0f))) - sizeof(_Complex double))];
113 // Check for proper codegen
114 (0 ? (_Complex double) 2.0f : 2.0f);
115}
116