master_taskloop_misc_messages.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382
  1. // RUN: %clang_cc1 -fsyntax-only -fopenmp -triple x86_64-unknown-unknown -verify %s -Wuninitialized
  2. // RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -triple x86_64-unknown-unknown -verify %s -Wuninitialized
  3. void xxx(int argc) {
  4. int x; // expected-note {{initialize the variable 'x' to silence this warning}}
  5. #pragma omp master taskloop
  6. for (int i = 0; i < 10; ++i)
  7. argc = x; // expected-warning {{variable 'x' is uninitialized when used here}}
  8. }
  9. // expected-error@+1 {{unexpected OpenMP directive '#pragma omp master taskloop'}}
  10. #pragma omp master taskloop
  11. // expected-error@+1 {{unexpected OpenMP directive '#pragma omp master taskloop'}}
  12. #pragma omp master taskloop foo
  13. void test_no_clause() {
  14. int i;
  15. #pragma omp master taskloop
  16. for (i = 0; i < 16; ++i)
  17. ;
  18. // expected-error@+2 {{statement after '#pragma omp master taskloop' must be a for loop}}
  19. #pragma omp master taskloop
  20. ++i;
  21. }
  22. void test_branch_protected_scope() {
  23. int i = 0;
  24. L1:
  25. ++i;
  26. int x[24];
  27. #pragma omp parallel
  28. #pragma omp master taskloop
  29. for (i = 0; i < 16; ++i) {
  30. if (i == 5)
  31. goto L1; // expected-error {{use of undeclared label 'L1'}}
  32. else if (i == 6)
  33. return; // expected-error {{cannot return from OpenMP region}}
  34. else if (i == 7)
  35. goto L2;
  36. else if (i == 8) {
  37. L2:
  38. x[i]++;
  39. }
  40. }
  41. if (x[0] == 0)
  42. goto L2; // expected-error {{use of undeclared label 'L2'}}
  43. else if (x[1] == 1)
  44. goto L1;
  45. }
  46. void test_invalid_clause() {
  47. int i;
  48. #pragma omp parallel
  49. // expected-warning@+1 {{extra tokens at the end of '#pragma omp master taskloop' are ignored}}
  50. #pragma omp master taskloop foo bar
  51. for (i = 0; i < 16; ++i)
  52. ;
  53. // expected-error@+1 {{directive '#pragma omp master taskloop' cannot contain more than one 'nogroup' clause}}
  54. #pragma omp master taskloop nogroup nogroup
  55. for (i = 0; i < 16; ++i)
  56. ;
  57. }
  58. void test_non_identifiers() {
  59. int i, x;
  60. #pragma omp parallel
  61. // expected-warning@+1 {{extra tokens at the end of '#pragma omp master taskloop' are ignored}}
  62. #pragma omp master taskloop;
  63. for (i = 0; i < 16; ++i)
  64. ;
  65. // expected-warning@+3 {{extra tokens at the end of '#pragma omp master taskloop' are ignored}}
  66. // expected-error@+2 {{unexpected OpenMP clause 'linear' in directive '#pragma omp master taskloop'}}
  67. #pragma omp parallel
  68. #pragma omp master taskloop linear(x);
  69. for (i = 0; i < 16; ++i)
  70. ;
  71. #pragma omp parallel
  72. // expected-warning@+1 {{extra tokens at the end of '#pragma omp master taskloop' are ignored}}
  73. #pragma omp master taskloop private(x);
  74. for (i = 0; i < 16; ++i)
  75. ;
  76. #pragma omp parallel
  77. // expected-warning@+1 {{extra tokens at the end of '#pragma omp master taskloop' are ignored}}
  78. #pragma omp master taskloop, private(x);
  79. for (i = 0; i < 16; ++i)
  80. ;
  81. }
  82. extern int foo();
  83. void test_collapse() {
  84. int i;
  85. #pragma omp parallel
  86. // expected-error@+1 {{expected '('}}
  87. #pragma omp master taskloop collapse
  88. for (i = 0; i < 16; ++i)
  89. ;
  90. #pragma omp parallel
  91. // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
  92. #pragma omp master taskloop collapse(
  93. for (i = 0; i < 16; ++i)
  94. ;
  95. #pragma omp parallel
  96. // expected-error@+1 {{expected expression}}
  97. #pragma omp master taskloop collapse()
  98. for (i = 0; i < 16; ++i)
  99. ;
  100. #pragma omp parallel
  101. // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
  102. #pragma omp master taskloop collapse(,
  103. for (i = 0; i < 16; ++i)
  104. ;
  105. #pragma omp parallel
  106. // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
  107. #pragma omp master taskloop collapse(, )
  108. for (i = 0; i < 16; ++i)
  109. ;
  110. #pragma omp parallel
  111. // expected-warning@+2 {{extra tokens at the end of '#pragma omp master taskloop' are ignored}}
  112. // expected-error@+1 {{expected '('}}
  113. #pragma omp master taskloop collapse 4)
  114. for (i = 0; i < 16; ++i)
  115. ;
  116. #pragma omp parallel
  117. // expected-error@+2 {{expected ')'}}
  118. // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
  119. #pragma omp master taskloop collapse(4
  120. for (i = 0; i < 16; ++i)
  121. ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop', but found only 1}}
  122. #pragma omp parallel
  123. // expected-error@+2 {{expected ')'}}
  124. // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
  125. #pragma omp master taskloop collapse(4,
  126. for (i = 0; i < 16; ++i)
  127. ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop', but found only 1}}
  128. #pragma omp parallel
  129. // expected-error@+2 {{expected ')'}}
  130. // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
  131. #pragma omp master taskloop collapse(4, )
  132. for (i = 0; i < 16; ++i)
  133. ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop', but found only 1}}
  134. #pragma omp parallel
  135. // expected-note@+1 {{as specified in 'collapse' clause}}
  136. #pragma omp master taskloop collapse(4)
  137. for (i = 0; i < 16; ++i)
  138. ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop', but found only 1}}
  139. #pragma omp parallel
  140. // expected-error@+2 {{expected ')'}}
  141. // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
  142. #pragma omp master taskloop collapse(4 4)
  143. for (i = 0; i < 16; ++i)
  144. ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop', but found only 1}}
  145. #pragma omp parallel
  146. // expected-error@+2 {{expected ')'}}
  147. // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
  148. #pragma omp master taskloop collapse(4, , 4)
  149. for (i = 0; i < 16; ++i)
  150. ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop', but found only 1}}
  151. #pragma omp parallel
  152. #pragma omp master taskloop collapse(4)
  153. for (int i1 = 0; i1 < 16; ++i1)
  154. for (int i2 = 0; i2 < 16; ++i2)
  155. for (int i3 = 0; i3 < 16; ++i3)
  156. for (int i4 = 0; i4 < 16; ++i4)
  157. foo();
  158. #pragma omp parallel
  159. // expected-error@+2 {{expected ')'}}
  160. // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
  161. #pragma omp master taskloop collapse(4, 8)
  162. for (i = 0; i < 16; ++i)
  163. ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop', but found only 1}}
  164. #pragma omp parallel
  165. // expected-error@+1 {{expression is not an integer constant expression}}
  166. #pragma omp master taskloop collapse(2.5)
  167. for (i = 0; i < 16; ++i)
  168. ;
  169. #pragma omp parallel
  170. // expected-error@+1 {{expression is not an integer constant expression}}
  171. #pragma omp master taskloop collapse(foo())
  172. for (i = 0; i < 16; ++i)
  173. ;
  174. #pragma omp parallel
  175. // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
  176. #pragma omp master taskloop collapse(-5)
  177. for (i = 0; i < 16; ++i)
  178. ;
  179. #pragma omp parallel
  180. // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
  181. #pragma omp master taskloop collapse(0)
  182. for (i = 0; i < 16; ++i)
  183. ;
  184. #pragma omp parallel
  185. // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
  186. #pragma omp master taskloop collapse(5 - 5)
  187. for (i = 0; i < 16; ++i)
  188. ;
  189. }
  190. void test_private() {
  191. int i;
  192. #pragma omp parallel
  193. // expected-error@+2 {{expected expression}}
  194. // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
  195. #pragma omp master taskloop private(
  196. for (i = 0; i < 16; ++i)
  197. ;
  198. #pragma omp parallel
  199. // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
  200. // expected-error@+1 2 {{expected expression}}
  201. #pragma omp master taskloop private(,
  202. for (i = 0; i < 16; ++i)
  203. ;
  204. #pragma omp parallel
  205. // expected-error@+1 2 {{expected expression}}
  206. #pragma omp master taskloop private(, )
  207. for (i = 0; i < 16; ++i)
  208. ;
  209. #pragma omp parallel
  210. // expected-error@+1 {{expected expression}}
  211. #pragma omp master taskloop private()
  212. for (i = 0; i < 16; ++i)
  213. ;
  214. #pragma omp parallel
  215. // expected-error@+1 {{expected expression}}
  216. #pragma omp master taskloop private(int)
  217. for (i = 0; i < 16; ++i)
  218. ;
  219. #pragma omp parallel
  220. // expected-error@+1 {{expected variable name}}
  221. #pragma omp master taskloop private(0)
  222. for (i = 0; i < 16; ++i)
  223. ;
  224. int x, y, z;
  225. #pragma omp parallel
  226. #pragma omp master taskloop private(x)
  227. for (i = 0; i < 16; ++i)
  228. ;
  229. #pragma omp parallel
  230. #pragma omp master taskloop private(x, y)
  231. for (i = 0; i < 16; ++i)
  232. ;
  233. #pragma omp parallel
  234. #pragma omp master taskloop private(x, y, z)
  235. for (i = 0; i < 16; ++i) {
  236. x = y * i + z;
  237. }
  238. }
  239. void test_lastprivate() {
  240. int i;
  241. #pragma omp parallel
  242. // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
  243. // expected-error@+1 {{expected expression}}
  244. #pragma omp master taskloop lastprivate(
  245. for (i = 0; i < 16; ++i)
  246. ;
  247. #pragma omp parallel
  248. // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
  249. // expected-error@+1 2 {{expected expression}}
  250. #pragma omp master taskloop lastprivate(,
  251. for (i = 0; i < 16; ++i)
  252. ;
  253. #pragma omp parallel
  254. // expected-error@+1 2 {{expected expression}}
  255. #pragma omp master taskloop lastprivate(, )
  256. for (i = 0; i < 16; ++i)
  257. ;
  258. #pragma omp parallel
  259. // expected-error@+1 {{expected expression}}
  260. #pragma omp master taskloop lastprivate()
  261. for (i = 0; i < 16; ++i)
  262. ;
  263. #pragma omp parallel
  264. // expected-error@+1 {{expected expression}}
  265. #pragma omp master taskloop lastprivate(int)
  266. for (i = 0; i < 16; ++i)
  267. ;
  268. #pragma omp parallel
  269. // expected-error@+1 {{expected variable name}}
  270. #pragma omp master taskloop lastprivate(0)
  271. for (i = 0; i < 16; ++i)
  272. ;
  273. int x, y, z;
  274. #pragma omp parallel
  275. #pragma omp master taskloop lastprivate(x)
  276. for (i = 0; i < 16; ++i)
  277. ;
  278. #pragma omp parallel
  279. #pragma omp master taskloop lastprivate(x, y)
  280. for (i = 0; i < 16; ++i)
  281. ;
  282. #pragma omp parallel
  283. #pragma omp master taskloop lastprivate(x, y, z)
  284. for (i = 0; i < 16; ++i)
  285. ;
  286. }
  287. void test_firstprivate() {
  288. int i;
  289. #pragma omp parallel
  290. // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
  291. // expected-error@+1 {{expected expression}}
  292. #pragma omp master taskloop firstprivate(
  293. for (i = 0; i < 16; ++i)
  294. ;
  295. #pragma omp parallel
  296. // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
  297. // expected-error@+1 2 {{expected expression}}
  298. #pragma omp master taskloop firstprivate(,
  299. for (i = 0; i < 16; ++i)
  300. ;
  301. #pragma omp parallel
  302. // expected-error@+1 2 {{expected expression}}
  303. #pragma omp master taskloop firstprivate(, )
  304. for (i = 0; i < 16; ++i)
  305. ;
  306. #pragma omp parallel
  307. // expected-error@+1 {{expected expression}}
  308. #pragma omp master taskloop firstprivate()
  309. for (i = 0; i < 16; ++i)
  310. ;
  311. #pragma omp parallel
  312. // expected-error@+1 {{expected expression}}
  313. #pragma omp master taskloop firstprivate(int)
  314. for (i = 0; i < 16; ++i)
  315. ;
  316. #pragma omp parallel
  317. // expected-error@+1 {{expected variable name}}
  318. #pragma omp master taskloop firstprivate(0)
  319. for (i = 0; i < 16; ++i)
  320. ;
  321. int x, y, z;
  322. #pragma omp parallel
  323. #pragma omp master taskloop lastprivate(x) firstprivate(x)
  324. for (i = 0; i < 16; ++i)
  325. ;
  326. #pragma omp parallel
  327. #pragma omp master taskloop lastprivate(x, y) firstprivate(x, y)
  328. for (i = 0; i < 16; ++i)
  329. ;
  330. #pragma omp parallel
  331. #pragma omp master taskloop lastprivate(x, y, z) firstprivate(x, y, z)
  332. for (i = 0; i < 16; ++i)
  333. ;
  334. }
  335. void test_loop_messages() {
  336. float a[100], b[100], c[100];
  337. #pragma omp parallel
  338. // expected-error@+2 {{variable must be of integer or pointer type}}
  339. #pragma omp master taskloop
  340. for (float fi = 0; fi < 10.0; fi++) {
  341. c[(int)fi] = a[(int)fi] + b[(int)fi];
  342. }
  343. #pragma omp parallel
  344. // expected-error@+2 {{variable must be of integer or pointer type}}
  345. #pragma omp master taskloop
  346. for (double fi = 0; fi < 10.0; fi++) {
  347. c[(int)fi] = a[(int)fi] + b[(int)fi];
  348. }
  349. // expected-warning@+2 {{OpenMP loop iteration variable cannot have more than 64 bits size and will be narrowed}}
  350. #pragma omp master taskloop
  351. for (__int128 ii = 0; ii < 10; ii++) {
  352. c[ii] = a[ii] + b[ii];
  353. }
  354. }