xref: /aosp_15_r20/external/clang/test/Sema/zvector.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -triple s390x-linux-gnu -fzvector \
2*67e74705SXin Li // RUN:  -fno-lax-vector-conversions -W -Wall -Wconversion \
3*67e74705SXin Li // RUN:  -Werror -fsyntax-only -verify %s
4*67e74705SXin Li 
5*67e74705SXin Li vector signed char sc, sc2;
6*67e74705SXin Li vector unsigned char uc, uc2;
7*67e74705SXin Li vector bool char bc, bc2;
8*67e74705SXin Li 
9*67e74705SXin Li vector signed short ss, ss2;
10*67e74705SXin Li vector unsigned short us, us2;
11*67e74705SXin Li vector bool short bs, bs2;
12*67e74705SXin Li 
13*67e74705SXin Li vector signed int si, si2;
14*67e74705SXin Li vector unsigned int ui, ui2;
15*67e74705SXin Li vector bool int bi, bi2;
16*67e74705SXin Li 
17*67e74705SXin Li vector signed long long sl, sl2;
18*67e74705SXin Li vector unsigned long long ul, ul2;
19*67e74705SXin Li vector bool long long bl, bl2;
20*67e74705SXin Li 
21*67e74705SXin Li vector double fd, fd2;
22*67e74705SXin Li 
23*67e74705SXin Li vector long ll; // expected-error {{cannot use 'long' with '__vector'}}
24*67e74705SXin Li vector float ff; // expected-error {{cannot use 'float' with '__vector'}}
25*67e74705SXin Li 
26*67e74705SXin Li signed char sc_scalar;
27*67e74705SXin Li unsigned char uc_scalar;
28*67e74705SXin Li 
29*67e74705SXin Li signed short ss_scalar;
30*67e74705SXin Li unsigned short us_scalar;
31*67e74705SXin Li 
32*67e74705SXin Li signed int si_scalar;
33*67e74705SXin Li unsigned int ui_scalar;
34*67e74705SXin Li 
35*67e74705SXin Li signed long sl_scalar;
36*67e74705SXin Li unsigned long ul_scalar;
37*67e74705SXin Li 
38*67e74705SXin Li double fd_scalar;
39*67e74705SXin Li 
foo(void)40*67e74705SXin Li void foo(void)
41*67e74705SXin Li {
42*67e74705SXin Li   // -------------------------------------------------------------------------
43*67e74705SXin Li   // Test assignment.
44*67e74705SXin Li   // -------------------------------------------------------------------------
45*67e74705SXin Li 
46*67e74705SXin Li   sc = sc2;
47*67e74705SXin Li   uc = uc2;
48*67e74705SXin Li   bc = bc2;
49*67e74705SXin Li 
50*67e74705SXin Li   ss = ss2;
51*67e74705SXin Li   us = us2;
52*67e74705SXin Li   bs = bs2;
53*67e74705SXin Li 
54*67e74705SXin Li   si = si2;
55*67e74705SXin Li   ui = ui2;
56*67e74705SXin Li   bi = bi2;
57*67e74705SXin Li 
58*67e74705SXin Li   sl = sl2;
59*67e74705SXin Li   ul = ul2;
60*67e74705SXin Li   bl = bl2;
61*67e74705SXin Li   fd = fd2;
62*67e74705SXin Li 
63*67e74705SXin Li   sc = uc2; // expected-error {{incompatible type}}
64*67e74705SXin Li   sc = bc2; // expected-error {{incompatible type}}
65*67e74705SXin Li   uc = sc2; // expected-error {{incompatible type}}
66*67e74705SXin Li   uc = bc2; // expected-error {{incompatible type}}
67*67e74705SXin Li   bc = sc2; // expected-error {{incompatible type}}
68*67e74705SXin Li   bc = uc2; // expected-error {{incompatible type}}
69*67e74705SXin Li 
70*67e74705SXin Li   sc = sc_scalar; // expected-error {{incompatible type}}
71*67e74705SXin Li   sc = uc_scalar; // expected-error {{incompatible type}}
72*67e74705SXin Li   uc = sc_scalar; // expected-error {{incompatible type}}
73*67e74705SXin Li   uc = uc_scalar; // expected-error {{incompatible type}}
74*67e74705SXin Li   bc = sc_scalar; // expected-error {{incompatible type}}
75*67e74705SXin Li   bc = uc_scalar; // expected-error {{incompatible type}}
76*67e74705SXin Li 
77*67e74705SXin Li   sc = ss2; // expected-error {{incompatible type}}
78*67e74705SXin Li   sc = si2; // expected-error {{incompatible type}}
79*67e74705SXin Li   sc = sl2; // expected-error {{incompatible type}}
80*67e74705SXin Li   sc = fd2; // expected-error {{incompatible type}}
81*67e74705SXin Li 
82*67e74705SXin Li   ss = sc2; // expected-error {{incompatible type}}
83*67e74705SXin Li   si = sc2; // expected-error {{incompatible type}}
84*67e74705SXin Li   sl = sc2; // expected-error {{incompatible type}}
85*67e74705SXin Li   fd = sc2; // expected-error {{incompatible type}}
86*67e74705SXin Li 
87*67e74705SXin Li   uc = us2; // expected-error {{incompatible type}}
88*67e74705SXin Li   uc = ui2; // expected-error {{incompatible type}}
89*67e74705SXin Li   uc = ul2; // expected-error {{incompatible type}}
90*67e74705SXin Li   uc = fd2; // expected-error {{incompatible type}}
91*67e74705SXin Li 
92*67e74705SXin Li   us = uc2; // expected-error {{incompatible type}}
93*67e74705SXin Li   ui = uc2; // expected-error {{incompatible type}}
94*67e74705SXin Li   ul = uc2; // expected-error {{incompatible type}}
95*67e74705SXin Li   fd = uc2; // expected-error {{incompatible type}}
96*67e74705SXin Li 
97*67e74705SXin Li   bc = us2; // expected-error {{incompatible type}}
98*67e74705SXin Li   bc = ui2; // expected-error {{incompatible type}}
99*67e74705SXin Li   bc = ul2; // expected-error {{incompatible type}}
100*67e74705SXin Li   bc = fd2; // expected-error {{incompatible type}}
101*67e74705SXin Li 
102*67e74705SXin Li   bs = bc2; // expected-error {{incompatible type}}
103*67e74705SXin Li   bi = bc2; // expected-error {{incompatible type}}
104*67e74705SXin Li   bl = bc2; // expected-error {{incompatible type}}
105*67e74705SXin Li   fd = bc2; // expected-error {{incompatible type}}
106*67e74705SXin Li 
107*67e74705SXin Li   // -------------------------------------------------------------------------
108*67e74705SXin Li   // Test casts to same element width.
109*67e74705SXin Li   // -------------------------------------------------------------------------
110*67e74705SXin Li 
111*67e74705SXin Li   sc = (vector signed char)bc2;
112*67e74705SXin Li   bc = (vector bool char)uc2;
113*67e74705SXin Li   uc = (vector unsigned char)sc2;
114*67e74705SXin Li 
115*67e74705SXin Li   ss = (vector signed short)bs2;
116*67e74705SXin Li   bs = (vector bool short)us2;
117*67e74705SXin Li   us = (vector unsigned short)ss2;
118*67e74705SXin Li 
119*67e74705SXin Li   si = (vector signed int)bi2;
120*67e74705SXin Li   bi = (vector bool int)ui2;
121*67e74705SXin Li   ui = (vector unsigned int)si2;
122*67e74705SXin Li 
123*67e74705SXin Li   sl = (vector signed long long)bl2;
124*67e74705SXin Li   bl = (vector bool long long)ul2;
125*67e74705SXin Li   ul = (vector unsigned long long)fd2;
126*67e74705SXin Li   fd = (vector double)sl2;
127*67e74705SXin Li 
128*67e74705SXin Li   // -------------------------------------------------------------------------
129*67e74705SXin Li   // Test casts to different element width.
130*67e74705SXin Li   // -------------------------------------------------------------------------
131*67e74705SXin Li 
132*67e74705SXin Li   sc = (vector signed char)bs2;
133*67e74705SXin Li   bc = (vector bool char)us2;
134*67e74705SXin Li   uc = (vector unsigned char)fd2;
135*67e74705SXin Li 
136*67e74705SXin Li   ss = (vector signed short)bi2;
137*67e74705SXin Li   bs = (vector bool short)ui2;
138*67e74705SXin Li   us = (vector unsigned short)fd2;
139*67e74705SXin Li 
140*67e74705SXin Li   si = (vector signed int)bl2;
141*67e74705SXin Li   bi = (vector bool int)ul2;
142*67e74705SXin Li   ui = (vector unsigned int)fd2;
143*67e74705SXin Li 
144*67e74705SXin Li   sl = (vector signed long long)bc2;
145*67e74705SXin Li   bl = (vector bool long long)uc2;
146*67e74705SXin Li   ul = (vector unsigned long long)sc2;
147*67e74705SXin Li   fd = (vector double)sc2;
148*67e74705SXin Li 
149*67e74705SXin Li   // -------------------------------------------------------------------------
150*67e74705SXin Li   // Test ++.
151*67e74705SXin Li   // -------------------------------------------------------------------------
152*67e74705SXin Li 
153*67e74705SXin Li   ++sc2;
154*67e74705SXin Li   ++uc2;
155*67e74705SXin Li   ++bc2; // expected-error {{cannot increment}}
156*67e74705SXin Li 
157*67e74705SXin Li   ++ss2;
158*67e74705SXin Li   ++us2;
159*67e74705SXin Li   ++bs2; // expected-error {{cannot increment}}
160*67e74705SXin Li 
161*67e74705SXin Li   ++si2;
162*67e74705SXin Li   ++ui2;
163*67e74705SXin Li   ++bi2; // expected-error {{cannot increment}}
164*67e74705SXin Li 
165*67e74705SXin Li   ++sl2;
166*67e74705SXin Li   ++ul2;
167*67e74705SXin Li   ++bl2; // expected-error {{cannot increment}}
168*67e74705SXin Li 
169*67e74705SXin Li   ++fd2;
170*67e74705SXin Li 
171*67e74705SXin Li   sc++;
172*67e74705SXin Li   uc++;
173*67e74705SXin Li   bc++; // expected-error {{cannot increment}}
174*67e74705SXin Li 
175*67e74705SXin Li   ss++;
176*67e74705SXin Li   us++;
177*67e74705SXin Li   bs++; // expected-error {{cannot increment}}
178*67e74705SXin Li 
179*67e74705SXin Li   si++;
180*67e74705SXin Li   ui++;
181*67e74705SXin Li   bi++; // expected-error {{cannot increment}}
182*67e74705SXin Li 
183*67e74705SXin Li   sl++;
184*67e74705SXin Li   ul++;
185*67e74705SXin Li   bl++; // expected-error {{cannot increment}}
186*67e74705SXin Li 
187*67e74705SXin Li   fd++;
188*67e74705SXin Li 
189*67e74705SXin Li   // -------------------------------------------------------------------------
190*67e74705SXin Li   // Test --.
191*67e74705SXin Li   // -------------------------------------------------------------------------
192*67e74705SXin Li 
193*67e74705SXin Li   --sc2;
194*67e74705SXin Li   --uc2;
195*67e74705SXin Li   --bc2; // expected-error {{cannot decrement}}
196*67e74705SXin Li 
197*67e74705SXin Li   --ss2;
198*67e74705SXin Li   --us2;
199*67e74705SXin Li   --bs2; // expected-error {{cannot decrement}}
200*67e74705SXin Li 
201*67e74705SXin Li   --si2;
202*67e74705SXin Li   --ui2;
203*67e74705SXin Li   --bi2; // expected-error {{cannot decrement}}
204*67e74705SXin Li 
205*67e74705SXin Li   --sl2;
206*67e74705SXin Li   --ul2;
207*67e74705SXin Li   --bl2; // expected-error {{cannot decrement}}
208*67e74705SXin Li 
209*67e74705SXin Li   --fd2;
210*67e74705SXin Li 
211*67e74705SXin Li   sc--;
212*67e74705SXin Li   uc--;
213*67e74705SXin Li   bc--; // expected-error {{cannot decrement}}
214*67e74705SXin Li 
215*67e74705SXin Li   ss--;
216*67e74705SXin Li   us--;
217*67e74705SXin Li   bs--; // expected-error {{cannot decrement}}
218*67e74705SXin Li 
219*67e74705SXin Li   si--;
220*67e74705SXin Li   ui--;
221*67e74705SXin Li   bi--; // expected-error {{cannot decrement}}
222*67e74705SXin Li 
223*67e74705SXin Li   sl--;
224*67e74705SXin Li   ul--;
225*67e74705SXin Li   bl--; // expected-error {{cannot decrement}}
226*67e74705SXin Li 
227*67e74705SXin Li   fd--;
228*67e74705SXin Li 
229*67e74705SXin Li   // -------------------------------------------------------------------------
230*67e74705SXin Li   // Test unary +.
231*67e74705SXin Li   // -------------------------------------------------------------------------
232*67e74705SXin Li 
233*67e74705SXin Li   sc = +sc2;
234*67e74705SXin Li   uc = +uc2;
235*67e74705SXin Li   bc = +bc2; // expected-error {{invalid argument type}}
236*67e74705SXin Li 
237*67e74705SXin Li   ss = +ss2;
238*67e74705SXin Li   us = +us2;
239*67e74705SXin Li   bs = +bs2; // expected-error {{invalid argument type}}
240*67e74705SXin Li 
241*67e74705SXin Li   si = +si2;
242*67e74705SXin Li   ui = +ui2;
243*67e74705SXin Li   bi = +bi2; // expected-error {{invalid argument type}}
244*67e74705SXin Li 
245*67e74705SXin Li   sl = +sl2;
246*67e74705SXin Li   ul = +ul2;
247*67e74705SXin Li   bl = +bl2; // expected-error {{invalid argument type}}
248*67e74705SXin Li 
249*67e74705SXin Li   fd = +fd2;
250*67e74705SXin Li 
251*67e74705SXin Li   sc = +si2; // expected-error {{assigning to}}
252*67e74705SXin Li   ui = +si2; // expected-error {{assigning to}}
253*67e74705SXin Li   ui = +bi2; // expected-error {{invalid argument type}}
254*67e74705SXin Li 
255*67e74705SXin Li   // -------------------------------------------------------------------------
256*67e74705SXin Li   // Test unary -.
257*67e74705SXin Li   // -------------------------------------------------------------------------
258*67e74705SXin Li 
259*67e74705SXin Li   sc = -sc2;
260*67e74705SXin Li   uc = -uc2;
261*67e74705SXin Li   bc = -bc2; // expected-error {{invalid argument type}}
262*67e74705SXin Li 
263*67e74705SXin Li   ss = -ss2;
264*67e74705SXin Li   us = -us2;
265*67e74705SXin Li   bs = -bs2; // expected-error {{invalid argument type}}
266*67e74705SXin Li 
267*67e74705SXin Li   si = -si2;
268*67e74705SXin Li   ui = -ui2;
269*67e74705SXin Li   bi = -bi2; // expected-error {{invalid argument type}}
270*67e74705SXin Li 
271*67e74705SXin Li   sl = -sl2;
272*67e74705SXin Li   ul = -ul2;
273*67e74705SXin Li   bl = -bl2; // expected-error {{invalid argument type}}
274*67e74705SXin Li 
275*67e74705SXin Li   fd = -fd2;
276*67e74705SXin Li 
277*67e74705SXin Li   sc = -si2; // expected-error {{assigning to}}
278*67e74705SXin Li   ui = -si2; // expected-error {{assigning to}}
279*67e74705SXin Li   ui = -bi2; // expected-error {{invalid argument type}}
280*67e74705SXin Li 
281*67e74705SXin Li   // -------------------------------------------------------------------------
282*67e74705SXin Li   // Test ~.
283*67e74705SXin Li   // -------------------------------------------------------------------------
284*67e74705SXin Li 
285*67e74705SXin Li   sc = ~sc2;
286*67e74705SXin Li   uc = ~uc2;
287*67e74705SXin Li   bc = ~bc2;
288*67e74705SXin Li 
289*67e74705SXin Li   ss = ~ss2;
290*67e74705SXin Li   us = ~us2;
291*67e74705SXin Li   bs = ~bs2;
292*67e74705SXin Li 
293*67e74705SXin Li   si = ~si2;
294*67e74705SXin Li   ui = ~ui2;
295*67e74705SXin Li   bi = ~bi2;
296*67e74705SXin Li 
297*67e74705SXin Li   sl = ~sl2;
298*67e74705SXin Li   ul = ~ul2;
299*67e74705SXin Li   bl = ~bl2;
300*67e74705SXin Li 
301*67e74705SXin Li   fd = ~fd2; // expected-error {{invalid argument}}
302*67e74705SXin Li 
303*67e74705SXin Li   sc = ~si2; // expected-error {{assigning to}}
304*67e74705SXin Li   ui = ~si2; // expected-error {{assigning to}}
305*67e74705SXin Li   ui = ~bi2; // expected-error {{assigning to}}
306*67e74705SXin Li 
307*67e74705SXin Li   // -------------------------------------------------------------------------
308*67e74705SXin Li   // Test binary +.
309*67e74705SXin Li   // -------------------------------------------------------------------------
310*67e74705SXin Li 
311*67e74705SXin Li   sc = sc + sc2;
312*67e74705SXin Li   sc = sc + uc2; // expected-error {{cannot convert}}
313*67e74705SXin Li   sc = uc + sc2; // expected-error {{cannot convert}}
314*67e74705SXin Li   sc = sc + bc2;
315*67e74705SXin Li   sc = bc + sc2;
316*67e74705SXin Li 
317*67e74705SXin Li   uc = uc + uc2;
318*67e74705SXin Li   uc = sc + uc2; // expected-error {{cannot convert}}
319*67e74705SXin Li   uc = uc + sc2; // expected-error {{cannot convert}}
320*67e74705SXin Li   uc = bc + uc2;
321*67e74705SXin Li   uc = uc + bc2;
322*67e74705SXin Li 
323*67e74705SXin Li   bc = bc + bc2; // expected-error {{invalid operands}}
324*67e74705SXin Li   bc = bc + uc2; // expected-error {{incompatible type}}
325*67e74705SXin Li   bc = uc + bc2; // expected-error {{incompatible type}}
326*67e74705SXin Li   bc = bc + sc2; // expected-error {{incompatible type}}
327*67e74705SXin Li   bc = sc + bc2; // expected-error {{incompatible type}}
328*67e74705SXin Li 
329*67e74705SXin Li   sc = sc + sc_scalar; // expected-error {{cannot convert}}
330*67e74705SXin Li   sc = sc + uc_scalar; // expected-error {{cannot convert}}
331*67e74705SXin Li   sc = sc_scalar + sc; // expected-error {{cannot convert}}
332*67e74705SXin Li   sc = uc_scalar + sc; // expected-error {{cannot convert}}
333*67e74705SXin Li   uc = uc + sc_scalar; // expected-error {{cannot convert}}
334*67e74705SXin Li   uc = uc + uc_scalar; // expected-error {{cannot convert}}
335*67e74705SXin Li   uc = sc_scalar + uc; // expected-error {{cannot convert}}
336*67e74705SXin Li   uc = uc_scalar + uc; // expected-error {{cannot convert}}
337*67e74705SXin Li 
338*67e74705SXin Li   ss = ss + ss2;
339*67e74705SXin Li   us = us + us2;
340*67e74705SXin Li   bs = bs + bs2; // expected-error {{invalid operands}}
341*67e74705SXin Li 
342*67e74705SXin Li   si = si + si2;
343*67e74705SXin Li   ui = ui + ui2;
344*67e74705SXin Li   bi = bi + bi2; // expected-error {{invalid operands}}
345*67e74705SXin Li 
346*67e74705SXin Li   sl = sl + sl2;
347*67e74705SXin Li   ul = ul + ul2;
348*67e74705SXin Li   bl = bl + bl2; // expected-error {{invalid operands}}
349*67e74705SXin Li 
350*67e74705SXin Li   fd = fd + fd2;
351*67e74705SXin Li   fd = fd + ul2; // expected-error {{cannot convert}}
352*67e74705SXin Li   fd = sl + fd2; // expected-error {{cannot convert}}
353*67e74705SXin Li 
354*67e74705SXin Li   sc += sc2;
355*67e74705SXin Li   sc += uc2; // expected-error {{cannot convert}}
356*67e74705SXin Li   sc += bc2;
357*67e74705SXin Li 
358*67e74705SXin Li   uc += uc2;
359*67e74705SXin Li   uc += sc2; // expected-error {{cannot convert}}
360*67e74705SXin Li   uc += bc2;
361*67e74705SXin Li 
362*67e74705SXin Li   bc += bc2; // expected-error {{invalid operands}}
363*67e74705SXin Li   bc += sc2; // expected-error {{cannot convert}}
364*67e74705SXin Li   bc += uc2; // expected-error {{cannot convert}}
365*67e74705SXin Li 
366*67e74705SXin Li   sc += ss2; // expected-error {{cannot convert}}
367*67e74705SXin Li   sc += si2; // expected-error {{cannot convert}}
368*67e74705SXin Li   sc += sl2; // expected-error {{cannot convert}}
369*67e74705SXin Li   sc += fd2; // expected-error {{cannot convert}}
370*67e74705SXin Li 
371*67e74705SXin Li   sc += sc_scalar; // expected-error {{cannot convert}}
372*67e74705SXin Li   sc += uc_scalar; // expected-error {{cannot convert}}
373*67e74705SXin Li   uc += sc_scalar; // expected-error {{cannot convert}}
374*67e74705SXin Li   uc += uc_scalar; // expected-error {{cannot convert}}
375*67e74705SXin Li 
376*67e74705SXin Li   ss += ss2;
377*67e74705SXin Li   us += us2;
378*67e74705SXin Li   bs += bs2; // expected-error {{invalid operands}}
379*67e74705SXin Li 
380*67e74705SXin Li   si += si2;
381*67e74705SXin Li   ui += ui2;
382*67e74705SXin Li   bi += bi2; // expected-error {{invalid operands}}
383*67e74705SXin Li 
384*67e74705SXin Li   sl += sl2;
385*67e74705SXin Li   ul += ul2;
386*67e74705SXin Li   bl += bl2; // expected-error {{invalid operands}}
387*67e74705SXin Li 
388*67e74705SXin Li   fd += fd2;
389*67e74705SXin Li 
390*67e74705SXin Li   // -------------------------------------------------------------------------
391*67e74705SXin Li   // Test that binary + rules apply to binary - too.
392*67e74705SXin Li   // -------------------------------------------------------------------------
393*67e74705SXin Li 
394*67e74705SXin Li   sc = sc - sc2;
395*67e74705SXin Li   uc = uc - uc2;
396*67e74705SXin Li   bc = bc - bc2; // expected-error {{invalid operands}}
397*67e74705SXin Li 
398*67e74705SXin Li   sc = uc - sc2; // expected-error {{cannot convert}}
399*67e74705SXin Li   sc = sc - bc2;
400*67e74705SXin Li   uc = bc - uc2;
401*67e74705SXin Li 
402*67e74705SXin Li   sc -= sc2;
403*67e74705SXin Li   uc -= uc2;
404*67e74705SXin Li   bc -= bc2; // expected-error {{invalid operands}}
405*67e74705SXin Li 
406*67e74705SXin Li   sc -= uc2; // expected-error {{cannot convert}}
407*67e74705SXin Li   uc -= bc2;
408*67e74705SXin Li   bc -= sc2; // expected-error {{cannot convert}}
409*67e74705SXin Li 
410*67e74705SXin Li   ss -= ss2;
411*67e74705SXin Li   us -= us2;
412*67e74705SXin Li   bs -= bs2; // expected-error {{invalid operands}}
413*67e74705SXin Li 
414*67e74705SXin Li   si -= si2;
415*67e74705SXin Li   ui -= ui2;
416*67e74705SXin Li   bi -= bi2; // expected-error {{invalid operands}}
417*67e74705SXin Li 
418*67e74705SXin Li   sl -= sl2;
419*67e74705SXin Li   ul -= ul2;
420*67e74705SXin Li   bl -= bl2; // expected-error {{invalid operands}}
421*67e74705SXin Li 
422*67e74705SXin Li   fd -= fd2;
423*67e74705SXin Li 
424*67e74705SXin Li   // -------------------------------------------------------------------------
425*67e74705SXin Li   // Test that binary + rules apply to * too.  64-bit integer multiplication
426*67e74705SXin Li   // is not required by the spec and so isn't tested here.
427*67e74705SXin Li   // -------------------------------------------------------------------------
428*67e74705SXin Li 
429*67e74705SXin Li   sc = sc * sc2;
430*67e74705SXin Li   uc = uc * uc2;
431*67e74705SXin Li   bc = bc * bc2; // expected-error {{invalid operands}}
432*67e74705SXin Li 
433*67e74705SXin Li   sc = uc * sc2; // expected-error {{cannot convert}}
434*67e74705SXin Li   sc = sc * bc2; // expected-error {{cannot convert}}
435*67e74705SXin Li   uc = bc * uc2; // expected-error {{cannot convert}}
436*67e74705SXin Li 
437*67e74705SXin Li   sc *= sc2;
438*67e74705SXin Li   uc *= uc2;
439*67e74705SXin Li   bc *= bc2; // expected-error {{invalid operands}}
440*67e74705SXin Li 
441*67e74705SXin Li   sc *= uc2; // expected-error {{cannot convert}}
442*67e74705SXin Li   uc *= bc2; // expected-error {{cannot convert}}
443*67e74705SXin Li   bc *= sc2; // expected-error {{cannot convert}}
444*67e74705SXin Li 
445*67e74705SXin Li   ss *= ss2;
446*67e74705SXin Li   us *= us2;
447*67e74705SXin Li   bs *= bs2; // expected-error {{invalid operands}}
448*67e74705SXin Li 
449*67e74705SXin Li   si *= si2;
450*67e74705SXin Li   ui *= ui2;
451*67e74705SXin Li   bi *= bi2; // expected-error {{invalid operands}}
452*67e74705SXin Li 
453*67e74705SXin Li   sl *= sl2;
454*67e74705SXin Li   ul *= ul2;
455*67e74705SXin Li   bl *= bl2; // expected-error {{invalid operands}}
456*67e74705SXin Li 
457*67e74705SXin Li   fd *= fd2;
458*67e74705SXin Li 
459*67e74705SXin Li   // -------------------------------------------------------------------------
460*67e74705SXin Li   // Test that * rules apply to / too.
461*67e74705SXin Li   // -------------------------------------------------------------------------
462*67e74705SXin Li 
463*67e74705SXin Li   sc = sc / sc2;
464*67e74705SXin Li   uc = uc / uc2;
465*67e74705SXin Li   bc = bc / bc2; // expected-error {{invalid operands}}
466*67e74705SXin Li 
467*67e74705SXin Li   sc = uc / sc2; // expected-error {{cannot convert}}
468*67e74705SXin Li   sc = sc / bc2; // expected-error {{cannot convert}}
469*67e74705SXin Li   uc = bc / uc2; // expected-error {{cannot convert}}
470*67e74705SXin Li 
471*67e74705SXin Li   sc /= sc2;
472*67e74705SXin Li   uc /= uc2;
473*67e74705SXin Li   bc /= bc2; // expected-error {{invalid operands}}
474*67e74705SXin Li 
475*67e74705SXin Li   sc /= uc2; // expected-error {{cannot convert}}
476*67e74705SXin Li   uc /= bc2; // expected-error {{cannot convert}}
477*67e74705SXin Li   bc /= sc2; // expected-error {{cannot convert}}
478*67e74705SXin Li 
479*67e74705SXin Li   ss /= ss2;
480*67e74705SXin Li   us /= us2;
481*67e74705SXin Li   bs /= bs2; // expected-error {{invalid operands}}
482*67e74705SXin Li 
483*67e74705SXin Li   si /= si2;
484*67e74705SXin Li   ui /= ui2;
485*67e74705SXin Li   bi /= bi2; // expected-error {{invalid operands}}
486*67e74705SXin Li 
487*67e74705SXin Li   sl /= sl2;
488*67e74705SXin Li   ul /= ul2;
489*67e74705SXin Li   bl /= bl2; // expected-error {{invalid operands}}
490*67e74705SXin Li 
491*67e74705SXin Li   fd /= fd2;
492*67e74705SXin Li 
493*67e74705SXin Li   // -------------------------------------------------------------------------
494*67e74705SXin Li   // Test that / rules apply to % too, except that doubles are not allowed.
495*67e74705SXin Li   // -------------------------------------------------------------------------
496*67e74705SXin Li 
497*67e74705SXin Li   sc = sc % sc2;
498*67e74705SXin Li   uc = uc % uc2;
499*67e74705SXin Li   bc = bc % bc2; // expected-error {{invalid operands}}
500*67e74705SXin Li 
501*67e74705SXin Li   sc = uc % sc2; // expected-error {{cannot convert}}
502*67e74705SXin Li   sc = sc % bc2; // expected-error {{cannot convert}}
503*67e74705SXin Li   uc = bc % uc2; // expected-error {{cannot convert}}
504*67e74705SXin Li 
505*67e74705SXin Li   sc %= sc2;
506*67e74705SXin Li   uc %= uc2;
507*67e74705SXin Li   bc %= bc2; // expected-error {{invalid operands}}
508*67e74705SXin Li 
509*67e74705SXin Li   sc %= uc2; // expected-error {{cannot convert}}
510*67e74705SXin Li   uc %= bc2; // expected-error {{cannot convert}}
511*67e74705SXin Li   bc %= sc2; // expected-error {{cannot convert}}
512*67e74705SXin Li 
513*67e74705SXin Li   ss %= ss2;
514*67e74705SXin Li   us %= us2;
515*67e74705SXin Li   bs %= bs2; // expected-error {{invalid operands}}
516*67e74705SXin Li 
517*67e74705SXin Li   si %= si2;
518*67e74705SXin Li   ui %= ui2;
519*67e74705SXin Li   bi %= bi2; // expected-error {{invalid operands}}
520*67e74705SXin Li 
521*67e74705SXin Li   sl %= sl2;
522*67e74705SXin Li   ul %= ul2;
523*67e74705SXin Li   bl %= bl2; // expected-error {{invalid operands}}
524*67e74705SXin Li 
525*67e74705SXin Li   fd %= fd2; // expected-error {{invalid operands}}
526*67e74705SXin Li 
527*67e74705SXin Li   // -------------------------------------------------------------------------
528*67e74705SXin Li   // Test &.
529*67e74705SXin Li   // -------------------------------------------------------------------------
530*67e74705SXin Li 
531*67e74705SXin Li   sc = sc & sc2;
532*67e74705SXin Li   sc = sc & uc2; // expected-error {{cannot convert}}
533*67e74705SXin Li   sc = uc & sc2; // expected-error {{cannot convert}}
534*67e74705SXin Li   sc = sc & bc2;
535*67e74705SXin Li   sc = bc & sc2;
536*67e74705SXin Li 
537*67e74705SXin Li   uc = uc & uc2;
538*67e74705SXin Li   uc = sc & uc2; // expected-error {{cannot convert}}
539*67e74705SXin Li   uc = uc & sc2; // expected-error {{cannot convert}}
540*67e74705SXin Li   uc = bc & uc2;
541*67e74705SXin Li   uc = uc & bc2;
542*67e74705SXin Li 
543*67e74705SXin Li   bc = bc & bc2;
544*67e74705SXin Li   bc = bc & uc2; // expected-error {{incompatible type}}
545*67e74705SXin Li   bc = uc & bc2; // expected-error {{incompatible type}}
546*67e74705SXin Li   bc = bc & sc2; // expected-error {{incompatible type}}
547*67e74705SXin Li   bc = sc & bc2; // expected-error {{incompatible type}}
548*67e74705SXin Li 
549*67e74705SXin Li   fd = fd & fd2; // expected-error {{invalid operands}}
550*67e74705SXin Li   fd = bl & fd2; // expected-error {{invalid operands}}
551*67e74705SXin Li   fd = fd & bl2; // expected-error {{invalid operands}}
552*67e74705SXin Li   fd = fd & sl2; // expected-error {{invalid operands}}
553*67e74705SXin Li   fd = fd & ul2; // expected-error {{invalid operands}}
554*67e74705SXin Li 
555*67e74705SXin Li   sc &= sc2;
556*67e74705SXin Li   sc &= uc2; // expected-error {{cannot convert}}
557*67e74705SXin Li   sc &= bc2;
558*67e74705SXin Li 
559*67e74705SXin Li   uc &= uc2;
560*67e74705SXin Li   uc &= sc2; // expected-error {{cannot convert}}
561*67e74705SXin Li   uc &= bc2;
562*67e74705SXin Li 
563*67e74705SXin Li   bc &= bc2;
564*67e74705SXin Li   bc &= sc2; // expected-error {{cannot convert}}
565*67e74705SXin Li   bc &= uc2; // expected-error {{cannot convert}}
566*67e74705SXin Li 
567*67e74705SXin Li   sc &= ss2; // expected-error {{cannot convert}}
568*67e74705SXin Li   sc &= si2; // expected-error {{cannot convert}}
569*67e74705SXin Li   sc &= sl2; // expected-error {{cannot convert}}
570*67e74705SXin Li   sc &= fd2; // expected-error {{invalid operands}}
571*67e74705SXin Li 
572*67e74705SXin Li   us &= bc2; // expected-error {{cannot convert}}
573*67e74705SXin Li   ui &= bc2; // expected-error {{cannot convert}}
574*67e74705SXin Li   ul &= bc2; // expected-error {{cannot convert}}
575*67e74705SXin Li   fd &= bc2; // expected-error {{invalid operands}}
576*67e74705SXin Li 
577*67e74705SXin Li   ss &= ss2;
578*67e74705SXin Li   us &= us2;
579*67e74705SXin Li   bs &= bs2;
580*67e74705SXin Li 
581*67e74705SXin Li   si &= si2;
582*67e74705SXin Li   ui &= ui2;
583*67e74705SXin Li   bi &= bi2;
584*67e74705SXin Li 
585*67e74705SXin Li   sl &= sl2;
586*67e74705SXin Li   ul &= ul2;
587*67e74705SXin Li   bl &= bl2;
588*67e74705SXin Li 
589*67e74705SXin Li   // -------------------------------------------------------------------------
590*67e74705SXin Li   // Test that & rules apply to | too.
591*67e74705SXin Li   // -------------------------------------------------------------------------
592*67e74705SXin Li 
593*67e74705SXin Li   sc = sc | sc2;
594*67e74705SXin Li   sc = sc | uc2; // expected-error {{cannot convert}}
595*67e74705SXin Li   sc = sc | bc2;
596*67e74705SXin Li 
597*67e74705SXin Li   uc = uc | uc2;
598*67e74705SXin Li   uc = sc | uc2; // expected-error {{cannot convert}}
599*67e74705SXin Li   uc = bc | uc2;
600*67e74705SXin Li 
601*67e74705SXin Li   bc = bc | bc2;
602*67e74705SXin Li   bc = uc | bc2; // expected-error {{incompatible type}}
603*67e74705SXin Li   bc = bc | sc2; // expected-error {{incompatible type}}
604*67e74705SXin Li 
605*67e74705SXin Li   fd = fd | fd2; // expected-error {{invalid operands}}
606*67e74705SXin Li   fd = bl | fd2; // expected-error {{invalid operands}}
607*67e74705SXin Li 
608*67e74705SXin Li   ss |= ss2;
609*67e74705SXin Li   us |= us2;
610*67e74705SXin Li   bs |= bs2;
611*67e74705SXin Li 
612*67e74705SXin Li   si |= si2;
613*67e74705SXin Li   ui |= ui2;
614*67e74705SXin Li   bi |= bi2;
615*67e74705SXin Li 
616*67e74705SXin Li   sl |= sl2;
617*67e74705SXin Li   ul |= ul2;
618*67e74705SXin Li   bl |= bl2;
619*67e74705SXin Li 
620*67e74705SXin Li   fd |= bl2; // expected-error {{invalid operands}}
621*67e74705SXin Li   fd |= fd2; // expected-error {{invalid operands}}
622*67e74705SXin Li 
623*67e74705SXin Li   // -------------------------------------------------------------------------
624*67e74705SXin Li   // Test that & rules apply to ^ too.
625*67e74705SXin Li   // -------------------------------------------------------------------------
626*67e74705SXin Li 
627*67e74705SXin Li   sc = sc ^ sc2;
628*67e74705SXin Li   sc = sc ^ uc2; // expected-error {{cannot convert}}
629*67e74705SXin Li   sc = sc ^ bc2;
630*67e74705SXin Li 
631*67e74705SXin Li   uc = uc ^ uc2;
632*67e74705SXin Li   uc = sc ^ uc2; // expected-error {{cannot convert}}
633*67e74705SXin Li   uc = bc ^ uc2;
634*67e74705SXin Li 
635*67e74705SXin Li   bc = bc ^ bc2;
636*67e74705SXin Li   bc = uc ^ bc2; // expected-error {{incompatible type}}
637*67e74705SXin Li   bc = bc ^ sc2; // expected-error {{incompatible type}}
638*67e74705SXin Li 
639*67e74705SXin Li   fd = fd ^ fd2; // expected-error {{invalid operands}}
640*67e74705SXin Li   fd = bl ^ fd2; // expected-error {{invalid operands}}
641*67e74705SXin Li 
642*67e74705SXin Li   ss ^= ss2;
643*67e74705SXin Li   us ^= us2;
644*67e74705SXin Li   bs ^= bs2;
645*67e74705SXin Li 
646*67e74705SXin Li   si ^= si2;
647*67e74705SXin Li   ui ^= ui2;
648*67e74705SXin Li   bi ^= bi2;
649*67e74705SXin Li 
650*67e74705SXin Li   sl ^= sl2;
651*67e74705SXin Li   ul ^= ul2;
652*67e74705SXin Li   bl ^= bl2;
653*67e74705SXin Li 
654*67e74705SXin Li   fd ^= bl2; // expected-error {{invalid operands}}
655*67e74705SXin Li   fd ^= fd2; // expected-error {{invalid operands}}
656*67e74705SXin Li 
657*67e74705SXin Li   // -------------------------------------------------------------------------
658*67e74705SXin Li   // Test <<.
659*67e74705SXin Li   // -------------------------------------------------------------------------
660*67e74705SXin Li 
661*67e74705SXin Li   sc = sc << sc2;
662*67e74705SXin Li   sc = sc << uc2;
663*67e74705SXin Li   sc = uc << sc2; // expected-error {{incompatible type}}
664*67e74705SXin Li   sc = sc << bc2; // expected-error {{invalid operands}}
665*67e74705SXin Li   sc = bc << sc2; // expected-error {{invalid operands}}
666*67e74705SXin Li 
667*67e74705SXin Li   uc = uc << uc2;
668*67e74705SXin Li   uc = sc << uc2; // expected-error {{assigning to}}
669*67e74705SXin Li   uc = uc << sc2;
670*67e74705SXin Li   uc = bc << uc2; // expected-error {{invalid operands}}
671*67e74705SXin Li   uc = uc << bc2; // expected-error {{invalid operands}}
672*67e74705SXin Li 
673*67e74705SXin Li   bc = bc << bc2; // expected-error {{invalid operands}}
674*67e74705SXin Li   bc = bc << uc2; // expected-error {{invalid operands}}
675*67e74705SXin Li   bc = uc << bc2; // expected-error {{invalid operands}}
676*67e74705SXin Li   bc = bc << sc2; // expected-error {{invalid operands}}
677*67e74705SXin Li   bc = sc << bc2; // expected-error {{invalid operands}}
678*67e74705SXin Li 
679*67e74705SXin Li   sc = sc << 1;
680*67e74705SXin Li   sc = sc << 1.0f; // expected-error {{integer is required}}
681*67e74705SXin Li   sc = sc << sc_scalar;
682*67e74705SXin Li   sc = sc << uc_scalar;
683*67e74705SXin Li   sc = sc << ss_scalar;
684*67e74705SXin Li   sc = sc << us_scalar;
685*67e74705SXin Li   sc = sc << si_scalar;
686*67e74705SXin Li   sc = sc << ui_scalar;
687*67e74705SXin Li   sc = sc << sl_scalar;
688*67e74705SXin Li   sc = sc << ul_scalar;
689*67e74705SXin Li   sc = sc_scalar << sc; // expected-error {{first operand is not a vector}}
690*67e74705SXin Li   sc = uc_scalar << sc; // expected-error {{first operand is not a vector}}
691*67e74705SXin Li   uc = uc << sc_scalar;
692*67e74705SXin Li   uc = uc << uc_scalar;
693*67e74705SXin Li   uc = sc_scalar << uc; // expected-error {{first operand is not a vector}}
694*67e74705SXin Li   uc = uc_scalar << uc; // expected-error {{first operand is not a vector}}
695*67e74705SXin Li 
696*67e74705SXin Li   ss = ss << ss2;
697*67e74705SXin Li   ss = ss << ss_scalar;
698*67e74705SXin Li   us = us << us2;
699*67e74705SXin Li   us = us << us_scalar;
700*67e74705SXin Li   bs = bs << bs2; // expected-error {{invalid operands}}
701*67e74705SXin Li 
702*67e74705SXin Li   si = si << si2;
703*67e74705SXin Li   si = si << si_scalar;
704*67e74705SXin Li   ui = ui << ui2;
705*67e74705SXin Li   ui = ui << ui_scalar;
706*67e74705SXin Li   bi = bi << bi2; // expected-error {{invalid operands}}
707*67e74705SXin Li 
708*67e74705SXin Li   sl = sl << sl2;
709*67e74705SXin Li   sl = sl << sl_scalar;
710*67e74705SXin Li   ul = ul << ul2;
711*67e74705SXin Li   ul = ul << ul_scalar;
712*67e74705SXin Li   bl = bl << bl2; // expected-error {{invalid operands}}
713*67e74705SXin Li 
714*67e74705SXin Li   fd = fd << fd2; // expected-error {{integer is required}}
715*67e74705SXin Li   fd = fd << ul2; // expected-error {{integer is required}}
716*67e74705SXin Li   fd = sl << fd2; // expected-error {{integer is required}}
717*67e74705SXin Li 
718*67e74705SXin Li   sc <<= sc2;
719*67e74705SXin Li   sc <<= uc2;
720*67e74705SXin Li   sc <<= bc2; // expected-error {{invalid operands}}
721*67e74705SXin Li   sc <<= sc_scalar;
722*67e74705SXin Li 
723*67e74705SXin Li   uc <<= uc2;
724*67e74705SXin Li   uc <<= sc2;
725*67e74705SXin Li   uc <<= bc2; // expected-error {{invalid operands}}
726*67e74705SXin Li   uc <<= uc_scalar;
727*67e74705SXin Li 
728*67e74705SXin Li   bc <<= bc2; // expected-error {{invalid operands}}
729*67e74705SXin Li   bc <<= sc2; // expected-error {{invalid operands}}
730*67e74705SXin Li   bc <<= uc2; // expected-error {{invalid operands}}
731*67e74705SXin Li 
732*67e74705SXin Li   sc <<= ss2; // expected-error {{vector operands do not have the same number of elements}}
733*67e74705SXin Li   sc <<= si2; // expected-error {{vector operands do not have the same number of elements}}
734*67e74705SXin Li   sc <<= sl2; // expected-error {{vector operands do not have the same number of elements}}
735*67e74705SXin Li   sc <<= fd2; // expected-error {{integer is required}}
736*67e74705SXin Li 
737*67e74705SXin Li   ss <<= ss2;
738*67e74705SXin Li   ss <<= ss_scalar;
739*67e74705SXin Li   us <<= us2;
740*67e74705SXin Li   us <<= us_scalar;
741*67e74705SXin Li   bs <<= bs2; // expected-error {{invalid operands}}
742*67e74705SXin Li 
743*67e74705SXin Li   si <<= si2;
744*67e74705SXin Li   si <<= si_scalar;
745*67e74705SXin Li   ui <<= ui2;
746*67e74705SXin Li   ui <<= ui_scalar;
747*67e74705SXin Li   bi <<= bi2; // expected-error {{invalid operands}}
748*67e74705SXin Li 
749*67e74705SXin Li   sl <<= sl2;
750*67e74705SXin Li   sl <<= sl_scalar;
751*67e74705SXin Li   ul <<= ul2;
752*67e74705SXin Li   ul <<= ul_scalar;
753*67e74705SXin Li   bl <<= bl2; // expected-error {{invalid operands}}
754*67e74705SXin Li 
755*67e74705SXin Li   fd <<= fd2; // expected-error {{integer is required}}
756*67e74705SXin Li 
757*67e74705SXin Li   // -------------------------------------------------------------------------
758*67e74705SXin Li   // Test >>.
759*67e74705SXin Li   // -------------------------------------------------------------------------
760*67e74705SXin Li 
761*67e74705SXin Li   sc = sc >> sc2;
762*67e74705SXin Li   sc = sc >> uc2;
763*67e74705SXin Li   sc = uc >> sc2; // expected-error {{incompatible type}}
764*67e74705SXin Li   sc = sc >> bc2; // expected-error {{invalid operands}}
765*67e74705SXin Li   sc = bc >> sc2; // expected-error {{invalid operands}}
766*67e74705SXin Li 
767*67e74705SXin Li   uc = uc >> uc2;
768*67e74705SXin Li   uc = sc >> uc2; // expected-error {{assigning to}}
769*67e74705SXin Li   uc = uc >> sc2;
770*67e74705SXin Li   uc = bc >> uc2; // expected-error {{invalid operands}}
771*67e74705SXin Li   uc = uc >> bc2; // expected-error {{invalid operands}}
772*67e74705SXin Li 
773*67e74705SXin Li   bc = bc >> bc2; // expected-error {{invalid operands}}
774*67e74705SXin Li   bc = bc >> uc2; // expected-error {{invalid operands}}
775*67e74705SXin Li   bc = uc >> bc2; // expected-error {{invalid operands}}
776*67e74705SXin Li   bc = bc >> sc2; // expected-error {{invalid operands}}
777*67e74705SXin Li   bc = sc >> bc2; // expected-error {{invalid operands}}
778*67e74705SXin Li 
779*67e74705SXin Li   sc = sc >> 1;
780*67e74705SXin Li   sc = sc >> 1.0f; // expected-error {{integer is required}}
781*67e74705SXin Li   sc = sc >> sc_scalar;
782*67e74705SXin Li   sc = sc >> uc_scalar;
783*67e74705SXin Li   sc = sc >> ss_scalar;
784*67e74705SXin Li   sc = sc >> us_scalar;
785*67e74705SXin Li   sc = sc >> si_scalar;
786*67e74705SXin Li   sc = sc >> ui_scalar;
787*67e74705SXin Li   sc = sc >> sl_scalar;
788*67e74705SXin Li   sc = sc >> ul_scalar;
789*67e74705SXin Li   sc = sc_scalar >> sc; // expected-error {{first operand is not a vector}}
790*67e74705SXin Li   sc = uc_scalar >> sc; // expected-error {{first operand is not a vector}}
791*67e74705SXin Li   uc = uc >> sc_scalar;
792*67e74705SXin Li   uc = uc >> uc_scalar;
793*67e74705SXin Li   uc = sc_scalar >> uc; // expected-error {{first operand is not a vector}}
794*67e74705SXin Li   uc = uc_scalar >> uc; // expected-error {{first operand is not a vector}}
795*67e74705SXin Li 
796*67e74705SXin Li   ss = ss >> ss2;
797*67e74705SXin Li   ss = ss >> ss_scalar;
798*67e74705SXin Li   us = us >> us2;
799*67e74705SXin Li   us = us >> us_scalar;
800*67e74705SXin Li   bs = bs >> bs2; // expected-error {{invalid operands}}
801*67e74705SXin Li 
802*67e74705SXin Li   si = si >> si2;
803*67e74705SXin Li   si = si >> si_scalar;
804*67e74705SXin Li   ui = ui >> ui2;
805*67e74705SXin Li   ui = ui >> ui_scalar;
806*67e74705SXin Li   bi = bi >> bi2; // expected-error {{invalid operands}}
807*67e74705SXin Li 
808*67e74705SXin Li   sl = sl >> sl2;
809*67e74705SXin Li   sl = sl >> sl_scalar;
810*67e74705SXin Li   ul = ul >> ul2;
811*67e74705SXin Li   ul = ul >> ul_scalar;
812*67e74705SXin Li   bl = bl >> bl2; // expected-error {{invalid operands}}
813*67e74705SXin Li 
814*67e74705SXin Li   fd = fd >> fd2; // expected-error {{integer is required}}
815*67e74705SXin Li   fd = fd >> ul2; // expected-error {{integer is required}}
816*67e74705SXin Li   fd = sl >> fd2; // expected-error {{integer is required}}
817*67e74705SXin Li 
818*67e74705SXin Li   sc >>= sc2;
819*67e74705SXin Li   sc >>= uc2;
820*67e74705SXin Li   sc >>= bc2; // expected-error {{invalid operands}}
821*67e74705SXin Li   sc >>= sc_scalar;
822*67e74705SXin Li 
823*67e74705SXin Li   uc >>= uc2;
824*67e74705SXin Li   uc >>= sc2;
825*67e74705SXin Li   uc >>= bc2; // expected-error {{invalid operands}}
826*67e74705SXin Li   uc >>= uc_scalar;
827*67e74705SXin Li 
828*67e74705SXin Li   bc >>= bc2; // expected-error {{invalid operands}}
829*67e74705SXin Li   bc >>= sc2; // expected-error {{invalid operands}}
830*67e74705SXin Li   bc >>= uc2; // expected-error {{invalid operands}}
831*67e74705SXin Li 
832*67e74705SXin Li   sc >>= ss2; // expected-error {{vector operands do not have the same number of elements}}
833*67e74705SXin Li   sc >>= si2; // expected-error {{vector operands do not have the same number of elements}}
834*67e74705SXin Li   sc >>= sl2; // expected-error {{vector operands do not have the same number of elements}}
835*67e74705SXin Li   sc >>= fd2; // expected-error {{integer is required}}
836*67e74705SXin Li 
837*67e74705SXin Li   ss >>= ss2;
838*67e74705SXin Li   ss >>= ss_scalar;
839*67e74705SXin Li   us >>= us2;
840*67e74705SXin Li   us >>= us_scalar;
841*67e74705SXin Li   bs >>= bs2; // expected-error {{invalid operands}}
842*67e74705SXin Li 
843*67e74705SXin Li   si >>= si2;
844*67e74705SXin Li   si >>= si_scalar;
845*67e74705SXin Li   ui >>= ui2;
846*67e74705SXin Li   ui >>= ui_scalar;
847*67e74705SXin Li   bi >>= bi2; // expected-error {{invalid operands}}
848*67e74705SXin Li 
849*67e74705SXin Li   sl >>= sl2;
850*67e74705SXin Li   sl >>= sl_scalar;
851*67e74705SXin Li   ul >>= ul2;
852*67e74705SXin Li   ul >>= ul_scalar;
853*67e74705SXin Li   bl >>= bl2; // expected-error {{invalid operands}}
854*67e74705SXin Li 
855*67e74705SXin Li   fd >>= fd2; // expected-error {{integer is required}}
856*67e74705SXin Li 
857*67e74705SXin Li   // -------------------------------------------------------------------------
858*67e74705SXin Li   // Test ==.
859*67e74705SXin Li   // -------------------------------------------------------------------------
860*67e74705SXin Li 
861*67e74705SXin Li   (void)(sc == sc2);
862*67e74705SXin Li   (void)(uc == uc2);
863*67e74705SXin Li   (void)(bc == bc2);
864*67e74705SXin Li 
865*67e74705SXin Li   (void)(sc == uc); // expected-error {{cannot convert}}
866*67e74705SXin Li   (void)(sc == bc);
867*67e74705SXin Li 
868*67e74705SXin Li   (void)(uc == sc); // expected-error {{cannot convert}}
869*67e74705SXin Li   (void)(uc == bc);
870*67e74705SXin Li 
871*67e74705SXin Li   (void)(bc == sc);
872*67e74705SXin Li   (void)(bc == uc);
873*67e74705SXin Li 
874*67e74705SXin Li   (void)(ss == ss2);
875*67e74705SXin Li   (void)(us == us2);
876*67e74705SXin Li   (void)(bs == bs2);
877*67e74705SXin Li 
878*67e74705SXin Li   (void)(si == si2);
879*67e74705SXin Li   (void)(ui == ui2);
880*67e74705SXin Li   (void)(bi == bi2);
881*67e74705SXin Li 
882*67e74705SXin Li   (void)(sl == sl2);
883*67e74705SXin Li   (void)(ul == ul2);
884*67e74705SXin Li   (void)(bl == bl2);
885*67e74705SXin Li   (void)(fd == fd2);
886*67e74705SXin Li 
887*67e74705SXin Li   (void)(fd == ul); // expected-error {{cannot convert}}
888*67e74705SXin Li   (void)(ul == fd); // expected-error {{cannot convert}}
889*67e74705SXin Li 
890*67e74705SXin Li   // -------------------------------------------------------------------------
891*67e74705SXin Li   // Test that == rules apply to != too.
892*67e74705SXin Li   // -------------------------------------------------------------------------
893*67e74705SXin Li 
894*67e74705SXin Li   (void)(sc != sc2);
895*67e74705SXin Li   (void)(uc != uc2);
896*67e74705SXin Li   (void)(bc != bc2);
897*67e74705SXin Li 
898*67e74705SXin Li   (void)(sc != uc); // expected-error {{cannot convert}}
899*67e74705SXin Li   (void)(sc != bc);
900*67e74705SXin Li 
901*67e74705SXin Li   (void)(ss != ss2);
902*67e74705SXin Li   (void)(us != us2);
903*67e74705SXin Li   (void)(bs != bs2);
904*67e74705SXin Li 
905*67e74705SXin Li   (void)(si != si2);
906*67e74705SXin Li   (void)(ui != ui2);
907*67e74705SXin Li   (void)(bi != bi2);
908*67e74705SXin Li 
909*67e74705SXin Li   (void)(sl != sl2);
910*67e74705SXin Li   (void)(ul != ul2);
911*67e74705SXin Li   (void)(bl != bl2);
912*67e74705SXin Li   (void)(fd != fd2);
913*67e74705SXin Li 
914*67e74705SXin Li   // -------------------------------------------------------------------------
915*67e74705SXin Li   // Test that == rules apply to <= too.
916*67e74705SXin Li   // -------------------------------------------------------------------------
917*67e74705SXin Li 
918*67e74705SXin Li   (void)(sc <= sc2);
919*67e74705SXin Li   (void)(uc <= uc2);
920*67e74705SXin Li   (void)(bc <= bc2);
921*67e74705SXin Li 
922*67e74705SXin Li   (void)(sc <= uc); // expected-error {{cannot convert}}
923*67e74705SXin Li   (void)(sc <= bc);
924*67e74705SXin Li 
925*67e74705SXin Li   (void)(ss <= ss2);
926*67e74705SXin Li   (void)(us <= us2);
927*67e74705SXin Li   (void)(bs <= bs2);
928*67e74705SXin Li 
929*67e74705SXin Li   (void)(si <= si2);
930*67e74705SXin Li   (void)(ui <= ui2);
931*67e74705SXin Li   (void)(bi <= bi2);
932*67e74705SXin Li 
933*67e74705SXin Li   (void)(sl <= sl2);
934*67e74705SXin Li   (void)(ul <= ul2);
935*67e74705SXin Li   (void)(bl <= bl2);
936*67e74705SXin Li   (void)(fd <= fd2);
937*67e74705SXin Li 
938*67e74705SXin Li   // -------------------------------------------------------------------------
939*67e74705SXin Li   // Test that == rules apply to >= too.
940*67e74705SXin Li   // -------------------------------------------------------------------------
941*67e74705SXin Li 
942*67e74705SXin Li   (void)(sc >= sc2);
943*67e74705SXin Li   (void)(uc >= uc2);
944*67e74705SXin Li   (void)(bc >= bc2);
945*67e74705SXin Li 
946*67e74705SXin Li   (void)(sc >= uc); // expected-error {{cannot convert}}
947*67e74705SXin Li   (void)(sc >= bc);
948*67e74705SXin Li 
949*67e74705SXin Li   (void)(ss >= ss2);
950*67e74705SXin Li   (void)(us >= us2);
951*67e74705SXin Li   (void)(bs >= bs2);
952*67e74705SXin Li 
953*67e74705SXin Li   (void)(si >= si2);
954*67e74705SXin Li   (void)(ui >= ui2);
955*67e74705SXin Li   (void)(bi >= bi2);
956*67e74705SXin Li 
957*67e74705SXin Li   (void)(sl >= sl2);
958*67e74705SXin Li   (void)(ul >= ul2);
959*67e74705SXin Li   (void)(bl >= bl2);
960*67e74705SXin Li   (void)(fd >= fd2);
961*67e74705SXin Li 
962*67e74705SXin Li   // -------------------------------------------------------------------------
963*67e74705SXin Li   // Test that == rules apply to < too.
964*67e74705SXin Li   // -------------------------------------------------------------------------
965*67e74705SXin Li 
966*67e74705SXin Li   (void)(sc < sc2);
967*67e74705SXin Li   (void)(uc < uc2);
968*67e74705SXin Li   (void)(bc < bc2);
969*67e74705SXin Li 
970*67e74705SXin Li   (void)(sc < uc); // expected-error {{cannot convert}}
971*67e74705SXin Li   (void)(sc < bc);
972*67e74705SXin Li 
973*67e74705SXin Li   (void)(ss < ss2);
974*67e74705SXin Li   (void)(us < us2);
975*67e74705SXin Li   (void)(bs < bs2);
976*67e74705SXin Li 
977*67e74705SXin Li   (void)(si < si2);
978*67e74705SXin Li   (void)(ui < ui2);
979*67e74705SXin Li   (void)(bi < bi2);
980*67e74705SXin Li 
981*67e74705SXin Li   (void)(sl < sl2);
982*67e74705SXin Li   (void)(ul < ul2);
983*67e74705SXin Li   (void)(bl < bl2);
984*67e74705SXin Li   (void)(fd < fd2);
985*67e74705SXin Li 
986*67e74705SXin Li   // -------------------------------------------------------------------------
987*67e74705SXin Li   // Test that == rules apply to > too.
988*67e74705SXin Li   // -------------------------------------------------------------------------
989*67e74705SXin Li 
990*67e74705SXin Li   (void)(sc > sc2);
991*67e74705SXin Li   (void)(uc > uc2);
992*67e74705SXin Li   (void)(bc > bc2);
993*67e74705SXin Li 
994*67e74705SXin Li   (void)(sc > uc); // expected-error {{cannot convert}}
995*67e74705SXin Li   (void)(sc > bc);
996*67e74705SXin Li 
997*67e74705SXin Li   (void)(ss > ss2);
998*67e74705SXin Li   (void)(us > us2);
999*67e74705SXin Li   (void)(bs > bs2);
1000*67e74705SXin Li 
1001*67e74705SXin Li   (void)(si > si2);
1002*67e74705SXin Li   (void)(ui > ui2);
1003*67e74705SXin Li   (void)(bi > bi2);
1004*67e74705SXin Li 
1005*67e74705SXin Li   (void)(sl > sl2);
1006*67e74705SXin Li   (void)(ul > ul2);
1007*67e74705SXin Li   (void)(bl > bl2);
1008*67e74705SXin Li   (void)(fd > fd2);
1009*67e74705SXin Li }
1010