1 // RUN: %clang_cc1 -fsyntax-only -fopenmp -verify %s 2 3 // expected-error@+1 {{unexpected OpenMP directive '#pragma omp simd'}} 4 #pragma omp simd 5 6 // expected-error@+1 {{unexpected OpenMP directive '#pragma omp simd'}} 7 #pragma omp simd foo 8 9 // expected-error@+1 {{unexpected OpenMP directive '#pragma omp simd'}} 10 #pragma omp simd safelen(4) 11 12 void test_no_clause() { 13 int i; 14 #pragma omp simd 15 for (i = 0; i < 16; ++i) 16 ; 17 18 // expected-error@+2 {{statement after '#pragma omp simd' must be a for loop}} 19 #pragma omp simd 20 ++i; 21 } 22 23 void test_branch_protected_scope() { 24 int i = 0; 25 L1: 26 ++i; 27 28 int x[24]; 29 30 #pragma omp simd 31 for (i = 0; i < 16; ++i) { 32 if (i == 5) 33 goto L1; // expected-error {{use of undeclared label 'L1'}} 34 else if (i == 6) 35 return; // expected-error {{cannot return from OpenMP region}} 36 else if (i == 7) 37 goto L2; 38 else if (i == 8) { 39 L2: 40 x[i]++; 41 } 42 } 43 44 if (x[0] == 0) 45 goto L2; // expected-error {{use of undeclared label 'L2'}} 46 else if (x[1] == 1) 47 goto L1; 48 } 49 50 void test_invalid_clause() { 51 int i; 52 // expected-warning@+1 {{extra tokens at the end of '#pragma omp simd' are ignored}} 53 #pragma omp simd foo bar 54 for (i = 0; i < 16; ++i) 55 ; 56 } 57 58 void test_non_identifiers() { 59 int i, x; 60 61 // expected-warning@+1 {{extra tokens at the end of '#pragma omp simd' are ignored}} 62 #pragma omp simd; 63 for (i = 0; i < 16; ++i) 64 ; 65 // expected-error@+2 {{unexpected OpenMP clause 'firstprivate' in directive '#pragma omp simd'}} 66 // expected-warning@+1 {{extra tokens at the end of '#pragma omp simd' are ignored}} 67 #pragma omp simd firstprivate(x); 68 for (i = 0; i < 16; ++i) 69 ; 70 71 // expected-warning@+1 {{extra tokens at the end of '#pragma omp simd' are ignored}} 72 #pragma omp simd private(x); 73 for (i = 0; i < 16; ++i) 74 ; 75 76 // expected-warning@+1 {{extra tokens at the end of '#pragma omp simd' are ignored}} 77 #pragma omp simd, private(x); 78 for (i = 0; i < 16; ++i) 79 ; 80 } 81 82 extern int foo(); 83 void test_safelen() { 84 int i; 85 // expected-error@+1 {{expected '('}} 86 #pragma omp simd safelen 87 for (i = 0; i < 16; ++i) 88 ; 89 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 90 #pragma omp simd safelen( 91 for (i = 0; i < 16; ++i) 92 ; 93 // expected-error@+1 {{expected expression}} 94 #pragma omp simd safelen() 95 for (i = 0; i < 16; ++i) 96 ; 97 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 98 #pragma omp simd safelen(, 99 for (i = 0; i < 16; ++i) 100 ; 101 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 102 #pragma omp simd safelen(, ) 103 for (i = 0; i < 16; ++i) 104 ; 105 // expected-warning@+2 {{extra tokens at the end of '#pragma omp simd' are ignored}} 106 // expected-error@+1 {{expected '('}} 107 #pragma omp simd safelen 4) 108 for (i = 0; i < 16; ++i) 109 ; 110 // expected-error@+2 {{expected ')'}} 111 // expected-note@+1 {{to match this '('}} 112 #pragma omp simd safelen(4 113 for (i = 0; i < 16; ++i) 114 ; 115 // expected-error@+2 {{expected ')'}} 116 // expected-note@+1 {{to match this '('}} 117 #pragma omp simd safelen(4, 118 for (i = 0; i < 16; ++i) 119 ; 120 // expected-error@+2 {{expected ')'}} 121 // expected-note@+1 {{to match this '('}} 122 #pragma omp simd safelen(4, ) 123 for (i = 0; i < 16; ++i) 124 ; 125 // xxpected-error@+1 {{expected expression}} 126 #pragma omp simd safelen(4) 127 for (i = 0; i < 16; ++i) 128 ; 129 // expected-error@+2 {{expected ')'}} 130 // expected-note@+1 {{to match this '('}} 131 #pragma omp simd safelen(4 4) 132 for (i = 0; i < 16; ++i) 133 ; 134 // expected-error@+2 {{expected ')'}} 135 // expected-note@+1 {{to match this '('}} 136 #pragma omp simd safelen(4, , 4) 137 for (i = 0; i < 16; ++i) 138 ; 139 #pragma omp simd safelen(4) 140 for (i = 0; i < 16; ++i) 141 ; 142 // expected-error@+2 {{expected ')'}} 143 // expected-note@+1 {{to match this '('}} 144 #pragma omp simd safelen(4, 8) 145 for (i = 0; i < 16; ++i) 146 ; 147 // expected-error@+1 {{expression is not an integer constant expression}} 148 #pragma omp simd safelen(2.5) 149 for (i = 0; i < 16; ++i) 150 ; 151 // expected-error@+1 {{expression is not an integer constant expression}} 152 #pragma omp simd safelen(foo()) 153 for (i = 0; i < 16; ++i) 154 ; 155 // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}} 156 #pragma omp simd safelen(-5) 157 for (i = 0; i < 16; ++i) 158 ; 159 // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}} 160 #pragma omp simd safelen(0) 161 for (i = 0; i < 16; ++i) 162 ; 163 // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}} 164 #pragma omp simd safelen(5 - 5) 165 for (i = 0; i < 16; ++i) 166 ; 167 } 168 169 void test_simdlen() { 170 int i; 171 // expected-error@+1 {{expected '('}} 172 #pragma omp simd simdlen 173 for (i = 0; i < 16; ++i) 174 ; 175 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 176 #pragma omp simd simdlen( 177 for (i = 0; i < 16; ++i) 178 ; 179 // expected-error@+1 {{expected expression}} 180 #pragma omp simd simdlen() 181 for (i = 0; i < 16; ++i) 182 ; 183 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 184 #pragma omp simd simdlen(, 185 for (i = 0; i < 16; ++i) 186 ; 187 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 188 #pragma omp simd simdlen(, ) 189 for (i = 0; i < 16; ++i) 190 ; 191 // expected-warning@+2 {{extra tokens at the end of '#pragma omp simd' are ignored}} 192 // expected-error@+1 {{expected '('}} 193 #pragma omp simd simdlen 4) 194 for (i = 0; i < 16; ++i) 195 ; 196 // expected-error@+2 {{expected ')'}} 197 // expected-note@+1 {{to match this '('}} 198 #pragma omp simd simdlen(4 199 for (i = 0; i < 16; ++i) 200 ; 201 // expected-error@+2 {{expected ')'}} 202 // expected-note@+1 {{to match this '('}} 203 #pragma omp simd simdlen(4, 204 for (i = 0; i < 16; ++i) 205 ; 206 // expected-error@+2 {{expected ')'}} 207 // expected-note@+1 {{to match this '('}} 208 #pragma omp simd simdlen(4, ) 209 for (i = 0; i < 16; ++i) 210 ; 211 #pragma omp simd simdlen(4) 212 for (i = 0; i < 16; ++i) 213 ; 214 // expected-error@+2 {{expected ')'}} 215 // expected-note@+1 {{to match this '('}} 216 #pragma omp simd simdlen(4 4) 217 for (i = 0; i < 16; ++i) 218 ; 219 // expected-error@+2 {{expected ')'}} 220 // expected-note@+1 {{to match this '('}} 221 #pragma omp simd simdlen(4, , 4) 222 for (i = 0; i < 16; ++i) 223 ; 224 #pragma omp simd simdlen(4) 225 for (i = 0; i < 16; ++i) 226 ; 227 // expected-error@+2 {{expected ')'}} 228 // expected-note@+1 {{to match this '('}} 229 #pragma omp simd simdlen(4, 8) 230 for (i = 0; i < 16; ++i) 231 ; 232 // expected-error@+1 {{expression is not an integer constant expression}} 233 #pragma omp simd simdlen(2.5) 234 for (i = 0; i < 16; ++i) 235 ; 236 // expected-error@+1 {{expression is not an integer constant expression}} 237 #pragma omp simd simdlen(foo()) 238 for (i = 0; i < 16; ++i) 239 ; 240 // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}} 241 #pragma omp simd simdlen(-5) 242 for (i = 0; i < 16; ++i) 243 ; 244 // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}} 245 #pragma omp simd simdlen(0) 246 for (i = 0; i < 16; ++i) 247 ; 248 // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}} 249 #pragma omp simd simdlen(5 - 5) 250 for (i = 0; i < 16; ++i) 251 ; 252 } 253 254 void test_safelen_simdlen() { 255 int i; 256 // expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}} 257 #pragma omp simd simdlen(6) safelen(5) 258 for (i = 0; i < 16; ++i) 259 ; 260 // expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}} 261 #pragma omp simd safelen(5) simdlen(6) 262 for (i = 0; i < 16; ++i) 263 ; 264 } 265 266 void test_collapse() { 267 int i; 268 // expected-error@+1 {{expected '('}} 269 #pragma omp simd collapse 270 for (i = 0; i < 16; ++i) 271 ; 272 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 273 #pragma omp simd collapse( 274 for (i = 0; i < 16; ++i) 275 ; 276 // expected-error@+1 {{expected expression}} 277 #pragma omp simd collapse() 278 for (i = 0; i < 16; ++i) 279 ; 280 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 281 #pragma omp simd collapse(, 282 for (i = 0; i < 16; ++i) 283 ; 284 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 285 #pragma omp simd collapse(, ) 286 for (i = 0; i < 16; ++i) 287 ; 288 // expected-warning@+2 {{extra tokens at the end of '#pragma omp simd' are ignored}} 289 // expected-error@+1 {{expected '('}} 290 #pragma omp simd collapse 4) 291 for (i = 0; i < 16; ++i) 292 ; 293 // expected-error@+2 {{expected ')'}} 294 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} 295 #pragma omp simd collapse(4 296 for (i = 0; i < 16; ++i) 297 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}} 298 // expected-error@+2 {{expected ')'}} 299 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} 300 #pragma omp simd collapse(4, 301 for (i = 0; i < 16; ++i) 302 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}} 303 // expected-error@+2 {{expected ')'}} 304 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} 305 #pragma omp simd collapse(4, ) 306 for (i = 0; i < 16; ++i) 307 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}} 308 // xxpected-error@+1 {{expected expression}} expected-note@+1 {{as specified in 'collapse' clause}} 309 #pragma omp simd collapse(4) 310 for (i = 0; i < 16; ++i) 311 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}} 312 // expected-error@+2 {{expected ')'}} 313 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} 314 #pragma omp simd collapse(4 4) 315 for (i = 0; i < 16; ++i) 316 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}} 317 // expected-error@+2 {{expected ')'}} 318 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} 319 #pragma omp simd collapse(4, , 4) 320 for (i = 0; i < 16; ++i) 321 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}} 322 #pragma omp simd collapse(4) 323 for (int i1 = 0; i1 < 16; ++i1) 324 for (int i2 = 0; i2 < 16; ++i2) 325 for (int i3 = 0; i3 < 16; ++i3) 326 for (int i4 = 0; i4 < 16; ++i4) 327 foo(); 328 // expected-error@+2 {{expected ')'}} 329 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} 330 #pragma omp simd collapse(4, 8) 331 for (i = 0; i < 16; ++i) 332 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}} 333 // expected-error@+1 {{expression is not an integer constant expression}} 334 #pragma omp simd collapse(2.5) 335 for (i = 0; i < 16; ++i) 336 ; 337 // expected-error@+1 {{expression is not an integer constant expression}} 338 #pragma omp simd collapse(foo()) 339 for (i = 0; i < 16; ++i) 340 ; 341 // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}} 342 #pragma omp simd collapse(-5) 343 for (i = 0; i < 16; ++i) 344 ; 345 // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}} 346 #pragma omp simd collapse(0) 347 for (i = 0; i < 16; ++i) 348 ; 349 // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}} 350 #pragma omp simd collapse(5 - 5) 351 for (i = 0; i < 16; ++i) 352 ; 353 // expected-note@+2 {{defined as reduction}} 354 #pragma omp parallel 355 #pragma omp simd collapse(2) reduction(+ : i) 356 for (i = 0; i < 16; ++i) 357 // expected-note@+1 {{variable with automatic storage duration is predetermined as private; perhaps you forget to enclose 'omp for' directive into a parallel or another task region?}} 358 for (int j = 0; j < 16; ++j) 359 // expected-error@+2 2 {{reduction variable must be shared}} 360 // expected-error@+1 {{OpenMP constructs may not be nested inside a simd region}} 361 #pragma omp for reduction(+ : i, j) 362 for (int k = 0; k < 16; ++k) 363 i += j; 364 #pragma omp parallel 365 #pragma omp for 366 for (i = 0; i < 16; ++i) 367 for (int j = 0; j < 16; ++j) 368 #pragma omp simd reduction(+ : i, j) 369 for (int k = 0; k < 16; ++k) 370 i += j; 371 } 372 373 void test_linear() { 374 int i; 375 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 376 #pragma omp simd linear( 377 for (i = 0; i < 16; ++i) 378 ; 379 // expected-error@+2 {{expected expression}} 380 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 381 #pragma omp simd linear(, 382 for (i = 0; i < 16; ++i) 383 ; 384 // expected-error@+2 {{expected expression}} 385 // expected-error@+1 {{expected expression}} 386 #pragma omp simd linear(, ) 387 for (i = 0; i < 16; ++i) 388 ; 389 // expected-error@+1 {{expected expression}} 390 #pragma omp simd linear() 391 for (i = 0; i < 16; ++i) 392 ; 393 // expected-error@+1 {{expected expression}} 394 #pragma omp simd linear(int) 395 for (i = 0; i < 16; ++i) 396 ; 397 // expected-error@+1 {{expected variable name}} 398 #pragma omp simd linear(0) 399 for (i = 0; i < 16; ++i) 400 ; 401 // expected-error@+1 {{use of undeclared identifier 'x'}} 402 #pragma omp simd linear(x) 403 for (i = 0; i < 16; ++i) 404 ; 405 // expected-error@+2 {{use of undeclared identifier 'x'}} 406 // expected-error@+1 {{use of undeclared identifier 'y'}} 407 #pragma omp simd linear(x, y) 408 for (i = 0; i < 16; ++i) 409 ; 410 // expected-error@+3 {{use of undeclared identifier 'x'}} 411 // expected-error@+2 {{use of undeclared identifier 'y'}} 412 // expected-error@+1 {{use of undeclared identifier 'z'}} 413 #pragma omp simd linear(x, y, z) 414 for (i = 0; i < 16; ++i) 415 ; 416 417 int x, y; 418 // expected-error@+1 {{expected expression}} 419 #pragma omp simd linear(x :) 420 for (i = 0; i < 16; ++i) 421 ; 422 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 423 #pragma omp simd linear(x :, ) 424 for (i = 0; i < 16; ++i) 425 ; 426 #pragma omp simd linear(x : 1) 427 for (i = 0; i < 16; ++i) 428 ; 429 #pragma omp simd linear(x : 2 * 2) 430 for (i = 0; i < 16; ++i) 431 ; 432 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 433 #pragma omp simd linear(x : 1, y) 434 for (i = 0; i < 16; ++i) 435 ; 436 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 437 #pragma omp simd linear(x : 1, y, z : 1) 438 for (i = 0; i < 16; ++i) 439 ; 440 441 // expected-note@+2 {{defined as linear}} 442 // expected-error@+1 {{linear variable cannot be linear}} 443 #pragma omp simd linear(x) linear(x) 444 for (i = 0; i < 16; ++i) 445 ; 446 447 // expected-note@+2 {{defined as private}} 448 // expected-error@+1 {{private variable cannot be linear}} 449 #pragma omp simd private(x) linear(x) 450 for (i = 0; i < 16; ++i) 451 ; 452 453 // expected-note@+2 {{defined as linear}} 454 // expected-error@+1 {{linear variable cannot be private}} 455 #pragma omp simd linear(x) private(x) 456 for (i = 0; i < 16; ++i) 457 ; 458 459 // expected-warning@+1 {{zero linear step (x and other variables in clause should probably be const)}} 460 #pragma omp simd linear(x, y : 0) 461 for (i = 0; i < 16; ++i) 462 ; 463 464 // expected-note@+2 {{defined as linear}} 465 // expected-error@+1 {{linear variable cannot be lastprivate}} 466 #pragma omp simd linear(x) lastprivate(x) 467 for (i = 0; i < 16; ++i) 468 ; 469 470 // expected-note@+2 {{defined as lastprivate}} 471 // expected-error@+1 {{lastprivate variable cannot be linear}} 472 #pragma omp simd lastprivate(x) linear(x) 473 for (i = 0; i < 16; ++i) 474 ; 475 } 476 477 void test_aligned() { 478 int i; 479 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 480 #pragma omp simd aligned( 481 for (i = 0; i < 16; ++i) 482 ; 483 // expected-error@+2 {{expected expression}} 484 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 485 #pragma omp simd aligned(, 486 for (i = 0; i < 16; ++i) 487 ; 488 // expected-error@+2 {{expected expression}} 489 // expected-error@+1 {{expected expression}} 490 #pragma omp simd aligned(, ) 491 for (i = 0; i < 16; ++i) 492 ; 493 // expected-error@+1 {{expected expression}} 494 #pragma omp simd aligned() 495 for (i = 0; i < 16; ++i) 496 ; 497 // expected-error@+1 {{expected expression}} 498 #pragma omp simd aligned(int) 499 for (i = 0; i < 16; ++i) 500 ; 501 // expected-error@+1 {{expected variable name}} 502 #pragma omp simd aligned(0) 503 for (i = 0; i < 16; ++i) 504 ; 505 // expected-error@+1 {{use of undeclared identifier 'x'}} 506 #pragma omp simd aligned(x) 507 for (i = 0; i < 16; ++i) 508 ; 509 // expected-error@+2 {{use of undeclared identifier 'x'}} 510 // expected-error@+1 {{use of undeclared identifier 'y'}} 511 #pragma omp simd aligned(x, y) 512 for (i = 0; i < 16; ++i) 513 ; 514 // expected-error@+3 {{use of undeclared identifier 'x'}} 515 // expected-error@+2 {{use of undeclared identifier 'y'}} 516 // expected-error@+1 {{use of undeclared identifier 'z'}} 517 #pragma omp simd aligned(x, y, z) 518 for (i = 0; i < 16; ++i) 519 ; 520 521 int *x, y, z[25]; // expected-note 4 {{'y' defined here}} 522 #pragma omp simd aligned(x) 523 for (i = 0; i < 16; ++i) 524 ; 525 #pragma omp simd aligned(z) 526 for (i = 0; i < 16; ++i) 527 ; 528 // expected-error@+1 {{expected expression}} 529 #pragma omp simd aligned(x :) 530 for (i = 0; i < 16; ++i) 531 ; 532 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 533 #pragma omp simd aligned(x :, ) 534 for (i = 0; i < 16; ++i) 535 ; 536 #pragma omp simd aligned(x : 1) 537 for (i = 0; i < 16; ++i) 538 ; 539 #pragma omp simd aligned(x : 2 * 2) 540 for (i = 0; i < 16; ++i) 541 ; 542 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 543 #pragma omp simd aligned(x : 1, y) 544 for (i = 0; i < 16; ++i) 545 ; 546 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 547 #pragma omp simd aligned(x : 1, y, z : 1) 548 for (i = 0; i < 16; ++i) 549 ; 550 551 // expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}} 552 #pragma omp simd aligned(x, y) 553 for (i = 0; i < 16; ++i) 554 ; 555 // expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}} 556 #pragma omp simd aligned(x, y, z) 557 for (i = 0; i < 16; ++i) 558 ; 559 560 // expected-note@+2 {{defined as aligned}} 561 // expected-error@+1 {{a variable cannot appear in more than one aligned clause}} 562 #pragma omp simd aligned(x) aligned(z, x) 563 for (i = 0; i < 16; ++i) 564 ; 565 566 // expected-note@+3 {{defined as aligned}} 567 // expected-error@+2 {{a variable cannot appear in more than one aligned clause}} 568 // expected-error@+1 2 {{argument of aligned clause should be array or pointer, not 'int'}} 569 #pragma omp simd aligned(x, y, z) aligned(y, z) 570 for (i = 0; i < 16; ++i) 571 ; 572 } 573 574 void test_private() { 575 int i; 576 // expected-error@+2 {{expected expression}} 577 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 578 #pragma omp simd private( 579 for (i = 0; i < 16; ++i) 580 ; 581 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}} 582 // expected-error@+1 2 {{expected expression}} 583 #pragma omp simd private(, 584 for (i = 0; i < 16; ++i) 585 ; 586 // expected-error@+1 2 {{expected expression}} 587 #pragma omp simd private(, ) 588 for (i = 0; i < 16; ++i) 589 ; 590 // expected-error@+1 {{expected expression}} 591 #pragma omp simd private() 592 for (i = 0; i < 16; ++i) 593 ; 594 // expected-error@+1 {{expected expression}} 595 #pragma omp simd private(int) 596 for (i = 0; i < 16; ++i) 597 ; 598 // expected-error@+1 {{expected variable name}} 599 #pragma omp simd private(0) 600 for (i = 0; i < 16; ++i) 601 ; 602 603 int x, y, z; 604 #pragma omp simd private(x) 605 for (i = 0; i < 16; ++i) 606 ; 607 #pragma omp simd private(x, y) 608 for (i = 0; i < 16; ++i) 609 ; 610 #pragma omp simd private(x, y, z) 611 for (i = 0; i < 16; ++i) { 612 x = y * i + z; 613 } 614 } 615 616 void test_firstprivate() { 617 int i; 618 // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}} 619 // expected-error@+2 {{unexpected OpenMP clause 'firstprivate' in directive '#pragma omp simd'}} 620 // expected-error@+1 {{expected expression}} 621 #pragma omp simd firstprivate( 622 for (i = 0; i < 16; ++i) 623 ; 624 } 625 626 void test_lastprivate() { 627 int i; 628 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}} 629 // expected-error@+1 {{expected expression}} 630 #pragma omp simd lastprivate( 631 for (i = 0; i < 16; ++i) 632 ; 633 634 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}} 635 // expected-error@+1 2 {{expected expression}} 636 #pragma omp simd lastprivate(, 637 for (i = 0; i < 16; ++i) 638 ; 639 // expected-error@+1 2 {{expected expression}} 640 #pragma omp simd lastprivate(, ) 641 for (i = 0; i < 16; ++i) 642 ; 643 // expected-error@+1 {{expected expression}} 644 #pragma omp simd lastprivate() 645 for (i = 0; i < 16; ++i) 646 ; 647 // expected-error@+1 {{expected expression}} 648 #pragma omp simd lastprivate(int) 649 for (i = 0; i < 16; ++i) 650 ; 651 // expected-error@+1 {{expected variable name}} 652 #pragma omp simd lastprivate(0) 653 for (i = 0; i < 16; ++i) 654 ; 655 656 int x, y, z; 657 #pragma omp simd lastprivate(x) 658 for (i = 0; i < 16; ++i) 659 ; 660 #pragma omp simd lastprivate(x, y) 661 for (i = 0; i < 16; ++i) 662 ; 663 #pragma omp simd lastprivate(x, y, z) 664 for (i = 0; i < 16; ++i) 665 ; 666 } 667 668 void test_reduction() { 669 int i, x, y; 670 // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}} 671 // expected-error@+2 {{expected identifier}} 672 // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}} 673 #pragma omp simd reduction( 674 for (i = 0; i < 16; ++i) 675 ; 676 // expected-error@+2 {{expected identifier}} 677 // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}} 678 #pragma omp simd reduction() 679 for (i = 0; i < 16; ++i) 680 ; 681 // expected-error@+2 {{expected expression}} 682 // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}} 683 #pragma omp simd reduction(x) 684 for (i = 0; i < 16; ++i) 685 ; 686 // expected-error@+1 {{expected identifier}} 687 #pragma omp simd reduction( : x) 688 for (i = 0; i < 16; ++i) 689 ; 690 // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}} 691 // expected-error@+2 {{expected identifier}} 692 // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}} 693 #pragma omp simd reduction(, 694 for (i = 0; i < 16; ++i) 695 ; 696 // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}} 697 // expected-error@+2 {{expected expression}} 698 // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}} 699 #pragma omp simd reduction(+ 700 for (i = 0; i < 16; ++i) 701 ; 702 703 // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}} 704 // 705 // expected-error@+1 {{expected expression}} 706 #pragma omp simd reduction(+: 707 for (i = 0; i < 16; ++i) 708 ; 709 // expected-error@+1 {{expected expression}} 710 #pragma omp simd reduction(+ :) 711 for (i = 0; i < 16; ++i) 712 ; 713 // expected-error@+1 {{expected expression}} 714 #pragma omp simd reduction(+ :, y) 715 for (i = 0; i < 16; ++i) 716 ; 717 // expected-error@+1 {{expected expression}} 718 #pragma omp simd reduction(+ : x, + : y) 719 for (i = 0; i < 16; ++i) 720 ; 721 // expected-error@+1 {{expected identifier}} 722 #pragma omp simd reduction(% : x) 723 for (i = 0; i < 16; ++i) 724 ; 725 726 #pragma omp simd reduction(+ : x) 727 for (i = 0; i < 16; ++i) 728 ; 729 #pragma omp simd reduction(* : x) 730 for (i = 0; i < 16; ++i) 731 ; 732 #pragma omp simd reduction(- : x) 733 for (i = 0; i < 16; ++i) 734 ; 735 #pragma omp simd reduction(& : x) 736 for (i = 0; i < 16; ++i) 737 ; 738 #pragma omp simd reduction(| : x) 739 for (i = 0; i < 16; ++i) 740 ; 741 #pragma omp simd reduction(^ : x) 742 for (i = 0; i < 16; ++i) 743 ; 744 #pragma omp simd reduction(&& : x) 745 for (i = 0; i < 16; ++i) 746 ; 747 #pragma omp simd reduction(|| : x) 748 for (i = 0; i < 16; ++i) 749 ; 750 #pragma omp simd reduction(max : x) 751 for (i = 0; i < 16; ++i) 752 ; 753 #pragma omp simd reduction(min : x) 754 for (i = 0; i < 16; ++i) 755 ; 756 struct X { 757 int x; 758 }; 759 struct X X; 760 // expected-error@+1 {{expected variable name}} 761 #pragma omp simd reduction(+ : X.x) 762 for (i = 0; i < 16; ++i) 763 ; 764 // expected-error@+1 {{expected variable name}} 765 #pragma omp simd reduction(+ : x + x) 766 for (i = 0; i < 16; ++i) 767 ; 768 } 769 770 void test_loop_messages() { 771 float a[100], b[100], c[100]; 772 // expected-error@+2 {{variable must be of integer or pointer type}} 773 #pragma omp simd 774 for (float fi = 0; fi < 10.0; fi++) { 775 c[(int)fi] = a[(int)fi] + b[(int)fi]; 776 } 777 // expected-error@+2 {{variable must be of integer or pointer type}} 778 #pragma omp simd 779 for (double fi = 0; fi < 10.0; fi++) { 780 c[(int)fi] = a[(int)fi] + b[(int)fi]; 781 } 782 } 783 784 void linear_modifiers(int argc) { 785 int f; 786 #pragma omp simd linear(f) 787 for (int k = 0; k < argc; ++k) ++k; 788 #pragma omp simd linear(val(f)) 789 for (int k = 0; k < argc; ++k) ++k; 790 #pragma omp simd linear(uval(f)) // expected-error {{expected 'val' modifier}} 791 for (int k = 0; k < argc; ++k) ++k; 792 #pragma omp simd linear(ref(f)) // expected-error {{expected 'val' modifier}} 793 for (int k = 0; k < argc; ++k) ++k; 794 #pragma omp simd linear(foo(f)) // expected-error {{expected 'val' modifier}} 795 for (int k = 0; k < argc; ++k) ++k; 796 } 797 798