blob: 0adc0315f0b82606dff40acf7aea405ea018b276 [file] [log] [blame]
Ulrich Weigand76976a72017-07-17 17:46:47 +00001// RUN: %clang_cc1 -triple s390x-linux-gnu -fzvector -target-cpu z14 \
2// RUN: -fno-lax-vector-conversions -W -Wall -Wconversion \
3// RUN: -Werror -fsyntax-only -verify %s
4
5vector signed char sc, sc2;
6vector unsigned char uc, uc2;
7vector bool char bc, bc2;
8
9vector signed short ss, ss2;
10vector unsigned short us, us2;
11vector bool short bs, bs2;
12
13vector signed int si, si2;
14vector unsigned int ui, ui2;
15vector bool int bi, bi2;
16
17vector signed long long sl, sl2;
18vector unsigned long long ul, ul2;
19vector bool long long bl, bl2;
20
21vector double fd, fd2;
22
23vector float ff, ff2;
24
25void foo(void)
26{
27 // -------------------------------------------------------------------------
28 // Test assignment.
29 // -------------------------------------------------------------------------
30
31 ff = ff2;
32
33 sc = ff2; // expected-error {{incompatible type}}
34 ff = sc2; // expected-error {{incompatible type}}
35
36 uc = ff2; // expected-error {{incompatible type}}
37 ff = uc2; // expected-error {{incompatible type}}
38
39 bc = ff2; // expected-error {{incompatible type}}
40 ff = bc2; // expected-error {{incompatible type}}
41
42 fd = ff2; // expected-error {{incompatible type}}
43 ff = fd2; // expected-error {{incompatible type}}
44
45 // -------------------------------------------------------------------------
46 // Test casts to same element width.
47 // -------------------------------------------------------------------------
48
49 ui = (vector unsigned int)ff2;
50 ff = (vector float)si2;
51
52 // -------------------------------------------------------------------------
53 // Test casts to different element width.
54 // -------------------------------------------------------------------------
55
56 uc = (vector unsigned char)ff2;
57 us = (vector unsigned short)ff2;
58 ul = (vector unsigned long long)ff2;
59
60 ff = (vector float)sc2;
61 ff = (vector float)ss2;
62 ff = (vector float)sl2;
63
64 // -------------------------------------------------------------------------
65 // Test unary operators.
66 // -------------------------------------------------------------------------
67
68 ++ff2;
69 ff++;
70
71 --ff2;
72 ff--;
73
74 ff = +ff2;
75
76 ff = -ff2;
77
78 ff = ~ff2; // expected-error {{invalid argument}}
79
80 // -------------------------------------------------------------------------
81 // Test binary arithmetic operators.
82 // -------------------------------------------------------------------------
83
84 ff = ff + ff2;
85 ff = ff + ui2; // expected-error {{cannot convert}}
86 ff = si + ff2; // expected-error {{cannot convert}}
87 ff = fd + ff2; // expected-error {{cannot convert}}
88 ff += ff2;
89 ff += fd2; // expected-error {{cannot convert}}
90 sc += ff2; // expected-error {{cannot convert}}
91
92 ff = ff - ff2;
93 ff = ff - ui2; // expected-error {{cannot convert}}
94 ff = si - ff2; // expected-error {{cannot convert}}
95 ff = fd - ff2; // expected-error {{cannot convert}}
96 ff -= ff2;
97 ff -= fd2; // expected-error {{cannot convert}}
98 sc -= ff2; // expected-error {{cannot convert}}
99
100 ff = ff * ff2;
101 ff = ff * ui2; // expected-error {{cannot convert}}
102 ff = si * ff2; // expected-error {{cannot convert}}
103 ff = fd * ff2; // expected-error {{cannot convert}}
104 ff *= ff2;
105 ff *= fd2; // expected-error {{cannot convert}}
106 sc *= ff2; // expected-error {{cannot convert}}
107
108 ff = ff / ff2;
109 ff = ff / ui2; // expected-error {{cannot convert}}
110 ff = si / ff2; // expected-error {{cannot convert}}
111 ff = fd / ff2; // expected-error {{cannot convert}}
112 ff /= ff2;
113 ff /= fd2; // expected-error {{cannot convert}}
114 sc /= ff2; // expected-error {{cannot convert}}
115
116 ff = ff % ff2; // expected-error {{invalid operands}}
117 ff = ff % ui2; // expected-error {{invalid operands}}
118 ff = si % ff2; // expected-error {{invalid operands}}
119 ff = fd % ff2; // expected-error {{invalid operands}}
120 ff %= ff2; // expected-error {{invalid operands}}
121 ff %= fd2; // expected-error {{invalid operands}}
122 sc %= ff2; // expected-error {{invalid operands}}
123
124 // -------------------------------------------------------------------------
125 // Test bitwise binary operators.
126 // -------------------------------------------------------------------------
127
128 ff = ff & ff2; // expected-error {{invalid operands}}
129 ff = bi & ff2; // expected-error {{invalid operands}}
130 ff = fd & ff2; // expected-error {{invalid operands}}
131 ff = ff & bi2; // expected-error {{invalid operands}}
132 ff = ff & si2; // expected-error {{invalid operands}}
133 ff = ff & ui2; // expected-error {{invalid operands}}
134 sc &= ff2; // expected-error {{invalid operands}}
135 ff &= bc2; // expected-error {{invalid operands}}
136 ff &= fd2; // expected-error {{invalid operands}}
137
138 ff = ff | ff2; // expected-error {{invalid operands}}
139 ff = bi | ff2; // expected-error {{invalid operands}}
140 ff = fd | ff2; // expected-error {{invalid operands}}
141 ff = ff | bi2; // expected-error {{invalid operands}}
142 ff = ff | si2; // expected-error {{invalid operands}}
143 ff = ff | ui2; // expected-error {{invalid operands}}
144 sc |= ff2; // expected-error {{invalid operands}}
145 ff |= bc2; // expected-error {{invalid operands}}
146 ff |= fd2; // expected-error {{invalid operands}}
147
148 ff = ff ^ ff2; // expected-error {{invalid operands}}
149 ff = bi ^ ff2; // expected-error {{invalid operands}}
150 ff = fd ^ ff2; // expected-error {{invalid operands}}
151 ff = ff ^ bi2; // expected-error {{invalid operands}}
152 ff = ff ^ si2; // expected-error {{invalid operands}}
153 ff = ff ^ ui2; // expected-error {{invalid operands}}
154 sc ^= ff2; // expected-error {{invalid operands}}
155 ff ^= bc2; // expected-error {{invalid operands}}
156 ff ^= fd2; // expected-error {{invalid operands}}
157
158 // -------------------------------------------------------------------------
159 // Test shift operators.
160 // -------------------------------------------------------------------------
161
162 ff = ff << ff2; // expected-error {{integer is required}}
163 ff = ff << fd2; // expected-error {{integer is required}}
164 ff = ff << ui2; // expected-error {{integer is required}}
165 ff = sl << ff2; // expected-error {{integer is required}}
166 sc <<= ff2; // expected-error {{integer is required}}
167 ff <<= ff2; // expected-error {{integer is required}}
168 fd <<= ff2; // expected-error {{integer is required}}
169
170 ff = ff >> ff2; // expected-error {{integer is required}}
171 ff = ff >> fd2; // expected-error {{integer is required}}
172 ff = ff >> ui2; // expected-error {{integer is required}}
173 ff = sl >> ff2; // expected-error {{integer is required}}
174 sc >>= ff2; // expected-error {{integer is required}}
175 ff >>= ff2; // expected-error {{integer is required}}
176 fd >>= ff2; // expected-error {{integer is required}}
177
178 // -------------------------------------------------------------------------
179 // Test comparison operators.
180 // -------------------------------------------------------------------------
181
182 (void)(ff == ff2);
183 (void)(ff == fd2); // expected-error {{cannot convert}}
184 (void)(ff == ui2); // expected-error {{cannot convert}}
185 (void)(ui == ff2); // expected-error {{cannot convert}}
186
187 (void)(ff != ff2);
188 (void)(ff != fd2); // expected-error {{cannot convert}}
189 (void)(ff != ui2); // expected-error {{cannot convert}}
190 (void)(ui != ff2); // expected-error {{cannot convert}}
191
192 (void)(ff <= ff2);
193 (void)(ff <= fd2); // expected-error {{cannot convert}}
194 (void)(ff <= ui2); // expected-error {{cannot convert}}
195 (void)(ui <= ff2); // expected-error {{cannot convert}}
196
197 (void)(ff >= ff2);
198 (void)(ff >= fd2); // expected-error {{cannot convert}}
199 (void)(ff >= ui2); // expected-error {{cannot convert}}
200 (void)(ui >= ff2); // expected-error {{cannot convert}}
201
202 (void)(ff < ff2);
203 (void)(ff < fd2); // expected-error {{cannot convert}}
204 (void)(ff < ui2); // expected-error {{cannot convert}}
205 (void)(ui < ff2); // expected-error {{cannot convert}}
206
207 (void)(ff > ff2);
208 (void)(ff > fd2); // expected-error {{cannot convert}}
209 (void)(ff > ui2); // expected-error {{cannot convert}}
210 (void)(ui > ff2); // expected-error {{cannot convert}}
211}