|  | // RUN: %clang_cc1 -triple s390x-linux-gnu -fzvector \ | 
|  | // RUN:  -fno-lax-vector-conversions -W -Wall -Wconversion \ | 
|  | // RUN:  -Werror -fsyntax-only -verify %s | 
|  |  | 
|  | vector signed char sc, sc2; | 
|  | vector unsigned char uc, uc2; | 
|  | vector bool char bc, bc2; | 
|  |  | 
|  | vector signed short ss, ss2; | 
|  | vector unsigned short us, us2; | 
|  | vector bool short bs, bs2; | 
|  |  | 
|  | vector signed int si, si2; | 
|  | vector unsigned int ui, ui2; | 
|  | vector bool int bi, bi2; | 
|  |  | 
|  | vector signed long long sl, sl2; | 
|  | vector unsigned long long ul, ul2; | 
|  | vector bool long long bl, bl2; | 
|  |  | 
|  | vector double fd, fd2; | 
|  |  | 
|  | vector long ll; // expected-error {{cannot use 'long' with '__vector'}} | 
|  | vector float ff; // expected-error {{cannot use 'float' with '__vector'}} | 
|  |  | 
|  | signed char sc_scalar; | 
|  | unsigned char uc_scalar; | 
|  |  | 
|  | signed short ss_scalar; | 
|  | unsigned short us_scalar; | 
|  |  | 
|  | signed int si_scalar; | 
|  | unsigned int ui_scalar; | 
|  |  | 
|  | signed long sl_scalar; | 
|  | unsigned long ul_scalar; | 
|  |  | 
|  | double fd_scalar; | 
|  |  | 
|  | void foo(void) | 
|  | { | 
|  | // ------------------------------------------------------------------------- | 
|  | // Test assignment. | 
|  | // ------------------------------------------------------------------------- | 
|  |  | 
|  | sc = sc2; | 
|  | uc = uc2; | 
|  | bc = bc2; | 
|  |  | 
|  | ss = ss2; | 
|  | us = us2; | 
|  | bs = bs2; | 
|  |  | 
|  | si = si2; | 
|  | ui = ui2; | 
|  | bi = bi2; | 
|  |  | 
|  | sl = sl2; | 
|  | ul = ul2; | 
|  | bl = bl2; | 
|  | fd = fd2; | 
|  |  | 
|  | sc = uc2; // expected-error {{incompatible type}} | 
|  | sc = bc2; // expected-error {{incompatible type}} | 
|  | uc = sc2; // expected-error {{incompatible type}} | 
|  | uc = bc2; // expected-error {{incompatible type}} | 
|  | bc = sc2; // expected-error {{incompatible type}} | 
|  | bc = uc2; // expected-error {{incompatible type}} | 
|  |  | 
|  | sc = sc_scalar; // expected-error {{incompatible type}} | 
|  | sc = uc_scalar; // expected-error {{incompatible type}} | 
|  | uc = sc_scalar; // expected-error {{incompatible type}} | 
|  | uc = uc_scalar; // expected-error {{incompatible type}} | 
|  | bc = sc_scalar; // expected-error {{incompatible type}} | 
|  | bc = uc_scalar; // expected-error {{incompatible type}} | 
|  |  | 
|  | sc = ss2; // expected-error {{incompatible type}} | 
|  | sc = si2; // expected-error {{incompatible type}} | 
|  | sc = sl2; // expected-error {{incompatible type}} | 
|  | sc = fd2; // expected-error {{incompatible type}} | 
|  |  | 
|  | ss = sc2; // expected-error {{incompatible type}} | 
|  | si = sc2; // expected-error {{incompatible type}} | 
|  | sl = sc2; // expected-error {{incompatible type}} | 
|  | fd = sc2; // expected-error {{incompatible type}} | 
|  |  | 
|  | uc = us2; // expected-error {{incompatible type}} | 
|  | uc = ui2; // expected-error {{incompatible type}} | 
|  | uc = ul2; // expected-error {{incompatible type}} | 
|  | uc = fd2; // expected-error {{incompatible type}} | 
|  |  | 
|  | us = uc2; // expected-error {{incompatible type}} | 
|  | ui = uc2; // expected-error {{incompatible type}} | 
|  | ul = uc2; // expected-error {{incompatible type}} | 
|  | fd = uc2; // expected-error {{incompatible type}} | 
|  |  | 
|  | bc = us2; // expected-error {{incompatible type}} | 
|  | bc = ui2; // expected-error {{incompatible type}} | 
|  | bc = ul2; // expected-error {{incompatible type}} | 
|  | bc = fd2; // expected-error {{incompatible type}} | 
|  |  | 
|  | bs = bc2; // expected-error {{incompatible type}} | 
|  | bi = bc2; // expected-error {{incompatible type}} | 
|  | bl = bc2; // expected-error {{incompatible type}} | 
|  | fd = bc2; // expected-error {{incompatible type}} | 
|  |  | 
|  | // ------------------------------------------------------------------------- | 
|  | // Test casts to same element width. | 
|  | // ------------------------------------------------------------------------- | 
|  |  | 
|  | sc = (vector signed char)bc2; | 
|  | bc = (vector bool char)uc2; | 
|  | uc = (vector unsigned char)sc2; | 
|  |  | 
|  | ss = (vector signed short)bs2; | 
|  | bs = (vector bool short)us2; | 
|  | us = (vector unsigned short)ss2; | 
|  |  | 
|  | si = (vector signed int)bi2; | 
|  | bi = (vector bool int)ui2; | 
|  | ui = (vector unsigned int)si2; | 
|  |  | 
|  | sl = (vector signed long long)bl2; | 
|  | bl = (vector bool long long)ul2; | 
|  | ul = (vector unsigned long long)fd2; | 
|  | fd = (vector double)sl2; | 
|  |  | 
|  | // ------------------------------------------------------------------------- | 
|  | // Test casts to different element width. | 
|  | // ------------------------------------------------------------------------- | 
|  |  | 
|  | sc = (vector signed char)bs2; | 
|  | bc = (vector bool char)us2; | 
|  | uc = (vector unsigned char)fd2; | 
|  |  | 
|  | ss = (vector signed short)bi2; | 
|  | bs = (vector bool short)ui2; | 
|  | us = (vector unsigned short)fd2; | 
|  |  | 
|  | si = (vector signed int)bl2; | 
|  | bi = (vector bool int)ul2; | 
|  | ui = (vector unsigned int)fd2; | 
|  |  | 
|  | sl = (vector signed long long)bc2; | 
|  | bl = (vector bool long long)uc2; | 
|  | ul = (vector unsigned long long)sc2; | 
|  | fd = (vector double)sc2; | 
|  |  | 
|  | // ------------------------------------------------------------------------- | 
|  | // Test ++. | 
|  | // ------------------------------------------------------------------------- | 
|  |  | 
|  | ++sc2; | 
|  | ++uc2; | 
|  | ++bc2; // expected-error {{cannot increment}} | 
|  |  | 
|  | ++ss2; | 
|  | ++us2; | 
|  | ++bs2; // expected-error {{cannot increment}} | 
|  |  | 
|  | ++si2; | 
|  | ++ui2; | 
|  | ++bi2; // expected-error {{cannot increment}} | 
|  |  | 
|  | ++sl2; | 
|  | ++ul2; | 
|  | ++bl2; // expected-error {{cannot increment}} | 
|  |  | 
|  | ++fd2; | 
|  |  | 
|  | sc++; | 
|  | uc++; | 
|  | bc++; // expected-error {{cannot increment}} | 
|  |  | 
|  | ss++; | 
|  | us++; | 
|  | bs++; // expected-error {{cannot increment}} | 
|  |  | 
|  | si++; | 
|  | ui++; | 
|  | bi++; // expected-error {{cannot increment}} | 
|  |  | 
|  | sl++; | 
|  | ul++; | 
|  | bl++; // expected-error {{cannot increment}} | 
|  |  | 
|  | fd++; | 
|  |  | 
|  | // ------------------------------------------------------------------------- | 
|  | // Test --. | 
|  | // ------------------------------------------------------------------------- | 
|  |  | 
|  | --sc2; | 
|  | --uc2; | 
|  | --bc2; // expected-error {{cannot decrement}} | 
|  |  | 
|  | --ss2; | 
|  | --us2; | 
|  | --bs2; // expected-error {{cannot decrement}} | 
|  |  | 
|  | --si2; | 
|  | --ui2; | 
|  | --bi2; // expected-error {{cannot decrement}} | 
|  |  | 
|  | --sl2; | 
|  | --ul2; | 
|  | --bl2; // expected-error {{cannot decrement}} | 
|  |  | 
|  | --fd2; | 
|  |  | 
|  | sc--; | 
|  | uc--; | 
|  | bc--; // expected-error {{cannot decrement}} | 
|  |  | 
|  | ss--; | 
|  | us--; | 
|  | bs--; // expected-error {{cannot decrement}} | 
|  |  | 
|  | si--; | 
|  | ui--; | 
|  | bi--; // expected-error {{cannot decrement}} | 
|  |  | 
|  | sl--; | 
|  | ul--; | 
|  | bl--; // expected-error {{cannot decrement}} | 
|  |  | 
|  | fd--; | 
|  |  | 
|  | // ------------------------------------------------------------------------- | 
|  | // Test unary +. | 
|  | // ------------------------------------------------------------------------- | 
|  |  | 
|  | sc = +sc2; | 
|  | uc = +uc2; | 
|  | bc = +bc2; // expected-error {{invalid argument type}} | 
|  |  | 
|  | ss = +ss2; | 
|  | us = +us2; | 
|  | bs = +bs2; // expected-error {{invalid argument type}} | 
|  |  | 
|  | si = +si2; | 
|  | ui = +ui2; | 
|  | bi = +bi2; // expected-error {{invalid argument type}} | 
|  |  | 
|  | sl = +sl2; | 
|  | ul = +ul2; | 
|  | bl = +bl2; // expected-error {{invalid argument type}} | 
|  |  | 
|  | fd = +fd2; | 
|  |  | 
|  | sc = +si2; // expected-error {{assigning to}} | 
|  | ui = +si2; // expected-error {{assigning to}} | 
|  | ui = +bi2; // expected-error {{invalid argument type}} | 
|  |  | 
|  | // ------------------------------------------------------------------------- | 
|  | // Test unary -. | 
|  | // ------------------------------------------------------------------------- | 
|  |  | 
|  | sc = -sc2; | 
|  | uc = -uc2; | 
|  | bc = -bc2; // expected-error {{invalid argument type}} | 
|  |  | 
|  | ss = -ss2; | 
|  | us = -us2; | 
|  | bs = -bs2; // expected-error {{invalid argument type}} | 
|  |  | 
|  | si = -si2; | 
|  | ui = -ui2; | 
|  | bi = -bi2; // expected-error {{invalid argument type}} | 
|  |  | 
|  | sl = -sl2; | 
|  | ul = -ul2; | 
|  | bl = -bl2; // expected-error {{invalid argument type}} | 
|  |  | 
|  | fd = -fd2; | 
|  |  | 
|  | sc = -si2; // expected-error {{assigning to}} | 
|  | ui = -si2; // expected-error {{assigning to}} | 
|  | ui = -bi2; // expected-error {{invalid argument type}} | 
|  |  | 
|  | // ------------------------------------------------------------------------- | 
|  | // Test ~. | 
|  | // ------------------------------------------------------------------------- | 
|  |  | 
|  | sc = ~sc2; | 
|  | uc = ~uc2; | 
|  | bc = ~bc2; | 
|  |  | 
|  | ss = ~ss2; | 
|  | us = ~us2; | 
|  | bs = ~bs2; | 
|  |  | 
|  | si = ~si2; | 
|  | ui = ~ui2; | 
|  | bi = ~bi2; | 
|  |  | 
|  | sl = ~sl2; | 
|  | ul = ~ul2; | 
|  | bl = ~bl2; | 
|  |  | 
|  | fd = ~fd2; // expected-error {{invalid argument}} | 
|  |  | 
|  | sc = ~si2; // expected-error {{assigning to}} | 
|  | ui = ~si2; // expected-error {{assigning to}} | 
|  | ui = ~bi2; // expected-error {{assigning to}} | 
|  |  | 
|  | // ------------------------------------------------------------------------- | 
|  | // Test binary +. | 
|  | // ------------------------------------------------------------------------- | 
|  |  | 
|  | sc = sc + sc2; | 
|  | sc = sc + uc2; // expected-error {{cannot convert}} | 
|  | sc = uc + sc2; // expected-error {{cannot convert}} | 
|  | sc = sc + bc2; | 
|  | sc = bc + sc2; | 
|  |  | 
|  | uc = uc + uc2; | 
|  | uc = sc + uc2; // expected-error {{cannot convert}} | 
|  | uc = uc + sc2; // expected-error {{cannot convert}} | 
|  | uc = bc + uc2; | 
|  | uc = uc + bc2; | 
|  |  | 
|  | bc = bc + bc2; // expected-error {{invalid operands}} | 
|  | bc = bc + uc2; // expected-error {{incompatible type}} | 
|  | bc = uc + bc2; // expected-error {{incompatible type}} | 
|  | bc = bc + sc2; // expected-error {{incompatible type}} | 
|  | bc = sc + bc2; // expected-error {{incompatible type}} | 
|  |  | 
|  | sc = sc + sc_scalar; | 
|  | sc = sc + uc_scalar; // expected-error {{cannot convert between scalar type 'unsigned char' and vector type '__vector signed char' (vector of 16 'signed char' values) as implicit conversion would cause truncation}} | 
|  | sc = sc_scalar + sc; | 
|  | sc = uc_scalar + sc; // expected-error {{cannot convert between scalar type 'unsigned char' and vector type '__vector signed char' (vector of 16 'signed char' values) as implicit conversion would cause truncation}} | 
|  | uc = uc + sc_scalar; // expected-error {{implicit conversion changes signedness: 'signed char' to '__vector unsigned char' (vector of 16 'unsigned char' values)}} | 
|  | uc = uc + uc_scalar; | 
|  | uc = sc_scalar + uc; // expected-error {{implicit conversion changes signedness: 'signed char' to '__vector unsigned char' (vector of 16 'unsigned char' values)}} | 
|  | uc = uc_scalar + uc; | 
|  |  | 
|  | ss = ss + ss2; | 
|  | us = us + us2; | 
|  | bs = bs + bs2; // expected-error {{invalid operands}} | 
|  |  | 
|  | si = si + si2; | 
|  | ui = ui + ui2; | 
|  | bi = bi + bi2; // expected-error {{invalid operands}} | 
|  |  | 
|  | sl = sl + sl2; | 
|  | ul = ul + ul2; | 
|  | bl = bl + bl2; // expected-error {{invalid operands}} | 
|  |  | 
|  | fd = fd + fd2; | 
|  | fd = fd + ul2; // expected-error {{cannot convert}} | 
|  | fd = sl + fd2; // expected-error {{cannot convert}} | 
|  |  | 
|  | sc += sc2; | 
|  | sc += uc2; // expected-error {{cannot convert}} | 
|  | sc += bc2; | 
|  |  | 
|  | uc += uc2; | 
|  | uc += sc2; // expected-error {{cannot convert}} | 
|  | uc += bc2; | 
|  |  | 
|  | bc += bc2; // expected-error {{invalid operands}} | 
|  | bc += sc2; // expected-error {{cannot convert}} | 
|  | bc += uc2; // expected-error {{cannot convert}} | 
|  |  | 
|  | sc += ss2; // expected-error {{cannot convert}} | 
|  | sc += si2; // expected-error {{cannot convert}} | 
|  | sc += sl2; // expected-error {{cannot convert}} | 
|  | sc += fd2; // expected-error {{cannot convert}} | 
|  |  | 
|  | sc += sc_scalar; | 
|  | sc += uc_scalar; // expected-error {{cannot convert between scalar type 'unsigned char' and vector type '__vector signed char' (vector of 16 'signed char' values) as implicit conversion would cause truncation}} | 
|  | uc += sc_scalar; // expected-error {{implicit conversion changes signedness: 'signed char' to '__vector unsigned char' (vector of 16 'unsigned char' values)}} | 
|  | uc += uc_scalar; | 
|  |  | 
|  | ss += ss2; | 
|  | us += us2; | 
|  | bs += bs2; // expected-error {{invalid operands}} | 
|  |  | 
|  | si += si2; | 
|  | ui += ui2; | 
|  | bi += bi2; // expected-error {{invalid operands}} | 
|  |  | 
|  | sl += sl2; | 
|  | ul += ul2; | 
|  | bl += bl2; // expected-error {{invalid operands}} | 
|  |  | 
|  | fd += fd2; | 
|  |  | 
|  | // ------------------------------------------------------------------------- | 
|  | // Test that binary + rules apply to binary - too. | 
|  | // ------------------------------------------------------------------------- | 
|  |  | 
|  | sc = sc - sc2; | 
|  | uc = uc - uc2; | 
|  | bc = bc - bc2; // expected-error {{invalid operands}} | 
|  |  | 
|  | sc = uc - sc2; // expected-error {{cannot convert}} | 
|  | sc = sc - bc2; | 
|  | uc = bc - uc2; | 
|  |  | 
|  | sc -= sc2; | 
|  | uc -= uc2; | 
|  | bc -= bc2; // expected-error {{invalid operands}} | 
|  |  | 
|  | sc -= uc2; // expected-error {{cannot convert}} | 
|  | uc -= bc2; | 
|  | bc -= sc2; // expected-error {{cannot convert}} | 
|  |  | 
|  | ss -= ss2; | 
|  | us -= us2; | 
|  | bs -= bs2; // expected-error {{invalid operands}} | 
|  |  | 
|  | si -= si2; | 
|  | ui -= ui2; | 
|  | bi -= bi2; // expected-error {{invalid operands}} | 
|  |  | 
|  | sl -= sl2; | 
|  | ul -= ul2; | 
|  | bl -= bl2; // expected-error {{invalid operands}} | 
|  |  | 
|  | fd -= fd2; | 
|  |  | 
|  | // ------------------------------------------------------------------------- | 
|  | // Test that binary + rules apply to * too.  64-bit integer multiplication | 
|  | // is not required by the spec and so isn't tested here. | 
|  | // ------------------------------------------------------------------------- | 
|  |  | 
|  | sc = sc * sc2; | 
|  | uc = uc * uc2; | 
|  | bc = bc * bc2; // expected-error {{invalid operands}} | 
|  |  | 
|  | sc = uc * sc2; // expected-error {{cannot convert}} | 
|  | sc = sc * bc2; // expected-error {{cannot convert}} | 
|  | uc = bc * uc2; // expected-error {{cannot convert}} | 
|  |  | 
|  | sc *= sc2; | 
|  | uc *= uc2; | 
|  | bc *= bc2; // expected-error {{invalid operands}} | 
|  |  | 
|  | sc *= uc2; // expected-error {{cannot convert}} | 
|  | uc *= bc2; // expected-error {{cannot convert}} | 
|  | bc *= sc2; // expected-error {{cannot convert}} | 
|  |  | 
|  | ss *= ss2; | 
|  | us *= us2; | 
|  | bs *= bs2; // expected-error {{invalid operands}} | 
|  |  | 
|  | si *= si2; | 
|  | ui *= ui2; | 
|  | bi *= bi2; // expected-error {{invalid operands}} | 
|  |  | 
|  | sl *= sl2; | 
|  | ul *= ul2; | 
|  | bl *= bl2; // expected-error {{invalid operands}} | 
|  |  | 
|  | fd *= fd2; | 
|  |  | 
|  | // ------------------------------------------------------------------------- | 
|  | // Test that * rules apply to / too. | 
|  | // ------------------------------------------------------------------------- | 
|  |  | 
|  | sc = sc / sc2; | 
|  | uc = uc / uc2; | 
|  | bc = bc / bc2; // expected-error {{invalid operands}} | 
|  |  | 
|  | sc = uc / sc2; // expected-error {{cannot convert}} | 
|  | sc = sc / bc2; // expected-error {{cannot convert}} | 
|  | uc = bc / uc2; // expected-error {{cannot convert}} | 
|  |  | 
|  | sc /= sc2; | 
|  | uc /= uc2; | 
|  | bc /= bc2; // expected-error {{invalid operands}} | 
|  |  | 
|  | sc /= uc2; // expected-error {{cannot convert}} | 
|  | uc /= bc2; // expected-error {{cannot convert}} | 
|  | bc /= sc2; // expected-error {{cannot convert}} | 
|  |  | 
|  | ss /= ss2; | 
|  | us /= us2; | 
|  | bs /= bs2; // expected-error {{invalid operands}} | 
|  |  | 
|  | si /= si2; | 
|  | ui /= ui2; | 
|  | bi /= bi2; // expected-error {{invalid operands}} | 
|  |  | 
|  | sl /= sl2; | 
|  | ul /= ul2; | 
|  | bl /= bl2; // expected-error {{invalid operands}} | 
|  |  | 
|  | fd /= fd2; | 
|  |  | 
|  | // ------------------------------------------------------------------------- | 
|  | // Test that / rules apply to % too, except that doubles are not allowed. | 
|  | // ------------------------------------------------------------------------- | 
|  |  | 
|  | sc = sc % sc2; | 
|  | uc = uc % uc2; | 
|  | bc = bc % bc2; // expected-error {{invalid operands}} | 
|  |  | 
|  | sc = uc % sc2; // expected-error {{cannot convert}} | 
|  | sc = sc % bc2; // expected-error {{cannot convert}} | 
|  | uc = bc % uc2; // expected-error {{cannot convert}} | 
|  |  | 
|  | sc %= sc2; | 
|  | uc %= uc2; | 
|  | bc %= bc2; // expected-error {{invalid operands}} | 
|  |  | 
|  | sc %= uc2; // expected-error {{cannot convert}} | 
|  | uc %= bc2; // expected-error {{cannot convert}} | 
|  | bc %= sc2; // expected-error {{cannot convert}} | 
|  |  | 
|  | ss %= ss2; | 
|  | us %= us2; | 
|  | bs %= bs2; // expected-error {{invalid operands}} | 
|  |  | 
|  | si %= si2; | 
|  | ui %= ui2; | 
|  | bi %= bi2; // expected-error {{invalid operands}} | 
|  |  | 
|  | sl %= sl2; | 
|  | ul %= ul2; | 
|  | bl %= bl2; // expected-error {{invalid operands}} | 
|  |  | 
|  | fd %= fd2; // expected-error {{invalid operands}} | 
|  |  | 
|  | // ------------------------------------------------------------------------- | 
|  | // Test &. | 
|  | // ------------------------------------------------------------------------- | 
|  |  | 
|  | sc = sc & sc2; | 
|  | sc = sc & uc2; // expected-error {{cannot convert}} | 
|  | sc = uc & sc2; // expected-error {{cannot convert}} | 
|  | sc = sc & bc2; | 
|  | sc = bc & sc2; | 
|  |  | 
|  | uc = uc & uc2; | 
|  | uc = sc & uc2; // expected-error {{cannot convert}} | 
|  | uc = uc & sc2; // expected-error {{cannot convert}} | 
|  | uc = bc & uc2; | 
|  | uc = uc & bc2; | 
|  |  | 
|  | bc = bc & bc2; | 
|  | bc = bc & uc2; // expected-error {{incompatible type}} | 
|  | bc = uc & bc2; // expected-error {{incompatible type}} | 
|  | bc = bc & sc2; // expected-error {{incompatible type}} | 
|  | bc = sc & bc2; // expected-error {{incompatible type}} | 
|  |  | 
|  | fd = fd & fd2; // expected-error {{invalid operands}} | 
|  | fd = bl & fd2; // expected-error {{invalid operands}} | 
|  | fd = fd & bl2; // expected-error {{invalid operands}} | 
|  | fd = fd & sl2; // expected-error {{invalid operands}} | 
|  | fd = fd & ul2; // expected-error {{invalid operands}} | 
|  |  | 
|  | sc &= sc2; | 
|  | sc &= uc2; // expected-error {{cannot convert}} | 
|  | sc &= bc2; | 
|  |  | 
|  | uc &= uc2; | 
|  | uc &= sc2; // expected-error {{cannot convert}} | 
|  | uc &= bc2; | 
|  |  | 
|  | bc &= bc2; | 
|  | bc &= sc2; // expected-error {{cannot convert}} | 
|  | bc &= uc2; // expected-error {{cannot convert}} | 
|  |  | 
|  | sc &= ss2; // expected-error {{cannot convert}} | 
|  | sc &= si2; // expected-error {{cannot convert}} | 
|  | sc &= sl2; // expected-error {{cannot convert}} | 
|  | sc &= fd2; // expected-error {{invalid operands}} | 
|  |  | 
|  | us &= bc2; // expected-error {{cannot convert}} | 
|  | ui &= bc2; // expected-error {{cannot convert}} | 
|  | ul &= bc2; // expected-error {{cannot convert}} | 
|  | fd &= bc2; // expected-error {{invalid operands}} | 
|  |  | 
|  | ss &= ss2; | 
|  | us &= us2; | 
|  | bs &= bs2; | 
|  |  | 
|  | si &= si2; | 
|  | ui &= ui2; | 
|  | bi &= bi2; | 
|  |  | 
|  | sl &= sl2; | 
|  | ul &= ul2; | 
|  | bl &= bl2; | 
|  |  | 
|  | // ------------------------------------------------------------------------- | 
|  | // Test that & rules apply to | too. | 
|  | // ------------------------------------------------------------------------- | 
|  |  | 
|  | sc = sc | sc2; | 
|  | sc = sc | uc2; // expected-error {{cannot convert}} | 
|  | sc = sc | bc2; | 
|  |  | 
|  | uc = uc | uc2; | 
|  | uc = sc | uc2; // expected-error {{cannot convert}} | 
|  | uc = bc | uc2; | 
|  |  | 
|  | bc = bc | bc2; | 
|  | bc = uc | bc2; // expected-error {{incompatible type}} | 
|  | bc = bc | sc2; // expected-error {{incompatible type}} | 
|  |  | 
|  | fd = fd | fd2; // expected-error {{invalid operands}} | 
|  | fd = bl | fd2; // expected-error {{invalid operands}} | 
|  |  | 
|  | ss |= ss2; | 
|  | us |= us2; | 
|  | bs |= bs2; | 
|  |  | 
|  | si |= si2; | 
|  | ui |= ui2; | 
|  | bi |= bi2; | 
|  |  | 
|  | sl |= sl2; | 
|  | ul |= ul2; | 
|  | bl |= bl2; | 
|  |  | 
|  | fd |= bl2; // expected-error {{invalid operands}} | 
|  | fd |= fd2; // expected-error {{invalid operands}} | 
|  |  | 
|  | // ------------------------------------------------------------------------- | 
|  | // Test that & rules apply to ^ too. | 
|  | // ------------------------------------------------------------------------- | 
|  |  | 
|  | sc = sc ^ sc2; | 
|  | sc = sc ^ uc2; // expected-error {{cannot convert}} | 
|  | sc = sc ^ bc2; | 
|  |  | 
|  | uc = uc ^ uc2; | 
|  | uc = sc ^ uc2; // expected-error {{cannot convert}} | 
|  | uc = bc ^ uc2; | 
|  |  | 
|  | bc = bc ^ bc2; | 
|  | bc = uc ^ bc2; // expected-error {{incompatible type}} | 
|  | bc = bc ^ sc2; // expected-error {{incompatible type}} | 
|  |  | 
|  | fd = fd ^ fd2; // expected-error {{invalid operands}} | 
|  | fd = bl ^ fd2; // expected-error {{invalid operands}} | 
|  |  | 
|  | ss ^= ss2; | 
|  | us ^= us2; | 
|  | bs ^= bs2; | 
|  |  | 
|  | si ^= si2; | 
|  | ui ^= ui2; | 
|  | bi ^= bi2; | 
|  |  | 
|  | sl ^= sl2; | 
|  | ul ^= ul2; | 
|  | bl ^= bl2; | 
|  |  | 
|  | fd ^= bl2; // expected-error {{invalid operands}} | 
|  | fd ^= fd2; // expected-error {{invalid operands}} | 
|  |  | 
|  | // ------------------------------------------------------------------------- | 
|  | // Test <<. | 
|  | // ------------------------------------------------------------------------- | 
|  |  | 
|  | sc = sc << sc2; | 
|  | sc = sc << uc2; | 
|  | sc = uc << sc2; // expected-error {{incompatible type}} | 
|  | sc = sc << bc2; // expected-error {{invalid operands}} | 
|  | sc = bc << sc2; // expected-error {{invalid operands}} | 
|  |  | 
|  | uc = uc << uc2; | 
|  | uc = sc << uc2; // expected-error {{assigning to}} | 
|  | uc = uc << sc2; | 
|  | uc = bc << uc2; // expected-error {{invalid operands}} | 
|  | uc = uc << bc2; // expected-error {{invalid operands}} | 
|  |  | 
|  | bc = bc << bc2; // expected-error {{invalid operands}} | 
|  | bc = bc << uc2; // expected-error {{invalid operands}} | 
|  | bc = uc << bc2; // expected-error {{invalid operands}} | 
|  | bc = bc << sc2; // expected-error {{invalid operands}} | 
|  | bc = sc << bc2; // expected-error {{invalid operands}} | 
|  |  | 
|  | sc = sc << 1; | 
|  | sc = sc << 1.0f; // expected-error {{integer is required}} | 
|  | sc = sc << sc_scalar; | 
|  | sc = sc << uc_scalar; | 
|  | sc = sc << ss_scalar; | 
|  | sc = sc << us_scalar; | 
|  | sc = sc << si_scalar; | 
|  | sc = sc << ui_scalar; | 
|  | sc = sc << sl_scalar; | 
|  | sc = sc << ul_scalar; | 
|  | sc = sc_scalar << sc; // expected-error {{first operand is not a vector}} | 
|  | sc = uc_scalar << sc; // expected-error {{first operand is not a vector}} | 
|  | uc = uc << sc_scalar; | 
|  | uc = uc << uc_scalar; | 
|  | uc = sc_scalar << uc; // expected-error {{first operand is not a vector}} | 
|  | uc = uc_scalar << uc; // expected-error {{first operand is not a vector}} | 
|  |  | 
|  | ss = ss << ss2; | 
|  | ss = ss << ss_scalar; | 
|  | us = us << us2; | 
|  | us = us << us_scalar; | 
|  | bs = bs << bs2; // expected-error {{invalid operands}} | 
|  |  | 
|  | si = si << si2; | 
|  | si = si << si_scalar; | 
|  | ui = ui << ui2; | 
|  | ui = ui << ui_scalar; | 
|  | bi = bi << bi2; // expected-error {{invalid operands}} | 
|  |  | 
|  | sl = sl << sl2; | 
|  | sl = sl << sl_scalar; | 
|  | ul = ul << ul2; | 
|  | ul = ul << ul_scalar; | 
|  | bl = bl << bl2; // expected-error {{invalid operands}} | 
|  |  | 
|  | fd = fd << fd2; // expected-error {{integer is required}} | 
|  | fd = fd << ul2; // expected-error {{integer is required}} | 
|  | fd = sl << fd2; // expected-error {{integer is required}} | 
|  |  | 
|  | sc <<= sc2; | 
|  | sc <<= uc2; | 
|  | sc <<= bc2; // expected-error {{invalid operands}} | 
|  | sc <<= sc_scalar; | 
|  |  | 
|  | uc <<= uc2; | 
|  | uc <<= sc2; | 
|  | uc <<= bc2; // expected-error {{invalid operands}} | 
|  | uc <<= uc_scalar; | 
|  |  | 
|  | bc <<= bc2; // expected-error {{invalid operands}} | 
|  | bc <<= sc2; // expected-error {{invalid operands}} | 
|  | bc <<= uc2; // expected-error {{invalid operands}} | 
|  |  | 
|  | sc <<= ss2; // expected-error {{vector operands do not have the same number of elements}} | 
|  | sc <<= si2; // expected-error {{vector operands do not have the same number of elements}} | 
|  | sc <<= sl2; // expected-error {{vector operands do not have the same number of elements}} | 
|  | sc <<= fd2; // expected-error {{integer is required}} | 
|  |  | 
|  | ss <<= ss2; | 
|  | ss <<= ss_scalar; | 
|  | us <<= us2; | 
|  | us <<= us_scalar; | 
|  | bs <<= bs2; // expected-error {{invalid operands}} | 
|  |  | 
|  | si <<= si2; | 
|  | si <<= si_scalar; | 
|  | ui <<= ui2; | 
|  | ui <<= ui_scalar; | 
|  | bi <<= bi2; // expected-error {{invalid operands}} | 
|  |  | 
|  | sl <<= sl2; | 
|  | sl <<= sl_scalar; | 
|  | ul <<= ul2; | 
|  | ul <<= ul_scalar; | 
|  | bl <<= bl2; // expected-error {{invalid operands}} | 
|  |  | 
|  | fd <<= fd2; // expected-error {{integer is required}} | 
|  |  | 
|  | // ------------------------------------------------------------------------- | 
|  | // Test >>. | 
|  | // ------------------------------------------------------------------------- | 
|  |  | 
|  | sc = sc >> sc2; | 
|  | sc = sc >> uc2; | 
|  | sc = uc >> sc2; // expected-error {{incompatible type}} | 
|  | sc = sc >> bc2; // expected-error {{invalid operands}} | 
|  | sc = bc >> sc2; // expected-error {{invalid operands}} | 
|  |  | 
|  | uc = uc >> uc2; | 
|  | uc = sc >> uc2; // expected-error {{assigning to}} | 
|  | uc = uc >> sc2; | 
|  | uc = bc >> uc2; // expected-error {{invalid operands}} | 
|  | uc = uc >> bc2; // expected-error {{invalid operands}} | 
|  |  | 
|  | bc = bc >> bc2; // expected-error {{invalid operands}} | 
|  | bc = bc >> uc2; // expected-error {{invalid operands}} | 
|  | bc = uc >> bc2; // expected-error {{invalid operands}} | 
|  | bc = bc >> sc2; // expected-error {{invalid operands}} | 
|  | bc = sc >> bc2; // expected-error {{invalid operands}} | 
|  |  | 
|  | sc = sc >> 1; | 
|  | sc = sc >> 1.0f; // expected-error {{integer is required}} | 
|  | sc = sc >> sc_scalar; | 
|  | sc = sc >> uc_scalar; | 
|  | sc = sc >> ss_scalar; | 
|  | sc = sc >> us_scalar; | 
|  | sc = sc >> si_scalar; | 
|  | sc = sc >> ui_scalar; | 
|  | sc = sc >> sl_scalar; | 
|  | sc = sc >> ul_scalar; | 
|  | sc = sc_scalar >> sc; // expected-error {{first operand is not a vector}} | 
|  | sc = uc_scalar >> sc; // expected-error {{first operand is not a vector}} | 
|  | uc = uc >> sc_scalar; | 
|  | uc = uc >> uc_scalar; | 
|  | uc = sc_scalar >> uc; // expected-error {{first operand is not a vector}} | 
|  | uc = uc_scalar >> uc; // expected-error {{first operand is not a vector}} | 
|  |  | 
|  | ss = ss >> ss2; | 
|  | ss = ss >> ss_scalar; | 
|  | us = us >> us2; | 
|  | us = us >> us_scalar; | 
|  | bs = bs >> bs2; // expected-error {{invalid operands}} | 
|  |  | 
|  | si = si >> si2; | 
|  | si = si >> si_scalar; | 
|  | ui = ui >> ui2; | 
|  | ui = ui >> ui_scalar; | 
|  | bi = bi >> bi2; // expected-error {{invalid operands}} | 
|  |  | 
|  | sl = sl >> sl2; | 
|  | sl = sl >> sl_scalar; | 
|  | ul = ul >> ul2; | 
|  | ul = ul >> ul_scalar; | 
|  | bl = bl >> bl2; // expected-error {{invalid operands}} | 
|  |  | 
|  | fd = fd >> fd2; // expected-error {{integer is required}} | 
|  | fd = fd >> ul2; // expected-error {{integer is required}} | 
|  | fd = sl >> fd2; // expected-error {{integer is required}} | 
|  |  | 
|  | sc >>= sc2; | 
|  | sc >>= uc2; | 
|  | sc >>= bc2; // expected-error {{invalid operands}} | 
|  | sc >>= sc_scalar; | 
|  |  | 
|  | uc >>= uc2; | 
|  | uc >>= sc2; | 
|  | uc >>= bc2; // expected-error {{invalid operands}} | 
|  | uc >>= uc_scalar; | 
|  |  | 
|  | bc >>= bc2; // expected-error {{invalid operands}} | 
|  | bc >>= sc2; // expected-error {{invalid operands}} | 
|  | bc >>= uc2; // expected-error {{invalid operands}} | 
|  |  | 
|  | sc >>= ss2; // expected-error {{vector operands do not have the same number of elements}} | 
|  | sc >>= si2; // expected-error {{vector operands do not have the same number of elements}} | 
|  | sc >>= sl2; // expected-error {{vector operands do not have the same number of elements}} | 
|  | sc >>= fd2; // expected-error {{integer is required}} | 
|  |  | 
|  | ss >>= ss2; | 
|  | ss >>= ss_scalar; | 
|  | us >>= us2; | 
|  | us >>= us_scalar; | 
|  | bs >>= bs2; // expected-error {{invalid operands}} | 
|  |  | 
|  | si >>= si2; | 
|  | si >>= si_scalar; | 
|  | ui >>= ui2; | 
|  | ui >>= ui_scalar; | 
|  | bi >>= bi2; // expected-error {{invalid operands}} | 
|  |  | 
|  | sl >>= sl2; | 
|  | sl >>= sl_scalar; | 
|  | ul >>= ul2; | 
|  | ul >>= ul_scalar; | 
|  | bl >>= bl2; // expected-error {{invalid operands}} | 
|  |  | 
|  | fd >>= fd2; // expected-error {{integer is required}} | 
|  |  | 
|  | // ------------------------------------------------------------------------- | 
|  | // Test ==. | 
|  | // ------------------------------------------------------------------------- | 
|  |  | 
|  | (void)(sc == sc2); | 
|  | (void)(uc == uc2); | 
|  | (void)(bc == bc2); | 
|  |  | 
|  | (void)(sc == uc); // expected-error {{cannot convert}} | 
|  | (void)(sc == bc); | 
|  |  | 
|  | (void)(uc == sc); // expected-error {{cannot convert}} | 
|  | (void)(uc == bc); | 
|  |  | 
|  | (void)(bc == sc); | 
|  | (void)(bc == uc); | 
|  |  | 
|  | (void)(ss == ss2); | 
|  | (void)(us == us2); | 
|  | (void)(bs == bs2); | 
|  |  | 
|  | (void)(si == si2); | 
|  | (void)(ui == ui2); | 
|  | (void)(bi == bi2); | 
|  |  | 
|  | (void)(sl == sl2); | 
|  | (void)(ul == ul2); | 
|  | (void)(bl == bl2); | 
|  | (void)(fd == fd2); | 
|  |  | 
|  | (void)(fd == ul); // expected-error {{cannot convert}} | 
|  | (void)(ul == fd); // expected-error {{cannot convert}} | 
|  |  | 
|  | // ------------------------------------------------------------------------- | 
|  | // Test that == rules apply to != too. | 
|  | // ------------------------------------------------------------------------- | 
|  |  | 
|  | (void)(sc != sc2); | 
|  | (void)(uc != uc2); | 
|  | (void)(bc != bc2); | 
|  |  | 
|  | (void)(sc != uc); // expected-error {{cannot convert}} | 
|  | (void)(sc != bc); | 
|  |  | 
|  | (void)(ss != ss2); | 
|  | (void)(us != us2); | 
|  | (void)(bs != bs2); | 
|  |  | 
|  | (void)(si != si2); | 
|  | (void)(ui != ui2); | 
|  | (void)(bi != bi2); | 
|  |  | 
|  | (void)(sl != sl2); | 
|  | (void)(ul != ul2); | 
|  | (void)(bl != bl2); | 
|  | (void)(fd != fd2); | 
|  |  | 
|  | // ------------------------------------------------------------------------- | 
|  | // Test that == rules apply to <= too. | 
|  | // ------------------------------------------------------------------------- | 
|  |  | 
|  | (void)(sc <= sc2); | 
|  | (void)(uc <= uc2); | 
|  | (void)(bc <= bc2); | 
|  |  | 
|  | (void)(sc <= uc); // expected-error {{cannot convert}} | 
|  | (void)(sc <= bc); | 
|  |  | 
|  | (void)(ss <= ss2); | 
|  | (void)(us <= us2); | 
|  | (void)(bs <= bs2); | 
|  |  | 
|  | (void)(si <= si2); | 
|  | (void)(ui <= ui2); | 
|  | (void)(bi <= bi2); | 
|  |  | 
|  | (void)(sl <= sl2); | 
|  | (void)(ul <= ul2); | 
|  | (void)(bl <= bl2); | 
|  | (void)(fd <= fd2); | 
|  |  | 
|  | // ------------------------------------------------------------------------- | 
|  | // Test that == rules apply to >= too. | 
|  | // ------------------------------------------------------------------------- | 
|  |  | 
|  | (void)(sc >= sc2); | 
|  | (void)(uc >= uc2); | 
|  | (void)(bc >= bc2); | 
|  |  | 
|  | (void)(sc >= uc); // expected-error {{cannot convert}} | 
|  | (void)(sc >= bc); | 
|  |  | 
|  | (void)(ss >= ss2); | 
|  | (void)(us >= us2); | 
|  | (void)(bs >= bs2); | 
|  |  | 
|  | (void)(si >= si2); | 
|  | (void)(ui >= ui2); | 
|  | (void)(bi >= bi2); | 
|  |  | 
|  | (void)(sl >= sl2); | 
|  | (void)(ul >= ul2); | 
|  | (void)(bl >= bl2); | 
|  | (void)(fd >= fd2); | 
|  |  | 
|  | // ------------------------------------------------------------------------- | 
|  | // Test that == rules apply to < too. | 
|  | // ------------------------------------------------------------------------- | 
|  |  | 
|  | (void)(sc < sc2); | 
|  | (void)(uc < uc2); | 
|  | (void)(bc < bc2); | 
|  |  | 
|  | (void)(sc < uc); // expected-error {{cannot convert}} | 
|  | (void)(sc < bc); | 
|  |  | 
|  | (void)(ss < ss2); | 
|  | (void)(us < us2); | 
|  | (void)(bs < bs2); | 
|  |  | 
|  | (void)(si < si2); | 
|  | (void)(ui < ui2); | 
|  | (void)(bi < bi2); | 
|  |  | 
|  | (void)(sl < sl2); | 
|  | (void)(ul < ul2); | 
|  | (void)(bl < bl2); | 
|  | (void)(fd < fd2); | 
|  |  | 
|  | // ------------------------------------------------------------------------- | 
|  | // Test that == rules apply to > too. | 
|  | // ------------------------------------------------------------------------- | 
|  |  | 
|  | (void)(sc > sc2); | 
|  | (void)(uc > uc2); | 
|  | (void)(bc > bc2); | 
|  |  | 
|  | (void)(sc > uc); // expected-error {{cannot convert}} | 
|  | (void)(sc > bc); | 
|  |  | 
|  | (void)(ss > ss2); | 
|  | (void)(us > us2); | 
|  | (void)(bs > bs2); | 
|  |  | 
|  | (void)(si > si2); | 
|  | (void)(ui > ui2); | 
|  | (void)(bi > bi2); | 
|  |  | 
|  | (void)(sl > sl2); | 
|  | (void)(ul > ul2); | 
|  | (void)(bl > bl2); | 
|  | (void)(fd > fd2); | 
|  | } |