1 // RUN: %clang_cc1 -triple s390x-linux-gnu -fzvector \ 2 // RUN: -flax-vector-conversions=none -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 signed __int128 slll, slll2; 22 vector unsigned __int128 ulll, ulll2; 23 vector bool __int128 blll, blll2; 24 25 vector double fd, fd2; 26 27 vector long ll; // expected-error {{cannot use 'long' with '__vector'}} 28 vector float ff; // expected-error {{cannot use 'float' with '__vector'}} 29 vector long double ld; // expected-error {{cannot use 'long double' with '__vector'}} 30 vector float _Complex cf; // expected-error {{cannot use '_Complex' with '__vector'}} 31 vector double _Complex cd; // expected-error {{cannot use '_Complex' with '__vector'}} 32 vector long double _Complex cld; // expected-error {{cannot use '_Complex' with '__vector'}} 33 34 signed char sc_scalar; 35 unsigned char uc_scalar; 36 37 signed short ss_scalar; 38 unsigned short us_scalar; 39 40 signed int si_scalar; 41 unsigned int ui_scalar; 42 43 signed long sl_scalar; 44 unsigned long ul_scalar; 45 46 signed __int128 slll_scalar; 47 unsigned __int128 ulll_scalar; 48 49 double fd_scalar; 50 51 // Verify that __vector is also recognized 52 __vector signed char sc3; 53 __vector unsigned char uc3; 54 __vector bool char bc3; 55 __vector signed short ss3; 56 __vector unsigned short us3; 57 __vector bool short bs3; 58 __vector signed int si3; 59 __vector unsigned int ui3; 60 __vector bool int bi3; 61 __vector signed long long sl3; 62 __vector unsigned long long ul3; 63 __vector bool long long bl3; 64 __vector signed __int128 slll3; 65 __vector unsigned __int128 ulll3; 66 __vector bool __int128 blll3; 67 __vector double fd3; 68 __vector long ll3; // expected-error {{cannot use 'long' with '__vector'}} 69 __vector float ff3; // expected-error {{cannot use 'float' with '__vector'}} 70 __vector long double ld3; // expected-error {{cannot use 'long double' with '__vector'}} 71 __vector float _Complex cf3; // expected-error {{cannot use '_Complex' with '__vector'}} 72 __vector double _Complex cd3; // expected-error {{cannot use '_Complex' with '__vector'}} 73 __vector long double _Complex cld3; // expected-error {{cannot use '_Complex' with '__vector'}} 74 75 // Likewise for __bool 76 vector __bool char bc4; 77 vector __bool short bs4; 78 vector __bool int bi4; 79 vector __bool long long bl4; 80 __vector __bool char bc5; 81 __vector __bool short bs5; 82 __vector __bool int bi5; 83 __vector __bool long long bl5; 84 85 // Verify operation of vec_step 86 int res_sc[vec_step(sc) == 16 ? 1 : -1]; 87 int res_uc[vec_step(uc) == 16 ? 1 : -1]; 88 int res_bc[vec_step(bc) == 16 ? 1 : -1]; 89 int res_ss[vec_step(ss) == 8 ? 1 : -1]; 90 int res_us[vec_step(us) == 8 ? 1 : -1]; 91 int res_bs[vec_step(bs) == 8 ? 1 : -1]; 92 int res_si[vec_step(si) == 4 ? 1 : -1]; 93 int res_ui[vec_step(ui) == 4 ? 1 : -1]; 94 int res_bi[vec_step(bi) == 4 ? 1 : -1]; 95 int res_sl[vec_step(sl) == 2 ? 1 : -1]; 96 int res_ul[vec_step(ul) == 2 ? 1 : -1]; 97 int res_bl[vec_step(bl) == 2 ? 1 : -1]; 98 int res_slll[vec_step(slll) == 1 ? 1 : -1]; 99 int res_ulll[vec_step(ulll) == 1 ? 1 : -1]; 100 int res_blll[vec_step(blll) == 1 ? 1 : -1]; 101 int res_fd[vec_step(fd) == 2 ? 1 : -1]; 102 103 104 void foo(void) 105 { 106 // ------------------------------------------------------------------------- 107 // Test assignment. 108 // ------------------------------------------------------------------------- 109 110 sc = sc2; 111 uc = uc2; 112 bc = bc2; 113 114 ss = ss2; 115 us = us2; 116 bs = bs2; 117 118 si = si2; 119 ui = ui2; 120 bi = bi2; 121 122 sl = sl2; 123 ul = ul2; 124 bl = bl2; 125 fd = fd2; 126 127 slll = slll2; 128 ulll = ulll2; 129 blll = blll2; 130 131 sc = uc2; // expected-error {{incompatible type}} 132 sc = bc2; // expected-error {{incompatible type}} 133 uc = sc2; // expected-error {{incompatible type}} 134 uc = bc2; // expected-error {{incompatible type}} 135 bc = sc2; // expected-error {{incompatible type}} 136 bc = uc2; // expected-error {{incompatible type}} 137 138 sc = sc_scalar; // expected-error {{incompatible type}} 139 sc = uc_scalar; // expected-error {{incompatible type}} 140 uc = sc_scalar; // expected-error {{incompatible type}} 141 uc = uc_scalar; // expected-error {{incompatible type}} 142 bc = sc_scalar; // expected-error {{incompatible type}} 143 bc = uc_scalar; // expected-error {{incompatible type}} 144 145 sc = ss2; // expected-error {{incompatible type}} 146 sc = si2; // expected-error {{incompatible type}} 147 sc = sl2; // expected-error {{incompatible type}} 148 sc = fd2; // expected-error {{incompatible type}} 149 sc = slll2; // expected-error {{incompatible type}} 150 151 ss = sc2; // expected-error {{incompatible type}} 152 si = sc2; // expected-error {{incompatible type}} 153 sl = sc2; // expected-error {{incompatible type}} 154 fd = sc2; // expected-error {{incompatible type}} 155 slll = sc2; // expected-error {{incompatible type}} 156 157 uc = us2; // expected-error {{incompatible type}} 158 uc = ui2; // expected-error {{incompatible type}} 159 uc = ul2; // expected-error {{incompatible type}} 160 uc = fd2; // expected-error {{incompatible type}} 161 uc = ulll2; // expected-error {{incompatible type}} 162 163 us = uc2; // expected-error {{incompatible type}} 164 ui = uc2; // expected-error {{incompatible type}} 165 ul = uc2; // expected-error {{incompatible type}} 166 fd = uc2; // expected-error {{incompatible type}} 167 ulll = uc2; // expected-error {{incompatible type}} 168 169 bc = us2; // expected-error {{incompatible type}} 170 bc = ui2; // expected-error {{incompatible type}} 171 bc = ul2; // expected-error {{incompatible type}} 172 bc = fd2; // expected-error {{incompatible type}} 173 bc = ulll2; // expected-error {{incompatible type}} 174 175 bs = bc2; // expected-error {{incompatible type}} 176 bi = bc2; // expected-error {{incompatible type}} 177 bl = bc2; // expected-error {{incompatible type}} 178 fd = bc2; // expected-error {{incompatible type}} 179 blll = bc2; // expected-error {{incompatible type}} 180 181 // ------------------------------------------------------------------------- 182 // Test casts to same element width. 183 // ------------------------------------------------------------------------- 184 185 sc = (vector signed char)bc2; 186 bc = (vector bool char)uc2; 187 uc = (vector unsigned char)sc2; 188 189 ss = (vector signed short)bs2; 190 bs = (vector bool short)us2; 191 us = (vector unsigned short)ss2; 192 193 si = (vector signed int)bi2; 194 bi = (vector bool int)ui2; 195 ui = (vector unsigned int)si2; 196 197 sl = (vector signed long long)bl2; 198 bl = (vector bool long long)ul2; 199 ul = (vector unsigned long long)fd2; 200 fd = (vector double)sl2; 201 202 slll = (vector signed __int128)blll2; 203 blll = (vector bool __int128)ulll2; 204 ulll = (vector unsigned __int128)slll2; 205 206 // ------------------------------------------------------------------------- 207 // Test casts to different element width. 208 // ------------------------------------------------------------------------- 209 210 sc = (vector signed char)bs2; 211 bc = (vector bool char)us2; 212 uc = (vector unsigned char)fd2; 213 214 ss = (vector signed short)bi2; 215 bs = (vector bool short)ui2; 216 us = (vector unsigned short)fd2; 217 218 si = (vector signed int)bl2; 219 bi = (vector bool int)ul2; 220 ui = (vector unsigned int)fd2; 221 222 sl = (vector signed long long)bc2; 223 bl = (vector bool long long)uc2; 224 ul = (vector unsigned long long)sc2; 225 fd = (vector double)sc2; 226 227 slll = (vector signed __int128)bi2; 228 blll = (vector bool __int128)ui2; 229 ulll = (vector unsigned __int128)si2; 230 231 // ------------------------------------------------------------------------- 232 // Test ++. 233 // ------------------------------------------------------------------------- 234 235 ++sc2; 236 ++uc2; 237 ++bc2; // expected-error {{cannot increment}} 238 239 ++ss2; 240 ++us2; 241 ++bs2; // expected-error {{cannot increment}} 242 243 ++si2; 244 ++ui2; 245 ++bi2; // expected-error {{cannot increment}} 246 247 ++sl2; 248 ++ul2; 249 ++bl2; // expected-error {{cannot increment}} 250 251 ++slll2; 252 ++ulll2; 253 ++blll2; // expected-error {{cannot increment}} 254 255 ++fd2; 256 257 sc++; 258 uc++; 259 bc++; // expected-error {{cannot increment}} 260 261 ss++; 262 us++; 263 bs++; // expected-error {{cannot increment}} 264 265 si++; 266 ui++; 267 bi++; // expected-error {{cannot increment}} 268 269 sl++; 270 ul++; 271 bl++; // expected-error {{cannot increment}} 272 273 slll++; 274 ulll++; 275 blll++; // expected-error {{cannot increment}} 276 277 fd++; 278 279 // ------------------------------------------------------------------------- 280 // Test --. 281 // ------------------------------------------------------------------------- 282 283 --sc2; 284 --uc2; 285 --bc2; // expected-error {{cannot decrement}} 286 287 --ss2; 288 --us2; 289 --bs2; // expected-error {{cannot decrement}} 290 291 --si2; 292 --ui2; 293 --bi2; // expected-error {{cannot decrement}} 294 295 --sl2; 296 --ul2; 297 --bl2; // expected-error {{cannot decrement}} 298 299 --slll2; 300 --ulll2; 301 --blll2; // expected-error {{cannot decrement}} 302 303 --fd2; 304 305 sc--; 306 uc--; 307 bc--; // expected-error {{cannot decrement}} 308 309 ss--; 310 us--; 311 bs--; // expected-error {{cannot decrement}} 312 313 si--; 314 ui--; 315 bi--; // expected-error {{cannot decrement}} 316 317 sl--; 318 ul--; 319 bl--; // expected-error {{cannot decrement}} 320 321 slll--; 322 ulll--; 323 blll--; // expected-error {{cannot decrement}} 324 325 fd--; 326 327 // ------------------------------------------------------------------------- 328 // Test unary +. 329 // ------------------------------------------------------------------------- 330 331 sc = +sc2; 332 uc = +uc2; 333 bc = +bc2; // expected-error {{invalid argument type}} 334 335 ss = +ss2; 336 us = +us2; 337 bs = +bs2; // expected-error {{invalid argument type}} 338 339 si = +si2; 340 ui = +ui2; 341 bi = +bi2; // expected-error {{invalid argument type}} 342 343 sl = +sl2; 344 ul = +ul2; 345 bl = +bl2; // expected-error {{invalid argument type}} 346 347 slll = +slll2; 348 ulll = +ulll2; 349 blll = +blll2; // expected-error {{invalid argument type}} 350 351 fd = +fd2; 352 353 sc = +si2; // expected-error {{assigning to}} 354 ui = +si2; // expected-error {{assigning to}} 355 ui = +bi2; // expected-error {{invalid argument type}} 356 357 // ------------------------------------------------------------------------- 358 // Test unary -. 359 // ------------------------------------------------------------------------- 360 361 sc = -sc2; 362 uc = -uc2; 363 bc = -bc2; // expected-error {{invalid argument type}} 364 365 ss = -ss2; 366 us = -us2; 367 bs = -bs2; // expected-error {{invalid argument type}} 368 369 si = -si2; 370 ui = -ui2; 371 bi = -bi2; // expected-error {{invalid argument type}} 372 373 sl = -sl2; 374 ul = -ul2; 375 bl = -bl2; // expected-error {{invalid argument type}} 376 377 slll = -slll2; 378 ulll = -ulll2; 379 blll = -blll2; // expected-error {{invalid argument type}} 380 381 fd = -fd2; 382 383 sc = -si2; // expected-error {{assigning to}} 384 ui = -si2; // expected-error {{assigning to}} 385 ui = -bi2; // expected-error {{invalid argument type}} 386 387 // ------------------------------------------------------------------------- 388 // Test ~. 389 // ------------------------------------------------------------------------- 390 391 sc = ~sc2; 392 uc = ~uc2; 393 bc = ~bc2; 394 395 ss = ~ss2; 396 us = ~us2; 397 bs = ~bs2; 398 399 si = ~si2; 400 ui = ~ui2; 401 bi = ~bi2; 402 403 sl = ~sl2; 404 ul = ~ul2; 405 bl = ~bl2; 406 407 slll = ~slll2; 408 ulll = ~ulll2; 409 blll = ~blll2; 410 411 fd = ~fd2; // expected-error {{invalid argument}} 412 413 sc = ~si2; // expected-error {{assigning to}} 414 ui = ~si2; // expected-error {{assigning to}} 415 ui = ~bi2; // expected-error {{assigning to}} 416 417 // ------------------------------------------------------------------------- 418 // Test binary +. 419 // ------------------------------------------------------------------------- 420 421 sc = sc + sc2; 422 sc = sc + uc2; // expected-error {{cannot convert}} 423 sc = uc + sc2; // expected-error {{cannot convert}} 424 sc = sc + bc2; 425 sc = bc + sc2; 426 427 uc = uc + uc2; 428 uc = sc + uc2; // expected-error {{cannot convert}} 429 uc = uc + sc2; // expected-error {{cannot convert}} 430 uc = bc + uc2; 431 uc = uc + bc2; 432 433 bc = bc + bc2; // expected-error {{invalid operands}} 434 bc = bc + uc2; // expected-error {{incompatible type}} 435 bc = uc + bc2; // expected-error {{incompatible type}} 436 bc = bc + sc2; // expected-error {{incompatible type}} 437 bc = sc + bc2; // expected-error {{incompatible type}} 438 439 sc = sc + sc_scalar; 440 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}} 441 sc = sc_scalar + sc; 442 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}} 443 uc = uc + sc_scalar; // expected-error {{implicit conversion changes signedness: 'signed char' to '__vector unsigned char' (vector of 16 'unsigned char' values)}} 444 uc = uc + uc_scalar; 445 uc = sc_scalar + uc; // expected-error {{implicit conversion changes signedness: 'signed char' to '__vector unsigned char' (vector of 16 'unsigned char' values)}} 446 uc = uc_scalar + uc; 447 448 ss = ss + ss2; 449 us = us + us2; 450 bs = bs + bs2; // expected-error {{invalid operands}} 451 452 si = si + si2; 453 ui = ui + ui2; 454 bi = bi + bi2; // expected-error {{invalid operands}} 455 456 sl = sl + sl2; 457 ul = ul + ul2; 458 bl = bl + bl2; // expected-error {{invalid operands}} 459 460 slll = slll + slll2; 461 ulll = ulll + ulll2; 462 blll = blll + blll2; // expected-error {{invalid operands}} 463 464 fd = fd + fd2; 465 fd = fd + ul2; // expected-error {{cannot convert}} 466 fd = sl + fd2; // expected-error {{cannot convert}} 467 468 sc += sc2; 469 sc += uc2; // expected-error {{cannot convert}} 470 sc += bc2; 471 472 uc += uc2; 473 uc += sc2; // expected-error {{cannot convert}} 474 uc += bc2; 475 476 bc += bc2; // expected-error {{invalid operands}} 477 bc += sc2; // expected-error {{cannot convert}} 478 bc += uc2; // expected-error {{cannot convert}} 479 480 sc += ss2; // expected-error {{cannot convert}} 481 sc += si2; // expected-error {{cannot convert}} 482 sc += sl2; // expected-error {{cannot convert}} 483 sc += fd2; // expected-error {{cannot convert}} 484 sc += slll2; // expected-error {{cannot convert}} 485 486 sc += sc_scalar; 487 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}} 488 uc += sc_scalar; // expected-error {{implicit conversion changes signedness: 'signed char' to '__vector unsigned char' (vector of 16 'unsigned char' values)}} 489 uc += uc_scalar; 490 491 ss += ss2; 492 us += us2; 493 bs += bs2; // expected-error {{invalid operands}} 494 495 si += si2; 496 ui += ui2; 497 bi += bi2; // expected-error {{invalid operands}} 498 499 sl += sl2; 500 ul += ul2; 501 bl += bl2; // expected-error {{invalid operands}} 502 503 slll += slll2; 504 ulll += ulll2; 505 blll += blll2; // expected-error {{invalid operands}} 506 507 fd += fd2; 508 509 // ------------------------------------------------------------------------- 510 // Test that binary + rules apply to binary - too. 511 // ------------------------------------------------------------------------- 512 513 sc = sc - sc2; 514 uc = uc - uc2; 515 bc = bc - bc2; // expected-error {{invalid operands}} 516 517 sc = uc - sc2; // expected-error {{cannot convert}} 518 sc = sc - bc2; 519 uc = bc - uc2; 520 521 sc -= sc2; 522 uc -= uc2; 523 bc -= bc2; // expected-error {{invalid operands}} 524 525 sc -= uc2; // expected-error {{cannot convert}} 526 uc -= bc2; 527 bc -= sc2; // expected-error {{cannot convert}} 528 529 ss -= ss2; 530 us -= us2; 531 bs -= bs2; // expected-error {{invalid operands}} 532 533 si -= si2; 534 ui -= ui2; 535 bi -= bi2; // expected-error {{invalid operands}} 536 537 sl -= sl2; 538 ul -= ul2; 539 bl -= bl2; // expected-error {{invalid operands}} 540 541 slll -= slll2; 542 ulll -= ulll2; 543 blll -= blll2; // expected-error {{invalid operands}} 544 545 fd -= fd2; 546 547 // ------------------------------------------------------------------------- 548 // Test that binary + rules apply to * too. 64-bit integer multiplication 549 // is not required by the spec and so isn't tested here. 550 // ------------------------------------------------------------------------- 551 552 sc = sc * sc2; 553 uc = uc * uc2; 554 bc = bc * bc2; // expected-error {{invalid operands}} 555 556 sc = uc * sc2; // expected-error {{cannot convert}} 557 sc = sc * bc2; // expected-error {{cannot convert}} 558 uc = bc * uc2; // expected-error {{cannot convert}} 559 560 sc *= sc2; 561 uc *= uc2; 562 bc *= bc2; // expected-error {{invalid operands}} 563 564 sc *= uc2; // expected-error {{cannot convert}} 565 uc *= bc2; // expected-error {{cannot convert}} 566 bc *= sc2; // expected-error {{cannot convert}} 567 568 ss *= ss2; 569 us *= us2; 570 bs *= bs2; // expected-error {{invalid operands}} 571 572 si *= si2; 573 ui *= ui2; 574 bi *= bi2; // expected-error {{invalid operands}} 575 576 sl *= sl2; 577 ul *= ul2; 578 bl *= bl2; // expected-error {{invalid operands}} 579 580 slll *= slll2; 581 ulll *= ulll2; 582 blll *= blll2; // expected-error {{invalid operands}} 583 584 585 fd *= fd2; 586 587 // ------------------------------------------------------------------------- 588 // Test that * rules apply to / too. 589 // ------------------------------------------------------------------------- 590 591 sc = sc / sc2; 592 uc = uc / uc2; 593 bc = bc / bc2; // expected-error {{invalid operands}} 594 595 sc = uc / sc2; // expected-error {{cannot convert}} 596 sc = sc / bc2; // expected-error {{cannot convert}} 597 uc = bc / uc2; // expected-error {{cannot convert}} 598 599 sc /= sc2; 600 uc /= uc2; 601 bc /= bc2; // expected-error {{invalid operands}} 602 603 sc /= uc2; // expected-error {{cannot convert}} 604 uc /= bc2; // expected-error {{cannot convert}} 605 bc /= sc2; // expected-error {{cannot convert}} 606 607 ss /= ss2; 608 us /= us2; 609 bs /= bs2; // expected-error {{invalid operands}} 610 611 si /= si2; 612 ui /= ui2; 613 bi /= bi2; // expected-error {{invalid operands}} 614 615 sl /= sl2; 616 ul /= ul2; 617 bl /= bl2; // expected-error {{invalid operands}} 618 619 slll /= slll2; 620 ulll /= ulll2; 621 blll /= blll2; // expected-error {{invalid operands}} 622 623 fd /= fd2; 624 625 // ------------------------------------------------------------------------- 626 // Test that / rules apply to % too, except that doubles are not allowed. 627 // ------------------------------------------------------------------------- 628 629 sc = sc % sc2; 630 uc = uc % uc2; 631 bc = bc % bc2; // expected-error {{invalid operands}} 632 633 sc = uc % sc2; // expected-error {{cannot convert}} 634 sc = sc % bc2; // expected-error {{cannot convert}} 635 uc = bc % uc2; // expected-error {{cannot convert}} 636 637 sc %= sc2; 638 uc %= uc2; 639 bc %= bc2; // expected-error {{invalid operands}} 640 641 sc %= uc2; // expected-error {{cannot convert}} 642 uc %= bc2; // expected-error {{cannot convert}} 643 bc %= sc2; // expected-error {{cannot convert}} 644 645 ss %= ss2; 646 us %= us2; 647 bs %= bs2; // expected-error {{invalid operands}} 648 649 si %= si2; 650 ui %= ui2; 651 bi %= bi2; // expected-error {{invalid operands}} 652 653 sl %= sl2; 654 ul %= ul2; 655 bl %= bl2; // expected-error {{invalid operands}} 656 657 slll %= slll2; 658 ulll %= ulll2; 659 blll %= blll2; // expected-error {{invalid operands}} 660 661 fd %= fd2; // expected-error {{invalid operands}} 662 663 // ------------------------------------------------------------------------- 664 // Test &. 665 // ------------------------------------------------------------------------- 666 667 sc = sc & sc2; 668 sc = sc & uc2; // expected-error {{cannot convert}} 669 sc = uc & sc2; // expected-error {{cannot convert}} 670 sc = sc & bc2; 671 sc = bc & sc2; 672 673 uc = uc & uc2; 674 uc = sc & uc2; // expected-error {{cannot convert}} 675 uc = uc & sc2; // expected-error {{cannot convert}} 676 uc = bc & uc2; 677 uc = uc & bc2; 678 679 bc = bc & bc2; 680 bc = bc & uc2; // expected-error {{incompatible type}} 681 bc = uc & bc2; // expected-error {{incompatible type}} 682 bc = bc & sc2; // expected-error {{incompatible type}} 683 bc = sc & bc2; // expected-error {{incompatible type}} 684 685 fd = fd & fd2; // expected-error {{invalid operands}} 686 fd = bl & fd2; // expected-error {{invalid operands}} 687 fd = fd & bl2; // expected-error {{invalid operands}} 688 fd = fd & sl2; // expected-error {{invalid operands}} 689 fd = fd & ul2; // expected-error {{invalid operands}} 690 691 sc &= sc2; 692 sc &= uc2; // expected-error {{cannot convert}} 693 sc &= bc2; 694 695 uc &= uc2; 696 uc &= sc2; // expected-error {{cannot convert}} 697 uc &= bc2; 698 699 bc &= bc2; 700 bc &= sc2; // expected-error {{cannot convert}} 701 bc &= uc2; // expected-error {{cannot convert}} 702 703 sc &= ss2; // expected-error {{cannot convert}} 704 sc &= si2; // expected-error {{cannot convert}} 705 sc &= sl2; // expected-error {{cannot convert}} 706 sc &= fd2; // expected-error {{invalid operands}} 707 708 us &= bc2; // expected-error {{cannot convert}} 709 ui &= bc2; // expected-error {{cannot convert}} 710 ul &= bc2; // expected-error {{cannot convert}} 711 fd &= bc2; // expected-error {{invalid operands}} 712 713 ss &= ss2; 714 us &= us2; 715 bs &= bs2; 716 717 si &= si2; 718 ui &= ui2; 719 bi &= bi2; 720 721 sl &= sl2; 722 ul &= ul2; 723 bl &= bl2; 724 725 slll &= slll2; 726 ulll &= ulll2; 727 blll &= blll2; 728 729 // ------------------------------------------------------------------------- 730 // Test that & rules apply to | too. 731 // ------------------------------------------------------------------------- 732 733 sc = sc | sc2; 734 sc = sc | uc2; // expected-error {{cannot convert}} 735 sc = sc | bc2; 736 737 uc = uc | uc2; 738 uc = sc | uc2; // expected-error {{cannot convert}} 739 uc = bc | uc2; 740 741 bc = bc | bc2; 742 bc = uc | bc2; // expected-error {{incompatible type}} 743 bc = bc | sc2; // expected-error {{incompatible type}} 744 745 fd = fd | fd2; // expected-error {{invalid operands}} 746 fd = bl | fd2; // expected-error {{invalid operands}} 747 748 ss |= ss2; 749 us |= us2; 750 bs |= bs2; 751 752 si |= si2; 753 ui |= ui2; 754 bi |= bi2; 755 756 sl |= sl2; 757 ul |= ul2; 758 bl |= bl2; 759 760 slll |= slll2; 761 ulll |= ulll2; 762 blll |= blll2; 763 764 fd |= bl2; // expected-error {{invalid operands}} 765 fd |= fd2; // expected-error {{invalid operands}} 766 767 // ------------------------------------------------------------------------- 768 // Test that & rules apply to ^ too. 769 // ------------------------------------------------------------------------- 770 771 sc = sc ^ sc2; 772 sc = sc ^ uc2; // expected-error {{cannot convert}} 773 sc = sc ^ bc2; 774 775 uc = uc ^ uc2; 776 uc = sc ^ uc2; // expected-error {{cannot convert}} 777 uc = bc ^ uc2; 778 779 bc = bc ^ bc2; 780 bc = uc ^ bc2; // expected-error {{incompatible type}} 781 bc = bc ^ sc2; // expected-error {{incompatible type}} 782 783 fd = fd ^ fd2; // expected-error {{invalid operands}} 784 fd = bl ^ fd2; // expected-error {{invalid operands}} 785 786 ss ^= ss2; 787 us ^= us2; 788 bs ^= bs2; 789 790 si ^= si2; 791 ui ^= ui2; 792 bi ^= bi2; 793 794 sl ^= sl2; 795 ul ^= ul2; 796 bl ^= bl2; 797 798 slll ^= slll2; 799 ulll ^= ulll2; 800 blll ^= blll2; 801 802 fd ^= bl2; // expected-error {{invalid operands}} 803 fd ^= fd2; // expected-error {{invalid operands}} 804 805 // ------------------------------------------------------------------------- 806 // Test <<. 807 // ------------------------------------------------------------------------- 808 809 sc = sc << sc2; 810 sc = sc << uc2; 811 sc = uc << sc2; // expected-error {{incompatible type}} 812 sc = sc << bc2; // expected-error {{invalid operands}} 813 sc = bc << sc2; // expected-error {{invalid operands}} 814 815 uc = uc << uc2; 816 uc = sc << uc2; // expected-error {{assigning to}} 817 uc = uc << sc2; 818 uc = bc << uc2; // expected-error {{invalid operands}} 819 uc = uc << bc2; // expected-error {{invalid operands}} 820 821 bc = bc << bc2; // expected-error {{invalid operands}} 822 bc = bc << uc2; // expected-error {{invalid operands}} 823 bc = uc << bc2; // expected-error {{invalid operands}} 824 bc = bc << sc2; // expected-error {{invalid operands}} 825 bc = sc << bc2; // expected-error {{invalid operands}} 826 827 sc = sc << 1; 828 sc = sc << 1.0f; // expected-error {{integer is required}} 829 sc = sc << sc_scalar; 830 sc = sc << uc_scalar; 831 sc = sc << ss_scalar; 832 sc = sc << us_scalar; 833 sc = sc << si_scalar; 834 sc = sc << ui_scalar; 835 sc = sc << sl_scalar; 836 sc = sc << ul_scalar; 837 sc = sc_scalar << sc; // expected-error {{first operand is not a vector}} 838 sc = uc_scalar << sc; // expected-error {{first operand is not a vector}} 839 uc = uc << sc_scalar; 840 uc = uc << uc_scalar; 841 uc = sc_scalar << uc; // expected-error {{first operand is not a vector}} 842 uc = uc_scalar << uc; // expected-error {{first operand is not a vector}} 843 844 ss = ss << ss2; 845 ss = ss << ss_scalar; 846 us = us << us2; 847 us = us << us_scalar; 848 bs = bs << bs2; // expected-error {{invalid operands}} 849 850 si = si << si2; 851 si = si << si_scalar; 852 ui = ui << ui2; 853 ui = ui << ui_scalar; 854 bi = bi << bi2; // expected-error {{invalid operands}} 855 856 sl = sl << sl2; 857 sl = sl << sl_scalar; 858 ul = ul << ul2; 859 ul = ul << ul_scalar; 860 bl = bl << bl2; // expected-error {{invalid operands}} 861 862 slll = slll << slll2; 863 slll = slll << slll_scalar; 864 ulll = ulll << ulll2; 865 ulll = ulll << ulll_scalar; 866 blll = blll << blll2; // expected-error {{invalid operands}} 867 868 fd = fd << fd2; // expected-error {{integer is required}} 869 fd = fd << ul2; // expected-error {{integer is required}} 870 fd = sl << fd2; // expected-error {{integer is required}} 871 872 sc <<= sc2; 873 sc <<= uc2; 874 sc <<= bc2; // expected-error {{invalid operands}} 875 sc <<= sc_scalar; 876 877 uc <<= uc2; 878 uc <<= sc2; 879 uc <<= bc2; // expected-error {{invalid operands}} 880 uc <<= uc_scalar; 881 882 bc <<= bc2; // expected-error {{invalid operands}} 883 bc <<= sc2; // expected-error {{invalid operands}} 884 bc <<= uc2; // expected-error {{invalid operands}} 885 886 sc <<= ss2; // expected-error {{vector operands do not have the same number of elements}} 887 sc <<= si2; // expected-error {{vector operands do not have the same number of elements}} 888 sc <<= sl2; // expected-error {{vector operands do not have the same number of elements}} 889 sc <<= fd2; // expected-error {{integer is required}} 890 891 ss <<= ss2; 892 ss <<= ss_scalar; 893 us <<= us2; 894 us <<= us_scalar; 895 bs <<= bs2; // expected-error {{invalid operands}} 896 897 si <<= si2; 898 si <<= si_scalar; 899 ui <<= ui2; 900 ui <<= ui_scalar; 901 bi <<= bi2; // expected-error {{invalid operands}} 902 903 sl <<= sl2; 904 sl <<= sl_scalar; 905 ul <<= ul2; 906 ul <<= ul_scalar; 907 bl <<= bl2; // expected-error {{invalid operands}} 908 909 slll <<= slll2; 910 slll <<= slll_scalar; 911 ulll <<= ulll2; 912 ulll <<= ulll_scalar; 913 blll <<= blll2; // expected-error {{invalid operands}} 914 915 fd <<= fd2; // expected-error {{integer is required}} 916 917 // ------------------------------------------------------------------------- 918 // Test >>. 919 // ------------------------------------------------------------------------- 920 921 sc = sc >> sc2; 922 sc = sc >> uc2; 923 sc = uc >> sc2; // expected-error {{incompatible type}} 924 sc = sc >> bc2; // expected-error {{invalid operands}} 925 sc = bc >> sc2; // expected-error {{invalid operands}} 926 927 uc = uc >> uc2; 928 uc = sc >> uc2; // expected-error {{assigning to}} 929 uc = uc >> sc2; 930 uc = bc >> uc2; // expected-error {{invalid operands}} 931 uc = uc >> bc2; // expected-error {{invalid operands}} 932 933 bc = bc >> bc2; // expected-error {{invalid operands}} 934 bc = bc >> uc2; // expected-error {{invalid operands}} 935 bc = uc >> bc2; // expected-error {{invalid operands}} 936 bc = bc >> sc2; // expected-error {{invalid operands}} 937 bc = sc >> bc2; // expected-error {{invalid operands}} 938 939 sc = sc >> 1; 940 sc = sc >> 1.0f; // expected-error {{integer is required}} 941 sc = sc >> sc_scalar; 942 sc = sc >> uc_scalar; 943 sc = sc >> ss_scalar; 944 sc = sc >> us_scalar; 945 sc = sc >> si_scalar; 946 sc = sc >> ui_scalar; 947 sc = sc >> sl_scalar; 948 sc = sc >> ul_scalar; 949 sc = sc_scalar >> sc; // expected-error {{first operand is not a vector}} 950 sc = uc_scalar >> sc; // expected-error {{first operand is not a vector}} 951 uc = uc >> sc_scalar; 952 uc = uc >> uc_scalar; 953 uc = sc_scalar >> uc; // expected-error {{first operand is not a vector}} 954 uc = uc_scalar >> uc; // expected-error {{first operand is not a vector}} 955 956 ss = ss >> ss2; 957 ss = ss >> ss_scalar; 958 us = us >> us2; 959 us = us >> us_scalar; 960 bs = bs >> bs2; // expected-error {{invalid operands}} 961 962 si = si >> si2; 963 si = si >> si_scalar; 964 ui = ui >> ui2; 965 ui = ui >> ui_scalar; 966 bi = bi >> bi2; // expected-error {{invalid operands}} 967 968 sl = sl >> sl2; 969 sl = sl >> sl_scalar; 970 ul = ul >> ul2; 971 ul = ul >> ul_scalar; 972 bl = bl >> bl2; // expected-error {{invalid operands}} 973 974 slll = slll >> slll2; 975 slll = slll >> slll_scalar; 976 ulll = ulll >> ulll2; 977 ulll = ulll >> ulll_scalar; 978 blll = blll >> blll2; // expected-error {{invalid operands}} 979 980 fd = fd >> fd2; // expected-error {{integer is required}} 981 fd = fd >> ul2; // expected-error {{integer is required}} 982 fd = sl >> fd2; // expected-error {{integer is required}} 983 984 sc >>= sc2; 985 sc >>= uc2; 986 sc >>= bc2; // expected-error {{invalid operands}} 987 sc >>= sc_scalar; 988 989 uc >>= uc2; 990 uc >>= sc2; 991 uc >>= bc2; // expected-error {{invalid operands}} 992 uc >>= uc_scalar; 993 994 bc >>= bc2; // expected-error {{invalid operands}} 995 bc >>= sc2; // expected-error {{invalid operands}} 996 bc >>= uc2; // expected-error {{invalid operands}} 997 998 sc >>= ss2; // expected-error {{vector operands do not have the same number of elements}} 999 sc >>= si2; // expected-error {{vector operands do not have the same number of elements}} 1000 sc >>= sl2; // expected-error {{vector operands do not have the same number of elements}} 1001 sc >>= fd2; // expected-error {{integer is required}} 1002 1003 ss >>= ss2; 1004 ss >>= ss_scalar; 1005 us >>= us2; 1006 us >>= us_scalar; 1007 bs >>= bs2; // expected-error {{invalid operands}} 1008 1009 si >>= si2; 1010 si >>= si_scalar; 1011 ui >>= ui2; 1012 ui >>= ui_scalar; 1013 bi >>= bi2; // expected-error {{invalid operands}} 1014 1015 sl >>= sl2; 1016 sl >>= sl_scalar; 1017 ul >>= ul2; 1018 ul >>= ul_scalar; 1019 bl >>= bl2; // expected-error {{invalid operands}} 1020 1021 slll >>= slll2; 1022 slll >>= slll_scalar; 1023 ulll >>= ulll2; 1024 ulll >>= ulll_scalar; 1025 blll >>= blll2; // expected-error {{invalid operands}} 1026 1027 fd >>= fd2; // expected-error {{integer is required}} 1028 1029 // ------------------------------------------------------------------------- 1030 // Test ==. 1031 // ------------------------------------------------------------------------- 1032 1033 (void)(sc == sc2); 1034 (void)(uc == uc2); 1035 (void)(bc == bc2); 1036 1037 (void)(sc == uc); // expected-error {{cannot convert}} 1038 (void)(sc == bc); 1039 1040 (void)(uc == sc); // expected-error {{cannot convert}} 1041 (void)(uc == bc); 1042 1043 (void)(bc == sc); 1044 (void)(bc == uc); 1045 1046 (void)(ss == ss2); 1047 (void)(us == us2); 1048 (void)(bs == bs2); 1049 1050 (void)(si == si2); 1051 (void)(ui == ui2); 1052 (void)(bi == bi2); 1053 1054 (void)(sl == sl2); 1055 (void)(ul == ul2); 1056 (void)(bl == bl2); 1057 (void)(fd == fd2); 1058 1059 (void)(slll == slll2); 1060 (void)(ulll == ulll2); 1061 (void)(blll == blll2); 1062 1063 (void)(fd == ul); // expected-error {{cannot convert}} 1064 (void)(ul == fd); // expected-error {{cannot convert}} 1065 1066 // ------------------------------------------------------------------------- 1067 // Test that == rules apply to != too. 1068 // ------------------------------------------------------------------------- 1069 1070 (void)(sc != sc2); 1071 (void)(uc != uc2); 1072 (void)(bc != bc2); 1073 1074 (void)(sc != uc); // expected-error {{cannot convert}} 1075 (void)(sc != bc); 1076 1077 (void)(ss != ss2); 1078 (void)(us != us2); 1079 (void)(bs != bs2); 1080 1081 (void)(si != si2); 1082 (void)(ui != ui2); 1083 (void)(bi != bi2); 1084 1085 (void)(sl != sl2); 1086 (void)(ul != ul2); 1087 (void)(bl != bl2); 1088 (void)(fd != fd2); 1089 1090 (void)(slll != slll2); 1091 (void)(ulll != ulll2); 1092 (void)(blll != blll2); 1093 1094 // ------------------------------------------------------------------------- 1095 // Test that == rules apply to <= too. 1096 // ------------------------------------------------------------------------- 1097 1098 (void)(sc <= sc2); 1099 (void)(uc <= uc2); 1100 (void)(bc <= bc2); 1101 1102 (void)(sc <= uc); // expected-error {{cannot convert}} 1103 (void)(sc <= bc); 1104 1105 (void)(ss <= ss2); 1106 (void)(us <= us2); 1107 (void)(bs <= bs2); 1108 1109 (void)(si <= si2); 1110 (void)(ui <= ui2); 1111 (void)(bi <= bi2); 1112 1113 (void)(sl <= sl2); 1114 (void)(ul <= ul2); 1115 (void)(bl <= bl2); 1116 (void)(fd <= fd2); 1117 1118 (void)(slll <= slll2); 1119 (void)(ulll <= ulll2); 1120 (void)(blll <= blll2); 1121 1122 // ------------------------------------------------------------------------- 1123 // Test that == rules apply to >= too. 1124 // ------------------------------------------------------------------------- 1125 1126 (void)(sc >= sc2); 1127 (void)(uc >= uc2); 1128 (void)(bc >= bc2); 1129 1130 (void)(sc >= uc); // expected-error {{cannot convert}} 1131 (void)(sc >= bc); 1132 1133 (void)(ss >= ss2); 1134 (void)(us >= us2); 1135 (void)(bs >= bs2); 1136 1137 (void)(si >= si2); 1138 (void)(ui >= ui2); 1139 (void)(bi >= bi2); 1140 1141 (void)(sl >= sl2); 1142 (void)(ul >= ul2); 1143 (void)(bl >= bl2); 1144 (void)(fd >= fd2); 1145 1146 (void)(slll >= slll2); 1147 (void)(ulll >= ulll2); 1148 (void)(blll >= blll2); 1149 1150 // ------------------------------------------------------------------------- 1151 // Test that == rules apply to < too. 1152 // ------------------------------------------------------------------------- 1153 1154 (void)(sc < sc2); 1155 (void)(uc < uc2); 1156 (void)(bc < bc2); 1157 1158 (void)(sc < uc); // expected-error {{cannot convert}} 1159 (void)(sc < bc); 1160 1161 (void)(ss < ss2); 1162 (void)(us < us2); 1163 (void)(bs < bs2); 1164 1165 (void)(si < si2); 1166 (void)(ui < ui2); 1167 (void)(bi < bi2); 1168 1169 (void)(sl < sl2); 1170 (void)(ul < ul2); 1171 (void)(bl < bl2); 1172 (void)(fd < fd2); 1173 1174 (void)(slll < slll2); 1175 (void)(ulll < ulll2); 1176 (void)(blll < blll2); 1177 1178 // ------------------------------------------------------------------------- 1179 // Test that == rules apply to > too. 1180 // ------------------------------------------------------------------------- 1181 1182 (void)(sc > sc2); 1183 (void)(uc > uc2); 1184 (void)(bc > bc2); 1185 1186 (void)(sc > uc); // expected-error {{cannot convert}} 1187 (void)(sc > bc); 1188 1189 (void)(ss > ss2); 1190 (void)(us > us2); 1191 (void)(bs > bs2); 1192 1193 (void)(si > si2); 1194 (void)(ui > ui2); 1195 (void)(bi > bi2); 1196 1197 (void)(sl > sl2); 1198 (void)(ul > ul2); 1199 (void)(bl > bl2); 1200 (void)(fd > fd2); 1201 1202 (void)(slll > slll2); 1203 (void)(ulll > ulll2); 1204 (void)(blll > blll2); 1205 } 1206