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