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