zvector.c 27 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009
  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. vector signed char sc, sc2;
  5. vector unsigned char uc, uc2;
  6. vector bool char bc, bc2;
  7. vector signed short ss, ss2;
  8. vector unsigned short us, us2;
  9. vector bool short bs, bs2;
  10. vector signed int si, si2;
  11. vector unsigned int ui, ui2;
  12. vector bool int bi, bi2;
  13. vector signed long long sl, sl2;
  14. vector unsigned long long ul, ul2;
  15. vector bool long long bl, bl2;
  16. vector double fd, fd2;
  17. vector long ll; // expected-error {{cannot use 'long' with '__vector'}}
  18. vector float ff; // expected-error {{cannot use 'float' with '__vector'}}
  19. signed char sc_scalar;
  20. unsigned char uc_scalar;
  21. signed short ss_scalar;
  22. unsigned short us_scalar;
  23. signed int si_scalar;
  24. unsigned int ui_scalar;
  25. signed long sl_scalar;
  26. unsigned long ul_scalar;
  27. double fd_scalar;
  28. void foo(void)
  29. {
  30. // -------------------------------------------------------------------------
  31. // Test assignment.
  32. // -------------------------------------------------------------------------
  33. sc = sc2;
  34. uc = uc2;
  35. bc = bc2;
  36. ss = ss2;
  37. us = us2;
  38. bs = bs2;
  39. si = si2;
  40. ui = ui2;
  41. bi = bi2;
  42. sl = sl2;
  43. ul = ul2;
  44. bl = bl2;
  45. fd = fd2;
  46. sc = uc2; // expected-error {{incompatible type}}
  47. sc = bc2; // expected-error {{incompatible type}}
  48. uc = sc2; // expected-error {{incompatible type}}
  49. uc = bc2; // expected-error {{incompatible type}}
  50. bc = sc2; // expected-error {{incompatible type}}
  51. bc = uc2; // expected-error {{incompatible type}}
  52. sc = sc_scalar; // expected-error {{incompatible type}}
  53. sc = uc_scalar; // expected-error {{incompatible type}}
  54. uc = sc_scalar; // expected-error {{incompatible type}}
  55. uc = uc_scalar; // expected-error {{incompatible type}}
  56. bc = sc_scalar; // expected-error {{incompatible type}}
  57. bc = uc_scalar; // expected-error {{incompatible type}}
  58. sc = ss2; // expected-error {{incompatible type}}
  59. sc = si2; // expected-error {{incompatible type}}
  60. sc = sl2; // expected-error {{incompatible type}}
  61. sc = fd2; // expected-error {{incompatible type}}
  62. ss = sc2; // expected-error {{incompatible type}}
  63. si = sc2; // expected-error {{incompatible type}}
  64. sl = sc2; // expected-error {{incompatible type}}
  65. fd = sc2; // expected-error {{incompatible type}}
  66. uc = us2; // expected-error {{incompatible type}}
  67. uc = ui2; // expected-error {{incompatible type}}
  68. uc = ul2; // expected-error {{incompatible type}}
  69. uc = fd2; // expected-error {{incompatible type}}
  70. us = uc2; // expected-error {{incompatible type}}
  71. ui = uc2; // expected-error {{incompatible type}}
  72. ul = uc2; // expected-error {{incompatible type}}
  73. fd = uc2; // expected-error {{incompatible type}}
  74. bc = us2; // expected-error {{incompatible type}}
  75. bc = ui2; // expected-error {{incompatible type}}
  76. bc = ul2; // expected-error {{incompatible type}}
  77. bc = fd2; // expected-error {{incompatible type}}
  78. bs = bc2; // expected-error {{incompatible type}}
  79. bi = bc2; // expected-error {{incompatible type}}
  80. bl = bc2; // expected-error {{incompatible type}}
  81. fd = bc2; // expected-error {{incompatible type}}
  82. // -------------------------------------------------------------------------
  83. // Test casts to same element width.
  84. // -------------------------------------------------------------------------
  85. sc = (vector signed char)bc2;
  86. bc = (vector bool char)uc2;
  87. uc = (vector unsigned char)sc2;
  88. ss = (vector signed short)bs2;
  89. bs = (vector bool short)us2;
  90. us = (vector unsigned short)ss2;
  91. si = (vector signed int)bi2;
  92. bi = (vector bool int)ui2;
  93. ui = (vector unsigned int)si2;
  94. sl = (vector signed long long)bl2;
  95. bl = (vector bool long long)ul2;
  96. ul = (vector unsigned long long)fd2;
  97. fd = (vector double)sl2;
  98. // -------------------------------------------------------------------------
  99. // Test casts to different element width.
  100. // -------------------------------------------------------------------------
  101. sc = (vector signed char)bs2;
  102. bc = (vector bool char)us2;
  103. uc = (vector unsigned char)fd2;
  104. ss = (vector signed short)bi2;
  105. bs = (vector bool short)ui2;
  106. us = (vector unsigned short)fd2;
  107. si = (vector signed int)bl2;
  108. bi = (vector bool int)ul2;
  109. ui = (vector unsigned int)fd2;
  110. sl = (vector signed long long)bc2;
  111. bl = (vector bool long long)uc2;
  112. ul = (vector unsigned long long)sc2;
  113. fd = (vector double)sc2;
  114. // -------------------------------------------------------------------------
  115. // Test ++.
  116. // -------------------------------------------------------------------------
  117. ++sc2;
  118. ++uc2;
  119. ++bc2; // expected-error {{cannot increment}}
  120. ++ss2;
  121. ++us2;
  122. ++bs2; // expected-error {{cannot increment}}
  123. ++si2;
  124. ++ui2;
  125. ++bi2; // expected-error {{cannot increment}}
  126. ++sl2;
  127. ++ul2;
  128. ++bl2; // expected-error {{cannot increment}}
  129. ++fd2;
  130. sc++;
  131. uc++;
  132. bc++; // expected-error {{cannot increment}}
  133. ss++;
  134. us++;
  135. bs++; // expected-error {{cannot increment}}
  136. si++;
  137. ui++;
  138. bi++; // expected-error {{cannot increment}}
  139. sl++;
  140. ul++;
  141. bl++; // expected-error {{cannot increment}}
  142. fd++;
  143. // -------------------------------------------------------------------------
  144. // Test --.
  145. // -------------------------------------------------------------------------
  146. --sc2;
  147. --uc2;
  148. --bc2; // expected-error {{cannot decrement}}
  149. --ss2;
  150. --us2;
  151. --bs2; // expected-error {{cannot decrement}}
  152. --si2;
  153. --ui2;
  154. --bi2; // expected-error {{cannot decrement}}
  155. --sl2;
  156. --ul2;
  157. --bl2; // expected-error {{cannot decrement}}
  158. --fd2;
  159. sc--;
  160. uc--;
  161. bc--; // expected-error {{cannot decrement}}
  162. ss--;
  163. us--;
  164. bs--; // expected-error {{cannot decrement}}
  165. si--;
  166. ui--;
  167. bi--; // expected-error {{cannot decrement}}
  168. sl--;
  169. ul--;
  170. bl--; // expected-error {{cannot decrement}}
  171. fd--;
  172. // -------------------------------------------------------------------------
  173. // Test unary +.
  174. // -------------------------------------------------------------------------
  175. sc = +sc2;
  176. uc = +uc2;
  177. bc = +bc2; // expected-error {{invalid argument type}}
  178. ss = +ss2;
  179. us = +us2;
  180. bs = +bs2; // expected-error {{invalid argument type}}
  181. si = +si2;
  182. ui = +ui2;
  183. bi = +bi2; // expected-error {{invalid argument type}}
  184. sl = +sl2;
  185. ul = +ul2;
  186. bl = +bl2; // expected-error {{invalid argument type}}
  187. fd = +fd2;
  188. sc = +si2; // expected-error {{assigning to}}
  189. ui = +si2; // expected-error {{assigning to}}
  190. ui = +bi2; // expected-error {{invalid argument type}}
  191. // -------------------------------------------------------------------------
  192. // Test unary -.
  193. // -------------------------------------------------------------------------
  194. sc = -sc2;
  195. uc = -uc2;
  196. bc = -bc2; // expected-error {{invalid argument type}}
  197. ss = -ss2;
  198. us = -us2;
  199. bs = -bs2; // expected-error {{invalid argument type}}
  200. si = -si2;
  201. ui = -ui2;
  202. bi = -bi2; // expected-error {{invalid argument type}}
  203. sl = -sl2;
  204. ul = -ul2;
  205. bl = -bl2; // expected-error {{invalid argument type}}
  206. fd = -fd2;
  207. sc = -si2; // expected-error {{assigning to}}
  208. ui = -si2; // expected-error {{assigning to}}
  209. ui = -bi2; // expected-error {{invalid argument type}}
  210. // -------------------------------------------------------------------------
  211. // Test ~.
  212. // -------------------------------------------------------------------------
  213. sc = ~sc2;
  214. uc = ~uc2;
  215. bc = ~bc2;
  216. ss = ~ss2;
  217. us = ~us2;
  218. bs = ~bs2;
  219. si = ~si2;
  220. ui = ~ui2;
  221. bi = ~bi2;
  222. sl = ~sl2;
  223. ul = ~ul2;
  224. bl = ~bl2;
  225. fd = ~fd2; // expected-error {{invalid argument}}
  226. sc = ~si2; // expected-error {{assigning to}}
  227. ui = ~si2; // expected-error {{assigning to}}
  228. ui = ~bi2; // expected-error {{assigning to}}
  229. // -------------------------------------------------------------------------
  230. // Test binary +.
  231. // -------------------------------------------------------------------------
  232. sc = sc + sc2;
  233. sc = sc + uc2; // expected-error {{can't convert}}
  234. sc = uc + sc2; // expected-error {{can't convert}}
  235. sc = sc + bc2;
  236. sc = bc + sc2;
  237. uc = uc + uc2;
  238. uc = sc + uc2; // expected-error {{can't convert}}
  239. uc = uc + sc2; // expected-error {{can't convert}}
  240. uc = bc + uc2;
  241. uc = uc + bc2;
  242. bc = bc + bc2; // expected-error {{invalid operands}}
  243. bc = bc + uc2; // expected-error {{incompatible type}}
  244. bc = uc + bc2; // expected-error {{incompatible type}}
  245. bc = bc + sc2; // expected-error {{incompatible type}}
  246. bc = sc + bc2; // expected-error {{incompatible type}}
  247. sc = sc + sc_scalar; // expected-error {{can't convert}}
  248. sc = sc + uc_scalar; // expected-error {{can't convert}}
  249. sc = sc_scalar + sc; // expected-error {{can't convert}}
  250. sc = uc_scalar + sc; // expected-error {{can't convert}}
  251. uc = uc + sc_scalar; // expected-error {{can't convert}}
  252. uc = uc + uc_scalar; // expected-error {{can't convert}}
  253. uc = sc_scalar + uc; // expected-error {{can't convert}}
  254. uc = uc_scalar + uc; // expected-error {{can't convert}}
  255. ss = ss + ss2;
  256. us = us + us2;
  257. bs = bs + bs2; // expected-error {{invalid operands}}
  258. si = si + si2;
  259. ui = ui + ui2;
  260. bi = bi + bi2; // expected-error {{invalid operands}}
  261. sl = sl + sl2;
  262. ul = ul + ul2;
  263. bl = bl + bl2; // expected-error {{invalid operands}}
  264. fd = fd + fd2;
  265. fd = fd + ul2; // expected-error {{can't convert}}
  266. fd = sl + fd2; // expected-error {{can't convert}}
  267. sc += sc2;
  268. sc += uc2; // expected-error {{can't convert}}
  269. sc += bc2;
  270. uc += uc2;
  271. uc += sc2; // expected-error {{can't convert}}
  272. uc += bc2;
  273. bc += bc2; // expected-error {{invalid operands}}
  274. bc += sc2; // expected-error {{can't convert}}
  275. bc += uc2; // expected-error {{can't convert}}
  276. sc += ss2; // expected-error {{can't convert}}
  277. sc += si2; // expected-error {{can't convert}}
  278. sc += sl2; // expected-error {{can't convert}}
  279. sc += fd2; // expected-error {{can't convert}}
  280. sc += sc_scalar; // expected-error {{can't convert}}
  281. sc += uc_scalar; // expected-error {{can't convert}}
  282. uc += sc_scalar; // expected-error {{can't convert}}
  283. uc += uc_scalar; // expected-error {{can't convert}}
  284. ss += ss2;
  285. us += us2;
  286. bs += bs2; // expected-error {{invalid operands}}
  287. si += si2;
  288. ui += ui2;
  289. bi += bi2; // expected-error {{invalid operands}}
  290. sl += sl2;
  291. ul += ul2;
  292. bl += bl2; // expected-error {{invalid operands}}
  293. fd += fd2;
  294. // -------------------------------------------------------------------------
  295. // Test that binary + rules apply to binary - too.
  296. // -------------------------------------------------------------------------
  297. sc = sc - sc2;
  298. uc = uc - uc2;
  299. bc = bc - bc2; // expected-error {{invalid operands}}
  300. sc = uc - sc2; // expected-error {{can't convert}}
  301. sc = sc - bc2;
  302. uc = bc - uc2;
  303. sc -= sc2;
  304. uc -= uc2;
  305. bc -= bc2; // expected-error {{invalid operands}}
  306. sc -= uc2; // expected-error {{can't convert}}
  307. uc -= bc2;
  308. bc -= sc2; // expected-error {{can't convert}}
  309. ss -= ss2;
  310. us -= us2;
  311. bs -= bs2; // expected-error {{invalid operands}}
  312. si -= si2;
  313. ui -= ui2;
  314. bi -= bi2; // expected-error {{invalid operands}}
  315. sl -= sl2;
  316. ul -= ul2;
  317. bl -= bl2; // expected-error {{invalid operands}}
  318. fd -= fd2;
  319. // -------------------------------------------------------------------------
  320. // Test that binary + rules apply to * too. 64-bit integer multiplication
  321. // is not required by the spec and so isn't tested here.
  322. // -------------------------------------------------------------------------
  323. sc = sc * sc2;
  324. uc = uc * uc2;
  325. bc = bc * bc2; // expected-error {{invalid operands}}
  326. sc = uc * sc2; // expected-error {{can't convert}}
  327. sc = sc * bc2; // expected-error {{can't convert}}
  328. uc = bc * uc2; // expected-error {{can't convert}}
  329. sc *= sc2;
  330. uc *= uc2;
  331. bc *= bc2; // expected-error {{invalid operands}}
  332. sc *= uc2; // expected-error {{can't convert}}
  333. uc *= bc2; // expected-error {{can't convert}}
  334. bc *= sc2; // expected-error {{can't convert}}
  335. ss *= ss2;
  336. us *= us2;
  337. bs *= bs2; // expected-error {{invalid operands}}
  338. si *= si2;
  339. ui *= ui2;
  340. bi *= bi2; // expected-error {{invalid operands}}
  341. sl *= sl2;
  342. ul *= ul2;
  343. bl *= bl2; // expected-error {{invalid operands}}
  344. fd *= fd2;
  345. // -------------------------------------------------------------------------
  346. // Test that * rules apply to / too.
  347. // -------------------------------------------------------------------------
  348. sc = sc / sc2;
  349. uc = uc / uc2;
  350. bc = bc / bc2; // expected-error {{invalid operands}}
  351. sc = uc / sc2; // expected-error {{can't convert}}
  352. sc = sc / bc2; // expected-error {{can't convert}}
  353. uc = bc / uc2; // expected-error {{can't convert}}
  354. sc /= sc2;
  355. uc /= uc2;
  356. bc /= bc2; // expected-error {{invalid operands}}
  357. sc /= uc2; // expected-error {{can't convert}}
  358. uc /= bc2; // expected-error {{can't convert}}
  359. bc /= sc2; // expected-error {{can't convert}}
  360. ss /= ss2;
  361. us /= us2;
  362. bs /= bs2; // expected-error {{invalid operands}}
  363. si /= si2;
  364. ui /= ui2;
  365. bi /= bi2; // expected-error {{invalid operands}}
  366. sl /= sl2;
  367. ul /= ul2;
  368. bl /= bl2; // expected-error {{invalid operands}}
  369. fd /= fd2;
  370. // -------------------------------------------------------------------------
  371. // Test that / rules apply to % too, except that doubles are not allowed.
  372. // -------------------------------------------------------------------------
  373. sc = sc % sc2;
  374. uc = uc % uc2;
  375. bc = bc % bc2; // expected-error {{invalid operands}}
  376. sc = uc % sc2; // expected-error {{can't convert}}
  377. sc = sc % bc2; // expected-error {{can't convert}}
  378. uc = bc % uc2; // expected-error {{can't convert}}
  379. sc %= sc2;
  380. uc %= uc2;
  381. bc %= bc2; // expected-error {{invalid operands}}
  382. sc %= uc2; // expected-error {{can't convert}}
  383. uc %= bc2; // expected-error {{can't convert}}
  384. bc %= sc2; // expected-error {{can't convert}}
  385. ss %= ss2;
  386. us %= us2;
  387. bs %= bs2; // expected-error {{invalid operands}}
  388. si %= si2;
  389. ui %= ui2;
  390. bi %= bi2; // expected-error {{invalid operands}}
  391. sl %= sl2;
  392. ul %= ul2;
  393. bl %= bl2; // expected-error {{invalid operands}}
  394. fd %= fd2; // expected-error {{invalid operands}}
  395. // -------------------------------------------------------------------------
  396. // Test &.
  397. // -------------------------------------------------------------------------
  398. sc = sc & sc2;
  399. sc = sc & uc2; // expected-error {{can't convert}}
  400. sc = uc & sc2; // expected-error {{can't convert}}
  401. sc = sc & bc2;
  402. sc = bc & sc2;
  403. uc = uc & uc2;
  404. uc = sc & uc2; // expected-error {{can't convert}}
  405. uc = uc & sc2; // expected-error {{can't convert}}
  406. uc = bc & uc2;
  407. uc = uc & bc2;
  408. bc = bc & bc2;
  409. bc = bc & uc2; // expected-error {{incompatible type}}
  410. bc = uc & bc2; // expected-error {{incompatible type}}
  411. bc = bc & sc2; // expected-error {{incompatible type}}
  412. bc = sc & bc2; // expected-error {{incompatible type}}
  413. fd = fd & fd2; // expected-error {{invalid operands}}
  414. fd = bl & fd2; // expected-error {{invalid operands}}
  415. fd = fd & bl2; // expected-error {{invalid operands}}
  416. fd = fd & sl2; // expected-error {{invalid operands}}
  417. fd = fd & ul2; // expected-error {{invalid operands}}
  418. sc &= sc2;
  419. sc &= uc2; // expected-error {{can't convert}}
  420. sc &= bc2;
  421. uc &= uc2;
  422. uc &= sc2; // expected-error {{can't convert}}
  423. uc &= bc2;
  424. bc &= bc2;
  425. bc &= sc2; // expected-error {{can't convert}}
  426. bc &= uc2; // expected-error {{can't convert}}
  427. sc &= ss2; // expected-error {{can't convert}}
  428. sc &= si2; // expected-error {{can't convert}}
  429. sc &= sl2; // expected-error {{can't convert}}
  430. sc &= fd2; // expected-error {{invalid operands}}
  431. us &= bc2; // expected-error {{can't convert}}
  432. ui &= bc2; // expected-error {{can't convert}}
  433. ul &= bc2; // expected-error {{can't convert}}
  434. fd &= bc2; // expected-error {{invalid operands}}
  435. ss &= ss2;
  436. us &= us2;
  437. bs &= bs2;
  438. si &= si2;
  439. ui &= ui2;
  440. bi &= bi2;
  441. sl &= sl2;
  442. ul &= ul2;
  443. bl &= bl2;
  444. // -------------------------------------------------------------------------
  445. // Test that & rules apply to | too.
  446. // -------------------------------------------------------------------------
  447. sc = sc | sc2;
  448. sc = sc | uc2; // expected-error {{can't convert}}
  449. sc = sc | bc2;
  450. uc = uc | uc2;
  451. uc = sc | uc2; // expected-error {{can't convert}}
  452. uc = bc | uc2;
  453. bc = bc | bc2;
  454. bc = uc | bc2; // expected-error {{incompatible type}}
  455. bc = bc | sc2; // expected-error {{incompatible type}}
  456. fd = fd | fd2; // expected-error {{invalid operands}}
  457. fd = bl | fd2; // expected-error {{invalid operands}}
  458. ss |= ss2;
  459. us |= us2;
  460. bs |= bs2;
  461. si |= si2;
  462. ui |= ui2;
  463. bi |= bi2;
  464. sl |= sl2;
  465. ul |= ul2;
  466. bl |= bl2;
  467. fd |= bl2; // expected-error {{invalid operands}}
  468. fd |= fd2; // expected-error {{invalid operands}}
  469. // -------------------------------------------------------------------------
  470. // Test that & rules apply to ^ too.
  471. // -------------------------------------------------------------------------
  472. sc = sc ^ sc2;
  473. sc = sc ^ uc2; // expected-error {{can't convert}}
  474. sc = sc ^ bc2;
  475. uc = uc ^ uc2;
  476. uc = sc ^ uc2; // expected-error {{can't convert}}
  477. uc = bc ^ uc2;
  478. bc = bc ^ bc2;
  479. bc = uc ^ bc2; // expected-error {{incompatible type}}
  480. bc = bc ^ sc2; // expected-error {{incompatible type}}
  481. fd = fd ^ fd2; // expected-error {{invalid operands}}
  482. fd = bl ^ fd2; // expected-error {{invalid operands}}
  483. ss ^= ss2;
  484. us ^= us2;
  485. bs ^= bs2;
  486. si ^= si2;
  487. ui ^= ui2;
  488. bi ^= bi2;
  489. sl ^= sl2;
  490. ul ^= ul2;
  491. bl ^= bl2;
  492. fd ^= bl2; // expected-error {{invalid operands}}
  493. fd ^= fd2; // expected-error {{invalid operands}}
  494. // -------------------------------------------------------------------------
  495. // Test <<.
  496. // -------------------------------------------------------------------------
  497. sc = sc << sc2;
  498. sc = sc << uc2;
  499. sc = uc << sc2; // expected-error {{incompatible type}}
  500. sc = sc << bc2; // expected-error {{invalid operands}}
  501. sc = bc << sc2; // expected-error {{invalid operands}}
  502. uc = uc << uc2;
  503. uc = sc << uc2; // expected-error {{assigning to}}
  504. uc = uc << sc2;
  505. uc = bc << uc2; // expected-error {{invalid operands}}
  506. uc = uc << bc2; // expected-error {{invalid operands}}
  507. bc = bc << bc2; // expected-error {{invalid operands}}
  508. bc = bc << uc2; // expected-error {{invalid operands}}
  509. bc = uc << bc2; // expected-error {{invalid operands}}
  510. bc = bc << sc2; // expected-error {{invalid operands}}
  511. bc = sc << bc2; // expected-error {{invalid operands}}
  512. sc = sc << 1;
  513. sc = sc << 1.0f; // expected-error {{integer is required}}
  514. sc = sc << sc_scalar;
  515. sc = sc << uc_scalar;
  516. sc = sc << ss_scalar;
  517. sc = sc << us_scalar;
  518. sc = sc << si_scalar;
  519. sc = sc << ui_scalar;
  520. sc = sc << sl_scalar;
  521. sc = sc << ul_scalar;
  522. sc = sc_scalar << sc; // expected-error {{first operand is not a vector}}
  523. sc = uc_scalar << sc; // expected-error {{first operand is not a vector}}
  524. uc = uc << sc_scalar;
  525. uc = uc << uc_scalar;
  526. uc = sc_scalar << uc; // expected-error {{first operand is not a vector}}
  527. uc = uc_scalar << uc; // expected-error {{first operand is not a vector}}
  528. ss = ss << ss2;
  529. ss = ss << ss_scalar;
  530. us = us << us2;
  531. us = us << us_scalar;
  532. bs = bs << bs2; // expected-error {{invalid operands}}
  533. si = si << si2;
  534. si = si << si_scalar;
  535. ui = ui << ui2;
  536. ui = ui << ui_scalar;
  537. bi = bi << bi2; // expected-error {{invalid operands}}
  538. sl = sl << sl2;
  539. sl = sl << sl_scalar;
  540. ul = ul << ul2;
  541. ul = ul << ul_scalar;
  542. bl = bl << bl2; // expected-error {{invalid operands}}
  543. fd = fd << fd2; // expected-error {{integer is required}}
  544. fd = fd << ul2; // expected-error {{integer is required}}
  545. fd = sl << fd2; // expected-error {{integer is required}}
  546. sc <<= sc2;
  547. sc <<= uc2;
  548. sc <<= bc2; // expected-error {{invalid operands}}
  549. sc <<= sc_scalar;
  550. uc <<= uc2;
  551. uc <<= sc2;
  552. uc <<= bc2; // expected-error {{invalid operands}}
  553. uc <<= uc_scalar;
  554. bc <<= bc2; // expected-error {{invalid operands}}
  555. bc <<= sc2; // expected-error {{invalid operands}}
  556. bc <<= uc2; // expected-error {{invalid operands}}
  557. sc <<= ss2; // expected-error {{vector operands do not have the same number of elements}}
  558. sc <<= si2; // expected-error {{vector operands do not have the same number of elements}}
  559. sc <<= sl2; // expected-error {{vector operands do not have the same number of elements}}
  560. sc <<= fd2; // expected-error {{integer is required}}
  561. ss <<= ss2;
  562. ss <<= ss_scalar;
  563. us <<= us2;
  564. us <<= us_scalar;
  565. bs <<= bs2; // expected-error {{invalid operands}}
  566. si <<= si2;
  567. si <<= si_scalar;
  568. ui <<= ui2;
  569. ui <<= ui_scalar;
  570. bi <<= bi2; // expected-error {{invalid operands}}
  571. sl <<= sl2;
  572. sl <<= sl_scalar;
  573. ul <<= ul2;
  574. ul <<= ul_scalar;
  575. bl <<= bl2; // expected-error {{invalid operands}}
  576. fd <<= fd2; // expected-error {{integer is required}}
  577. // -------------------------------------------------------------------------
  578. // Test >>.
  579. // -------------------------------------------------------------------------
  580. sc = sc >> sc2;
  581. sc = sc >> uc2;
  582. sc = uc >> sc2; // expected-error {{incompatible type}}
  583. sc = sc >> bc2; // expected-error {{invalid operands}}
  584. sc = bc >> sc2; // expected-error {{invalid operands}}
  585. uc = uc >> uc2;
  586. uc = sc >> uc2; // expected-error {{assigning to}}
  587. uc = uc >> sc2;
  588. uc = bc >> uc2; // expected-error {{invalid operands}}
  589. uc = uc >> bc2; // expected-error {{invalid operands}}
  590. bc = bc >> bc2; // expected-error {{invalid operands}}
  591. bc = bc >> uc2; // expected-error {{invalid operands}}
  592. bc = uc >> bc2; // expected-error {{invalid operands}}
  593. bc = bc >> sc2; // expected-error {{invalid operands}}
  594. bc = sc >> bc2; // expected-error {{invalid operands}}
  595. sc = sc >> 1;
  596. sc = sc >> 1.0f; // expected-error {{integer is required}}
  597. sc = sc >> sc_scalar;
  598. sc = sc >> uc_scalar;
  599. sc = sc >> ss_scalar;
  600. sc = sc >> us_scalar;
  601. sc = sc >> si_scalar;
  602. sc = sc >> ui_scalar;
  603. sc = sc >> sl_scalar;
  604. sc = sc >> ul_scalar;
  605. sc = sc_scalar >> sc; // expected-error {{first operand is not a vector}}
  606. sc = uc_scalar >> sc; // expected-error {{first operand is not a vector}}
  607. uc = uc >> sc_scalar;
  608. uc = uc >> uc_scalar;
  609. uc = sc_scalar >> uc; // expected-error {{first operand is not a vector}}
  610. uc = uc_scalar >> uc; // expected-error {{first operand is not a vector}}
  611. ss = ss >> ss2;
  612. ss = ss >> ss_scalar;
  613. us = us >> us2;
  614. us = us >> us_scalar;
  615. bs = bs >> bs2; // expected-error {{invalid operands}}
  616. si = si >> si2;
  617. si = si >> si_scalar;
  618. ui = ui >> ui2;
  619. ui = ui >> ui_scalar;
  620. bi = bi >> bi2; // expected-error {{invalid operands}}
  621. sl = sl >> sl2;
  622. sl = sl >> sl_scalar;
  623. ul = ul >> ul2;
  624. ul = ul >> ul_scalar;
  625. bl = bl >> bl2; // expected-error {{invalid operands}}
  626. fd = fd >> fd2; // expected-error {{integer is required}}
  627. fd = fd >> ul2; // expected-error {{integer is required}}
  628. fd = sl >> fd2; // expected-error {{integer is required}}
  629. sc >>= sc2;
  630. sc >>= uc2;
  631. sc >>= bc2; // expected-error {{invalid operands}}
  632. sc >>= sc_scalar;
  633. uc >>= uc2;
  634. uc >>= sc2;
  635. uc >>= bc2; // expected-error {{invalid operands}}
  636. uc >>= uc_scalar;
  637. bc >>= bc2; // expected-error {{invalid operands}}
  638. bc >>= sc2; // expected-error {{invalid operands}}
  639. bc >>= uc2; // expected-error {{invalid operands}}
  640. sc >>= ss2; // expected-error {{vector operands do not have the same number of elements}}
  641. sc >>= si2; // expected-error {{vector operands do not have the same number of elements}}
  642. sc >>= sl2; // expected-error {{vector operands do not have the same number of elements}}
  643. sc >>= fd2; // expected-error {{integer is required}}
  644. ss >>= ss2;
  645. ss >>= ss_scalar;
  646. us >>= us2;
  647. us >>= us_scalar;
  648. bs >>= bs2; // expected-error {{invalid operands}}
  649. si >>= si2;
  650. si >>= si_scalar;
  651. ui >>= ui2;
  652. ui >>= ui_scalar;
  653. bi >>= bi2; // expected-error {{invalid operands}}
  654. sl >>= sl2;
  655. sl >>= sl_scalar;
  656. ul >>= ul2;
  657. ul >>= ul_scalar;
  658. bl >>= bl2; // expected-error {{invalid operands}}
  659. fd >>= fd2; // expected-error {{integer is required}}
  660. // -------------------------------------------------------------------------
  661. // Test ==.
  662. // -------------------------------------------------------------------------
  663. (void)(sc == sc2);
  664. (void)(uc == uc2);
  665. (void)(bc == bc2);
  666. (void)(sc == uc); // expected-error {{can't convert}}
  667. (void)(sc == bc);
  668. (void)(uc == sc); // expected-error {{can't convert}}
  669. (void)(uc == bc);
  670. (void)(bc == sc);
  671. (void)(bc == uc);
  672. (void)(ss == ss2);
  673. (void)(us == us2);
  674. (void)(bs == bs2);
  675. (void)(si == si2);
  676. (void)(ui == ui2);
  677. (void)(bi == bi2);
  678. (void)(sl == sl2);
  679. (void)(ul == ul2);
  680. (void)(bl == bl2);
  681. (void)(fd == fd2);
  682. (void)(fd == ul); // expected-error {{can't convert}}
  683. (void)(ul == fd); // expected-error {{can't convert}}
  684. // -------------------------------------------------------------------------
  685. // Test that == rules apply to != too.
  686. // -------------------------------------------------------------------------
  687. (void)(sc != sc2);
  688. (void)(uc != uc2);
  689. (void)(bc != bc2);
  690. (void)(sc != uc); // expected-error {{can't convert}}
  691. (void)(sc != bc);
  692. (void)(ss != ss2);
  693. (void)(us != us2);
  694. (void)(bs != bs2);
  695. (void)(si != si2);
  696. (void)(ui != ui2);
  697. (void)(bi != bi2);
  698. (void)(sl != sl2);
  699. (void)(ul != ul2);
  700. (void)(bl != bl2);
  701. (void)(fd != fd2);
  702. // -------------------------------------------------------------------------
  703. // Test that == rules apply to <= too.
  704. // -------------------------------------------------------------------------
  705. (void)(sc <= sc2);
  706. (void)(uc <= uc2);
  707. (void)(bc <= bc2);
  708. (void)(sc <= uc); // expected-error {{can't convert}}
  709. (void)(sc <= bc);
  710. (void)(ss <= ss2);
  711. (void)(us <= us2);
  712. (void)(bs <= bs2);
  713. (void)(si <= si2);
  714. (void)(ui <= ui2);
  715. (void)(bi <= bi2);
  716. (void)(sl <= sl2);
  717. (void)(ul <= ul2);
  718. (void)(bl <= bl2);
  719. (void)(fd <= fd2);
  720. // -------------------------------------------------------------------------
  721. // Test that == rules apply to >= too.
  722. // -------------------------------------------------------------------------
  723. (void)(sc >= sc2);
  724. (void)(uc >= uc2);
  725. (void)(bc >= bc2);
  726. (void)(sc >= uc); // expected-error {{can't convert}}
  727. (void)(sc >= bc);
  728. (void)(ss >= ss2);
  729. (void)(us >= us2);
  730. (void)(bs >= bs2);
  731. (void)(si >= si2);
  732. (void)(ui >= ui2);
  733. (void)(bi >= bi2);
  734. (void)(sl >= sl2);
  735. (void)(ul >= ul2);
  736. (void)(bl >= bl2);
  737. (void)(fd >= fd2);
  738. // -------------------------------------------------------------------------
  739. // Test that == rules apply to < too.
  740. // -------------------------------------------------------------------------
  741. (void)(sc < sc2);
  742. (void)(uc < uc2);
  743. (void)(bc < bc2);
  744. (void)(sc < uc); // expected-error {{can't convert}}
  745. (void)(sc < bc);
  746. (void)(ss < ss2);
  747. (void)(us < us2);
  748. (void)(bs < bs2);
  749. (void)(si < si2);
  750. (void)(ui < ui2);
  751. (void)(bi < bi2);
  752. (void)(sl < sl2);
  753. (void)(ul < ul2);
  754. (void)(bl < bl2);
  755. (void)(fd < fd2);
  756. // -------------------------------------------------------------------------
  757. // Test that == rules apply to > too.
  758. // -------------------------------------------------------------------------
  759. (void)(sc > sc2);
  760. (void)(uc > uc2);
  761. (void)(bc > bc2);
  762. (void)(sc > uc); // expected-error {{can't convert}}
  763. (void)(sc > bc);
  764. (void)(ss > ss2);
  765. (void)(us > us2);
  766. (void)(bs > bs2);
  767. (void)(si > si2);
  768. (void)(ui > ui2);
  769. (void)(bi > bi2);
  770. (void)(sl > sl2);
  771. (void)(ul > ul2);
  772. (void)(bl > bl2);
  773. (void)(fd > fd2);
  774. }