1 // RUN: %clang_cc1 -fsyntax-only -fopenmp=libiomp5 -verify %s 2 3 // expected-error@+1 {{unexpected OpenMP directive '#pragma omp parallel for simd'}} 4 #pragma omp parallel for simd 5 6 // expected-error@+1 {{unexpected OpenMP directive '#pragma omp parallel for simd'}} 7 #pragma omp parallel for simd foo 8 9 void test_no_clause() { 10 int i; 11 #pragma omp parallel for simd 12 for (i = 0; i < 16; ++i) 13 ; 14 15 // expected-error@+2 {{statement after '#pragma omp parallel for simd' must be a for loop}} 16 #pragma omp parallel for simd 17 ++i; 18 } 19 20 void test_branch_protected_scope() { 21 int i = 0; 22 L1: 23 ++i; 24 25 int x[24]; 26 27 #pragma omp parallel 28 #pragma omp parallel for simd 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 42 if (x[0] == 0) 43 goto L2; // expected-error {{use of undeclared label 'L2'}} 44 else if (x[1] == 1) 45 goto L1; 46 } 47 48 void test_invalid_clause() { 49 int i; 50 #pragma omp parallel 51 // expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}} 52 #pragma omp parallel for simd foo bar 53 for (i = 0; i < 16; ++i) 54 ; 55 } 56 57 void test_non_identifiers() { 58 int i, x; 59 60 #pragma omp parallel 61 // expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}} 62 #pragma omp parallel for simd; 63 for (i = 0; i < 16; ++i) 64 ; 65 #pragma omp parallel 66 // expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}} 67 #pragma omp parallel for simd linear(x); 68 for (i = 0; i < 16; ++i) 69 ; 70 71 #pragma omp parallel 72 // expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}} 73 #pragma omp parallel for simd private(x); 74 for (i = 0; i < 16; ++i) 75 ; 76 77 #pragma omp parallel 78 // expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}} 79 #pragma omp parallel for simd, private(x); 80 for (i = 0; i < 16; ++i) 81 ; 82 } 83 84 extern int foo(); 85 void test_safelen() { 86 int i; 87 // expected-error@+1 {{expected '('}} 88 #pragma omp parallel for simd safelen 89 for (i = 0; i < 16; ++i) 90 ; 91 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 92 #pragma omp parallel for simd safelen( 93 for (i = 0; i < 16; ++i) 94 ; 95 // expected-error@+1 {{expected expression}} 96 #pragma omp parallel for simd safelen() 97 for (i = 0; i < 16; ++i) 98 ; 99 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 100 #pragma omp parallel for simd safelen(, 101 for (i = 0; i < 16; ++i) 102 ; 103 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 104 #pragma omp parallel for simd safelen(, ) 105 for (i = 0; i < 16; ++i) 106 ; 107 // expected-warning@+2 {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}} 108 // expected-error@+1 {{expected '('}} 109 #pragma omp parallel for simd safelen 4) 110 for (i = 0; i < 16; ++i) 111 ; 112 // expected-error@+2 {{expected ')'}} 113 // expected-note@+1 {{to match this '('}} 114 #pragma omp parallel for simd safelen(4 115 for (i = 0; i < 16; ++i) 116 ; 117 // expected-error@+2 {{expected ')'}} 118 // expected-note@+1 {{to match this '('}} 119 #pragma omp parallel for simd safelen(4, 120 for (i = 0; i < 16; ++i) 121 ; 122 // expected-error@+2 {{expected ')'}} 123 // expected-note@+1 {{to match this '('}} 124 #pragma omp parallel for simd safelen(4, ) 125 for (i = 0; i < 16; ++i) 126 ; 127 #pragma omp parallel for simd safelen(4) 128 for (i = 0; i < 16; ++i) 129 ; 130 // expected-error@+2 {{expected ')'}} 131 // expected-note@+1 {{to match this '('}} 132 #pragma omp parallel for simd safelen(4 4) 133 for (i = 0; i < 16; ++i) 134 ; 135 // expected-error@+2 {{expected ')'}} 136 // expected-note@+1 {{to match this '('}} 137 #pragma omp parallel for simd safelen(4, , 4) 138 for (i = 0; i < 16; ++i) 139 ; 140 #pragma omp parallel for simd safelen(4) 141 for (i = 0; i < 16; ++i) 142 ; 143 // expected-error@+2 {{expected ')'}} 144 // expected-note@+1 {{to match this '('}} 145 #pragma omp parallel for simd safelen(4, 8) 146 for (i = 0; i < 16; ++i) 147 ; 148 // expected-error@+1 {{expression is not an integer constant expression}} 149 #pragma omp parallel for simd safelen(2.5) 150 for (i = 0; i < 16; ++i) 151 ; 152 // expected-error@+1 {{expression is not an integer constant expression}} 153 #pragma omp parallel for simd safelen(foo()) 154 for (i = 0; i < 16; ++i) 155 ; 156 // expected-error@+1 {{argument to 'safelen' clause must be a positive integer value}} 157 #pragma omp parallel for simd safelen(-5) 158 for (i = 0; i < 16; ++i) 159 ; 160 // expected-error@+1 {{argument to 'safelen' clause must be a positive integer value}} 161 #pragma omp parallel for simd safelen(0) 162 for (i = 0; i < 16; ++i) 163 ; 164 // expected-error@+1 {{argument to 'safelen' clause must be a positive integer value}} 165 #pragma omp parallel for simd safelen(5 - 5) 166 for (i = 0; i < 16; ++i) 167 ; 168 } 169 170 void test_collapse() { 171 int i; 172 #pragma omp parallel 173 // expected-error@+1 {{expected '('}} 174 #pragma omp parallel for simd collapse 175 for (i = 0; i < 16; ++i) 176 ; 177 #pragma omp parallel 178 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 179 #pragma omp parallel for simd collapse( 180 for (i = 0; i < 16; ++i) 181 ; 182 #pragma omp parallel 183 // expected-error@+1 {{expected expression}} 184 #pragma omp parallel for simd collapse() 185 for (i = 0; i < 16; ++i) 186 ; 187 #pragma omp parallel 188 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 189 #pragma omp parallel for simd collapse(, 190 for (i = 0; i < 16; ++i) 191 ; 192 #pragma omp parallel 193 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 194 #pragma omp parallel for simd collapse(, ) 195 for (i = 0; i < 16; ++i) 196 ; 197 #pragma omp parallel 198 // expected-warning@+2 {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}} 199 // expected-error@+1 {{expected '('}} 200 #pragma omp parallel for simd collapse 4) 201 for (i = 0; i < 16; ++i) 202 ; 203 #pragma omp parallel 204 // expected-error@+2 {{expected ')'}} 205 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} 206 #pragma omp parallel for simd collapse(4 207 for (i = 0; i < 16; ++i) 208 ; // expected-error {{expected 4 for loops after '#pragma omp parallel for simd', but found only 1}} 209 #pragma omp parallel 210 // expected-error@+2 {{expected ')'}} 211 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} 212 #pragma omp parallel for simd collapse(4, 213 for (i = 0; i < 16; ++i) 214 ; // expected-error {{expected 4 for loops after '#pragma omp parallel for simd', but found only 1}} 215 #pragma omp parallel 216 // expected-error@+2 {{expected ')'}} 217 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} 218 #pragma omp parallel for simd collapse(4, ) 219 for (i = 0; i < 16; ++i) 220 ; // expected-error {{expected 4 for loops after '#pragma omp parallel for simd', but found only 1}} 221 #pragma omp parallel 222 // expected-note@+1 {{as specified in 'collapse' clause}} 223 #pragma omp parallel for simd collapse(4) 224 for (i = 0; i < 16; ++i) 225 ; // expected-error {{expected 4 for loops after '#pragma omp parallel for simd', but found only 1}} 226 #pragma omp parallel 227 // expected-error@+2 {{expected ')'}} 228 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} 229 #pragma omp parallel for simd collapse(4 4) 230 for (i = 0; i < 16; ++i) 231 ; // expected-error {{expected 4 for loops after '#pragma omp parallel for simd', but found only 1}} 232 #pragma omp parallel 233 // expected-error@+2 {{expected ')'}} 234 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} 235 #pragma omp parallel for simd collapse(4, , 4) 236 for (i = 0; i < 16; ++i) 237 ; // expected-error {{expected 4 for loops after '#pragma omp parallel for simd', but found only 1}} 238 #pragma omp parallel 239 #pragma omp parallel for simd collapse(4) 240 for (int i1 = 0; i1 < 16; ++i1) 241 for (int i2 = 0; i2 < 16; ++i2) 242 for (int i3 = 0; i3 < 16; ++i3) 243 for (int i4 = 0; i4 < 16; ++i4) 244 foo(); 245 #pragma omp parallel 246 // expected-error@+2 {{expected ')'}} 247 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} 248 #pragma omp parallel for simd collapse(4, 8) 249 for (i = 0; i < 16; ++i) 250 ; // expected-error {{expected 4 for loops after '#pragma omp parallel for simd', but found only 1}} 251 #pragma omp parallel 252 // expected-error@+1 {{expression is not an integer constant expression}} 253 #pragma omp parallel for simd collapse(2.5) 254 for (i = 0; i < 16; ++i) 255 ; 256 #pragma omp parallel 257 // expected-error@+1 {{expression is not an integer constant expression}} 258 #pragma omp parallel for simd collapse(foo()) 259 for (i = 0; i < 16; ++i) 260 ; 261 #pragma omp parallel 262 // expected-error@+1 {{argument to 'collapse' clause must be a positive integer value}} 263 #pragma omp parallel for simd collapse(-5) 264 for (i = 0; i < 16; ++i) 265 ; 266 #pragma omp parallel 267 // expected-error@+1 {{argument to 'collapse' clause must be a positive integer value}} 268 #pragma omp parallel for simd collapse(0) 269 for (i = 0; i < 16; ++i) 270 ; 271 #pragma omp parallel 272 // expected-error@+1 {{argument to 'collapse' clause must be a positive integer value}} 273 #pragma omp parallel for simd collapse(5 - 5) 274 for (i = 0; i < 16; ++i) 275 ; 276 #pragma omp parallel 277 #pragma omp parallel for simd collapse(2) 278 for (i = 0; i < 16; ++i) 279 for (int j = 0; j < 16; ++j) 280 // expected-error@+1 {{OpenMP constructs may not be nested inside a simd region}} 281 #pragma omp parallel for simd reduction(+ : i, j) 282 for (int k = 0; k < 16; ++k) 283 i += j; 284 } 285 286 void test_linear() { 287 int i; 288 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 289 #pragma omp parallel for simd linear( 290 for (i = 0; i < 16; ++i) 291 ; 292 // expected-error@+2 {{expected expression}} 293 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 294 #pragma omp parallel for simd linear(, 295 for (i = 0; i < 16; ++i) 296 ; 297 // expected-error@+2 {{expected expression}} 298 // expected-error@+1 {{expected expression}} 299 #pragma omp parallel for simd linear(, ) 300 for (i = 0; i < 16; ++i) 301 ; 302 // expected-error@+1 {{expected expression}} 303 #pragma omp parallel for simd linear() 304 for (i = 0; i < 16; ++i) 305 ; 306 // expected-error@+1 {{expected expression}} 307 #pragma omp parallel for simd linear(int) 308 for (i = 0; i < 16; ++i) 309 ; 310 // expected-error@+1 {{expected variable name}} 311 #pragma omp parallel for simd linear(0) 312 for (i = 0; i < 16; ++i) 313 ; 314 // expected-error@+1 {{use of undeclared identifier 'x'}} 315 #pragma omp parallel for simd linear(x) 316 for (i = 0; i < 16; ++i) 317 ; 318 // expected-error@+2 {{use of undeclared identifier 'x'}} 319 // expected-error@+1 {{use of undeclared identifier 'y'}} 320 #pragma omp parallel for simd linear(x, y) 321 for (i = 0; i < 16; ++i) 322 ; 323 // expected-error@+3 {{use of undeclared identifier 'x'}} 324 // expected-error@+2 {{use of undeclared identifier 'y'}} 325 // expected-error@+1 {{use of undeclared identifier 'z'}} 326 #pragma omp parallel for simd linear(x, y, z) 327 for (i = 0; i < 16; ++i) 328 ; 329 330 int x, y; 331 // expected-error@+1 {{expected expression}} 332 #pragma omp parallel for simd linear(x :) 333 for (i = 0; i < 16; ++i) 334 ; 335 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 336 #pragma omp parallel for simd linear(x :, ) 337 for (i = 0; i < 16; ++i) 338 ; 339 #pragma omp parallel for simd linear(x : 1) 340 for (i = 0; i < 16; ++i) 341 ; 342 #pragma omp parallel for simd linear(x : 2 * 2) 343 for (i = 0; i < 16; ++i) 344 ; 345 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 346 #pragma omp parallel for simd linear(x : 1, y) 347 for (i = 0; i < 16; ++i) 348 ; 349 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 350 #pragma omp parallel for simd linear(x : 1, y, z : 1) 351 for (i = 0; i < 16; ++i) 352 ; 353 354 // expected-note@+2 {{defined as linear}} 355 // expected-error@+1 {{linear variable cannot be linear}} 356 #pragma omp parallel for simd linear(x) linear(x) 357 for (i = 0; i < 16; ++i) 358 ; 359 360 // expected-note@+2 {{defined as private}} 361 // expected-error@+1 {{private variable cannot be linear}} 362 #pragma omp parallel for simd private(x) linear(x) 363 for (i = 0; i < 16; ++i) 364 ; 365 366 // expected-note@+2 {{defined as linear}} 367 // expected-error@+1 {{linear variable cannot be private}} 368 #pragma omp parallel for simd linear(x) private(x) 369 for (i = 0; i < 16; ++i) 370 ; 371 372 // expected-warning@+1 {{zero linear step (x and other variables in clause should probably be const)}} 373 #pragma omp parallel for simd linear(x, y : 0) 374 for (i = 0; i < 16; ++i) 375 ; 376 377 // expected-note@+2 {{defined as linear}} 378 // expected-error@+1 {{linear variable cannot be lastprivate}} 379 #pragma omp parallel for simd linear(x) lastprivate(x) 380 for (i = 0; i < 16; ++i) 381 ; 382 383 #pragma omp parallel 384 // expected-note@+2 {{defined as lastprivate}} 385 // expected-error@+1 {{lastprivate variable cannot be linear}} 386 #pragma omp parallel for simd lastprivate(x) linear(x) 387 for (i = 0; i < 16; ++i) 388 ; 389 } 390 391 void test_aligned() { 392 int i; 393 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 394 #pragma omp parallel for simd aligned( 395 for (i = 0; i < 16; ++i) 396 ; 397 // expected-error@+2 {{expected expression}} 398 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 399 #pragma omp parallel for simd aligned(, 400 for (i = 0; i < 16; ++i) 401 ; 402 // expected-error@+2 {{expected expression}} 403 // expected-error@+1 {{expected expression}} 404 #pragma omp parallel for simd aligned(, ) 405 for (i = 0; i < 16; ++i) 406 ; 407 // expected-error@+1 {{expected expression}} 408 #pragma omp parallel for simd aligned() 409 for (i = 0; i < 16; ++i) 410 ; 411 // expected-error@+1 {{expected expression}} 412 #pragma omp parallel for simd aligned(int) 413 for (i = 0; i < 16; ++i) 414 ; 415 // expected-error@+1 {{expected variable name}} 416 #pragma omp parallel for simd aligned(0) 417 for (i = 0; i < 16; ++i) 418 ; 419 // expected-error@+1 {{use of undeclared identifier 'x'}} 420 #pragma omp parallel for simd aligned(x) 421 for (i = 0; i < 16; ++i) 422 ; 423 // expected-error@+2 {{use of undeclared identifier 'x'}} 424 // expected-error@+1 {{use of undeclared identifier 'y'}} 425 #pragma omp parallel for simd aligned(x, y) 426 for (i = 0; i < 16; ++i) 427 ; 428 // expected-error@+3 {{use of undeclared identifier 'x'}} 429 // expected-error@+2 {{use of undeclared identifier 'y'}} 430 // expected-error@+1 {{use of undeclared identifier 'z'}} 431 #pragma omp parallel for simd aligned(x, y, z) 432 for (i = 0; i < 16; ++i) 433 ; 434 435 int *x, y, z[25]; // expected-note 4 {{'y' defined here}} 436 #pragma omp parallel for simd aligned(x) 437 for (i = 0; i < 16; ++i) 438 ; 439 #pragma omp parallel for simd aligned(z) 440 for (i = 0; i < 16; ++i) 441 ; 442 // expected-error@+1 {{expected expression}} 443 #pragma omp parallel for simd aligned(x :) 444 for (i = 0; i < 16; ++i) 445 ; 446 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 447 #pragma omp parallel for simd aligned(x :, ) 448 for (i = 0; i < 16; ++i) 449 ; 450 #pragma omp parallel for simd aligned(x : 1) 451 for (i = 0; i < 16; ++i) 452 ; 453 #pragma omp parallel for simd aligned(x : 2 * 2) 454 for (i = 0; i < 16; ++i) 455 ; 456 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 457 #pragma omp parallel for simd aligned(x : 1, y) 458 for (i = 0; i < 16; ++i) 459 ; 460 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 461 #pragma omp parallel for simd aligned(x : 1, y, z : 1) 462 for (i = 0; i < 16; ++i) 463 ; 464 465 // expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}} 466 #pragma omp parallel for simd aligned(x, y) 467 for (i = 0; i < 16; ++i) 468 ; 469 // expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}} 470 #pragma omp parallel for simd aligned(x, y, z) 471 for (i = 0; i < 16; ++i) 472 ; 473 474 // expected-note@+2 {{defined as aligned}} 475 // expected-error@+1 {{a variable cannot appear in more than one aligned clause}} 476 #pragma omp parallel for simd aligned(x) aligned(z, x) 477 for (i = 0; i < 16; ++i) 478 ; 479 480 // expected-note@+3 {{defined as aligned}} 481 // expected-error@+2 {{a variable cannot appear in more than one aligned clause}} 482 // expected-error@+1 2 {{argument of aligned clause should be array or pointer, not 'int'}} 483 #pragma omp parallel for simd aligned(x, y, z) aligned(y, z) 484 for (i = 0; i < 16; ++i) 485 ; 486 } 487 488 489 void test_private() { 490 int i; 491 #pragma omp parallel 492 // expected-error@+2 {{expected expression}} 493 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 494 #pragma omp parallel for simd private( 495 for (i = 0; i < 16; ++i) 496 ; 497 #pragma omp parallel 498 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}} 499 // expected-error@+1 2 {{expected expression}} 500 #pragma omp parallel for simd private(, 501 for (i = 0; i < 16; ++i) 502 ; 503 #pragma omp parallel 504 // expected-error@+1 2 {{expected expression}} 505 #pragma omp parallel for simd private(, ) 506 for (i = 0; i < 16; ++i) 507 ; 508 #pragma omp parallel 509 // expected-error@+1 {{expected expression}} 510 #pragma omp parallel for simd private() 511 for (i = 0; i < 16; ++i) 512 ; 513 #pragma omp parallel 514 // expected-error@+1 {{expected expression}} 515 #pragma omp parallel for simd private(int) 516 for (i = 0; i < 16; ++i) 517 ; 518 #pragma omp parallel 519 // expected-error@+1 {{expected variable name}} 520 #pragma omp parallel for simd private(0) 521 for (i = 0; i < 16; ++i) 522 ; 523 524 int x, y, z; 525 #pragma omp parallel 526 #pragma omp parallel for simd private(x) 527 for (i = 0; i < 16; ++i) 528 ; 529 #pragma omp parallel 530 #pragma omp parallel for simd private(x, y) 531 for (i = 0; i < 16; ++i) 532 ; 533 #pragma omp parallel 534 #pragma omp parallel for simd private(x, y, z) 535 for (i = 0; i < 16; ++i) { 536 x = y * i + z; 537 } 538 } 539 540 void test_lastprivate() { 541 int i; 542 #pragma omp parallel 543 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}} 544 // expected-error@+1 {{expected expression}} 545 #pragma omp parallel for simd lastprivate( 546 for (i = 0; i < 16; ++i) 547 ; 548 549 #pragma omp parallel 550 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}} 551 // expected-error@+1 2 {{expected expression}} 552 #pragma omp parallel for simd lastprivate(, 553 for (i = 0; i < 16; ++i) 554 ; 555 #pragma omp parallel 556 // expected-error@+1 2 {{expected expression}} 557 #pragma omp parallel for simd lastprivate(, ) 558 for (i = 0; i < 16; ++i) 559 ; 560 #pragma omp parallel 561 // expected-error@+1 {{expected expression}} 562 #pragma omp parallel for simd lastprivate() 563 for (i = 0; i < 16; ++i) 564 ; 565 #pragma omp parallel 566 // expected-error@+1 {{expected expression}} 567 #pragma omp parallel for simd lastprivate(int) 568 for (i = 0; i < 16; ++i) 569 ; 570 #pragma omp parallel 571 // expected-error@+1 {{expected variable name}} 572 #pragma omp parallel for simd lastprivate(0) 573 for (i = 0; i < 16; ++i) 574 ; 575 576 int x, y, z; 577 #pragma omp parallel 578 #pragma omp parallel for simd lastprivate(x) 579 for (i = 0; i < 16; ++i) 580 ; 581 #pragma omp parallel 582 #pragma omp parallel for simd lastprivate(x, y) 583 for (i = 0; i < 16; ++i) 584 ; 585 #pragma omp parallel 586 #pragma omp parallel for simd lastprivate(x, y, z) 587 for (i = 0; i < 16; ++i) 588 ; 589 } 590 591 void test_firstprivate() { 592 int i; 593 #pragma omp parallel 594 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}} 595 // expected-error@+1 {{expected expression}} 596 #pragma omp parallel for simd firstprivate( 597 for (i = 0; i < 16; ++i) 598 ; 599 600 #pragma omp parallel 601 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}} 602 // expected-error@+1 2 {{expected expression}} 603 #pragma omp parallel for simd firstprivate(, 604 for (i = 0; i < 16; ++i) 605 ; 606 #pragma omp parallel 607 // expected-error@+1 2 {{expected expression}} 608 #pragma omp parallel for simd firstprivate(, ) 609 for (i = 0; i < 16; ++i) 610 ; 611 #pragma omp parallel 612 // expected-error@+1 {{expected expression}} 613 #pragma omp parallel for simd firstprivate() 614 for (i = 0; i < 16; ++i) 615 ; 616 #pragma omp parallel 617 // expected-error@+1 {{expected expression}} 618 #pragma omp parallel for simd firstprivate(int) 619 for (i = 0; i < 16; ++i) 620 ; 621 #pragma omp parallel 622 // expected-error@+1 {{expected variable name}} 623 #pragma omp parallel for simd firstprivate(0) 624 for (i = 0; i < 16; ++i) 625 ; 626 627 int x, y, z; 628 #pragma omp parallel 629 #pragma omp parallel for simd lastprivate(x) firstprivate(x) 630 for (i = 0; i < 16; ++i) 631 ; 632 #pragma omp parallel 633 #pragma omp parallel for simd lastprivate(x, y) firstprivate(x, y) 634 for (i = 0; i < 16; ++i) 635 ; 636 #pragma omp parallel 637 #pragma omp parallel for simd lastprivate(x, y, z) firstprivate(x, y, z) 638 for (i = 0; i < 16; ++i) 639 ; 640 } 641 642 void test_loop_messages() { 643 float a[100], b[100], c[100]; 644 #pragma omp parallel 645 // expected-error@+2 {{variable must be of integer or pointer type}} 646 #pragma omp parallel for simd 647 for (float fi = 0; fi < 10.0; fi++) { 648 c[(int)fi] = a[(int)fi] + b[(int)fi]; 649 } 650 #pragma omp parallel 651 // expected-error@+2 {{variable must be of integer or pointer type}} 652 #pragma omp parallel for simd 653 for (double fi = 0; fi < 10.0; fi++) { 654 c[(int)fi] = a[(int)fi] + b[(int)fi]; 655 } 656 } 657 658