1 // RUN: %clang_cc1 -fsyntax-only -fopenmp=libiomp5 -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 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 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 positive integer value}} 164 #pragma omp simd safelen(5 - 5) 165 for (i = 0; i < 16; ++i) 166 ; 167 } 168 169 void test_collapse() { 170 int i; 171 // expected-error@+1 {{expected '('}} 172 #pragma omp simd collapse 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 collapse( 177 for (i = 0; i < 16; ++i) 178 ; 179 // expected-error@+1 {{expected expression}} 180 #pragma omp simd collapse() 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 collapse(, 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 collapse(, ) 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 collapse 4) 194 for (i = 0; i < 16; ++i) 195 ; 196 // expected-error@+2 {{expected ')'}} 197 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} 198 #pragma omp simd collapse(4 199 for (i = 0; i < 16; ++i) 200 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}} 201 // expected-error@+2 {{expected ')'}} 202 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} 203 #pragma omp simd collapse(4, 204 for (i = 0; i < 16; ++i) 205 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}} 206 // expected-error@+2 {{expected ')'}} 207 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} 208 #pragma omp simd collapse(4, ) 209 for (i = 0; i < 16; ++i) 210 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}} 211 // xxpected-error@+1 {{expected expression}} expected-note@+1 {{as specified in 'collapse' clause}} 212 #pragma omp simd collapse(4) 213 for (i = 0; i < 16; ++i) 214 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}} 215 // expected-error@+2 {{expected ')'}} 216 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} 217 #pragma omp simd collapse(4 4) 218 for (i = 0; i < 16; ++i) 219 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}} 220 // expected-error@+2 {{expected ')'}} 221 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} 222 #pragma omp simd collapse(4, , 4) 223 for (i = 0; i < 16; ++i) 224 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}} 225 #pragma omp simd collapse(4) 226 for (int i1 = 0; i1 < 16; ++i1) 227 for (int i2 = 0; i2 < 16; ++i2) 228 for (int i3 = 0; i3 < 16; ++i3) 229 for (int i4 = 0; i4 < 16; ++i4) 230 foo(); 231 // expected-error@+2 {{expected ')'}} 232 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}} 233 #pragma omp simd collapse(4, 8) 234 for (i = 0; i < 16; ++i) 235 ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}} 236 // expected-error@+1 {{expression is not an integer constant expression}} 237 #pragma omp simd collapse(2.5) 238 for (i = 0; i < 16; ++i) 239 ; 240 // expected-error@+1 {{expression is not an integer constant expression}} 241 #pragma omp simd collapse(foo()) 242 for (i = 0; i < 16; ++i) 243 ; 244 // expected-error@+1 {{argument to 'collapse' clause must be a positive integer value}} 245 #pragma omp simd collapse(-5) 246 for (i = 0; i < 16; ++i) 247 ; 248 // expected-error@+1 {{argument to 'collapse' clause must be a positive integer value}} 249 #pragma omp simd collapse(0) 250 for (i = 0; i < 16; ++i) 251 ; 252 // expected-error@+1 {{argument to 'collapse' clause must be a positive integer value}} 253 #pragma omp simd collapse(5 - 5) 254 for (i = 0; i < 16; ++i) 255 ; 256 // expected-note@+2 {{defined as reduction}} 257 #pragma omp parallel 258 #pragma omp simd collapse(2) reduction(+ : i) 259 for (i = 0; i < 16; ++i) 260 // 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?}} 261 for (int j = 0; j < 16; ++j) 262 // expected-error@+3 {{reduction variable must be shared}} 263 // expected-error@+2 {{private variable cannot be reduction}} 264 // expected-error@+1 {{OpenMP constructs may not be nested inside a simd region}} 265 #pragma omp for reduction(+ : i, j) 266 for (int k = 0; k < 16; ++k) 267 i += j; 268 } 269 270 void test_linear() { 271 int i; 272 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 273 #pragma omp simd linear( 274 for (i = 0; i < 16; ++i) 275 ; 276 // expected-error@+2 {{expected expression}} 277 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 278 #pragma omp simd linear(, 279 for (i = 0; i < 16; ++i) 280 ; 281 // expected-error@+2 {{expected expression}} 282 // expected-error@+1 {{expected expression}} 283 #pragma omp simd linear(, ) 284 for (i = 0; i < 16; ++i) 285 ; 286 // expected-error@+1 {{expected expression}} 287 #pragma omp simd linear() 288 for (i = 0; i < 16; ++i) 289 ; 290 // expected-error@+1 {{expected expression}} 291 #pragma omp simd linear(int) 292 for (i = 0; i < 16; ++i) 293 ; 294 // expected-error@+1 {{expected variable name}} 295 #pragma omp simd linear(0) 296 for (i = 0; i < 16; ++i) 297 ; 298 // expected-error@+1 {{use of undeclared identifier 'x'}} 299 #pragma omp simd linear(x) 300 for (i = 0; i < 16; ++i) 301 ; 302 // expected-error@+2 {{use of undeclared identifier 'x'}} 303 // expected-error@+1 {{use of undeclared identifier 'y'}} 304 #pragma omp simd linear(x, y) 305 for (i = 0; i < 16; ++i) 306 ; 307 // expected-error@+3 {{use of undeclared identifier 'x'}} 308 // expected-error@+2 {{use of undeclared identifier 'y'}} 309 // expected-error@+1 {{use of undeclared identifier 'z'}} 310 #pragma omp simd linear(x, y, z) 311 for (i = 0; i < 16; ++i) 312 ; 313 314 int x, y; 315 // expected-error@+1 {{expected expression}} 316 #pragma omp simd linear(x :) 317 for (i = 0; i < 16; ++i) 318 ; 319 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 320 #pragma omp simd linear(x :, ) 321 for (i = 0; i < 16; ++i) 322 ; 323 #pragma omp simd linear(x : 1) 324 for (i = 0; i < 16; ++i) 325 ; 326 #pragma omp simd linear(x : 2 * 2) 327 for (i = 0; i < 16; ++i) 328 ; 329 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 330 #pragma omp simd linear(x : 1, y) 331 for (i = 0; i < 16; ++i) 332 ; 333 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 334 #pragma omp simd linear(x : 1, y, z : 1) 335 for (i = 0; i < 16; ++i) 336 ; 337 338 // expected-note@+2 {{defined as linear}} 339 // expected-error@+1 {{linear variable cannot be linear}} 340 #pragma omp simd linear(x) linear(x) 341 for (i = 0; i < 16; ++i) 342 ; 343 344 // expected-note@+2 {{defined as private}} 345 // expected-error@+1 {{private variable cannot be linear}} 346 #pragma omp simd private(x) linear(x) 347 for (i = 0; i < 16; ++i) 348 ; 349 350 // expected-note@+2 {{defined as linear}} 351 // expected-error@+1 {{linear variable cannot be private}} 352 #pragma omp simd linear(x) private(x) 353 for (i = 0; i < 16; ++i) 354 ; 355 356 // expected-warning@+1 {{zero linear step (x and other variables in clause should probably be const)}} 357 #pragma omp simd linear(x, y : 0) 358 for (i = 0; i < 16; ++i) 359 ; 360 361 // expected-note@+2 {{defined as linear}} 362 // expected-error@+1 {{linear variable cannot be lastprivate}} 363 #pragma omp simd linear(x) lastprivate(x) 364 for (i = 0; i < 16; ++i) 365 ; 366 367 // expected-note@+2 {{defined as lastprivate}} 368 // expected-error@+1 {{lastprivate variable cannot be linear}} 369 #pragma omp simd lastprivate(x) linear(x) 370 for (i = 0; i < 16; ++i) 371 ; 372 } 373 374 void test_aligned() { 375 int i; 376 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 377 #pragma omp simd aligned( 378 for (i = 0; i < 16; ++i) 379 ; 380 // expected-error@+2 {{expected expression}} 381 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 382 #pragma omp simd aligned(, 383 for (i = 0; i < 16; ++i) 384 ; 385 // expected-error@+2 {{expected expression}} 386 // expected-error@+1 {{expected expression}} 387 #pragma omp simd aligned(, ) 388 for (i = 0; i < 16; ++i) 389 ; 390 // expected-error@+1 {{expected expression}} 391 #pragma omp simd aligned() 392 for (i = 0; i < 16; ++i) 393 ; 394 // expected-error@+1 {{expected expression}} 395 #pragma omp simd aligned(int) 396 for (i = 0; i < 16; ++i) 397 ; 398 // expected-error@+1 {{expected variable name}} 399 #pragma omp simd aligned(0) 400 for (i = 0; i < 16; ++i) 401 ; 402 // expected-error@+1 {{use of undeclared identifier 'x'}} 403 #pragma omp simd aligned(x) 404 for (i = 0; i < 16; ++i) 405 ; 406 // expected-error@+2 {{use of undeclared identifier 'x'}} 407 // expected-error@+1 {{use of undeclared identifier 'y'}} 408 #pragma omp simd aligned(x, y) 409 for (i = 0; i < 16; ++i) 410 ; 411 // expected-error@+3 {{use of undeclared identifier 'x'}} 412 // expected-error@+2 {{use of undeclared identifier 'y'}} 413 // expected-error@+1 {{use of undeclared identifier 'z'}} 414 #pragma omp simd aligned(x, y, z) 415 for (i = 0; i < 16; ++i) 416 ; 417 418 int *x, y, z[25]; // expected-note 4 {{'y' defined here}} 419 #pragma omp simd aligned(x) 420 for (i = 0; i < 16; ++i) 421 ; 422 #pragma omp simd aligned(z) 423 for (i = 0; i < 16; ++i) 424 ; 425 // expected-error@+1 {{expected expression}} 426 #pragma omp simd aligned(x :) 427 for (i = 0; i < 16; ++i) 428 ; 429 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 430 #pragma omp simd aligned(x :, ) 431 for (i = 0; i < 16; ++i) 432 ; 433 #pragma omp simd aligned(x : 1) 434 for (i = 0; i < 16; ++i) 435 ; 436 #pragma omp simd aligned(x : 2 * 2) 437 for (i = 0; i < 16; ++i) 438 ; 439 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 440 #pragma omp simd aligned(x : 1, y) 441 for (i = 0; i < 16; ++i) 442 ; 443 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 444 #pragma omp simd aligned(x : 1, y, z : 1) 445 for (i = 0; i < 16; ++i) 446 ; 447 448 // expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}} 449 #pragma omp simd aligned(x, y) 450 for (i = 0; i < 16; ++i) 451 ; 452 // expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}} 453 #pragma omp simd aligned(x, y, z) 454 for (i = 0; i < 16; ++i) 455 ; 456 457 // expected-note@+2 {{defined as aligned}} 458 // expected-error@+1 {{a variable cannot appear in more than one aligned clause}} 459 #pragma omp simd aligned(x) aligned(z, x) 460 for (i = 0; i < 16; ++i) 461 ; 462 463 // expected-note@+3 {{defined as aligned}} 464 // expected-error@+2 {{a variable cannot appear in more than one aligned clause}} 465 // expected-error@+1 2 {{argument of aligned clause should be array or pointer, not 'int'}} 466 #pragma omp simd aligned(x, y, z) aligned(y, z) 467 for (i = 0; i < 16; ++i) 468 ; 469 } 470 471 void test_private() { 472 int i; 473 // expected-error@+2 {{expected expression}} 474 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} 475 #pragma omp simd private( 476 for (i = 0; i < 16; ++i) 477 ; 478 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}} 479 // expected-error@+1 2 {{expected expression}} 480 #pragma omp simd private(, 481 for (i = 0; i < 16; ++i) 482 ; 483 // expected-error@+1 2 {{expected expression}} 484 #pragma omp simd private(, ) 485 for (i = 0; i < 16; ++i) 486 ; 487 // expected-error@+1 {{expected expression}} 488 #pragma omp simd private() 489 for (i = 0; i < 16; ++i) 490 ; 491 // expected-error@+1 {{expected expression}} 492 #pragma omp simd private(int) 493 for (i = 0; i < 16; ++i) 494 ; 495 // expected-error@+1 {{expected variable name}} 496 #pragma omp simd private(0) 497 for (i = 0; i < 16; ++i) 498 ; 499 500 int x, y, z; 501 #pragma omp simd private(x) 502 for (i = 0; i < 16; ++i) 503 ; 504 #pragma omp simd private(x, y) 505 for (i = 0; i < 16; ++i) 506 ; 507 #pragma omp simd private(x, y, z) 508 for (i = 0; i < 16; ++i) { 509 x = y * i + z; 510 } 511 } 512 513 void test_firstprivate() { 514 int i; 515 // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}} 516 // expected-error@+2 {{unexpected OpenMP clause 'firstprivate' in directive '#pragma omp simd'}} 517 // expected-error@+1 {{expected expression}} 518 #pragma omp simd firstprivate( 519 for (i = 0; i < 16; ++i) 520 ; 521 } 522 523 void test_lastprivate() { 524 int i; 525 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}} 526 // expected-error@+1 {{expected expression}} 527 #pragma omp simd lastprivate( 528 for (i = 0; i < 16; ++i) 529 ; 530 531 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}} 532 // expected-error@+1 2 {{expected expression}} 533 #pragma omp simd lastprivate(, 534 for (i = 0; i < 16; ++i) 535 ; 536 // expected-error@+1 2 {{expected expression}} 537 #pragma omp simd lastprivate(, ) 538 for (i = 0; i < 16; ++i) 539 ; 540 // expected-error@+1 {{expected expression}} 541 #pragma omp simd lastprivate() 542 for (i = 0; i < 16; ++i) 543 ; 544 // expected-error@+1 {{expected expression}} 545 #pragma omp simd lastprivate(int) 546 for (i = 0; i < 16; ++i) 547 ; 548 // expected-error@+1 {{expected variable name}} 549 #pragma omp simd lastprivate(0) 550 for (i = 0; i < 16; ++i) 551 ; 552 553 int x, y, z; 554 #pragma omp simd lastprivate(x) 555 for (i = 0; i < 16; ++i) 556 ; 557 #pragma omp simd lastprivate(x, y) 558 for (i = 0; i < 16; ++i) 559 ; 560 #pragma omp simd lastprivate(x, y, z) 561 for (i = 0; i < 16; ++i) 562 ; 563 } 564 565 void test_reduction() { 566 int i, x, y; 567 // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}} 568 // expected-error@+2 {{expected identifier}} 569 // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}} 570 #pragma omp simd reduction( 571 for (i = 0; i < 16; ++i) 572 ; 573 // expected-error@+2 {{expected identifier}} 574 // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}} 575 #pragma omp simd reduction() 576 for (i = 0; i < 16; ++i) 577 ; 578 // expected-error@+2 {{expected expression}} 579 // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}} 580 #pragma omp simd reduction(x) 581 for (i = 0; i < 16; ++i) 582 ; 583 // expected-error@+1 {{expected identifier}} 584 #pragma omp simd reduction( : x) 585 for (i = 0; i < 16; ++i) 586 ; 587 // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}} 588 // expected-error@+2 {{expected identifier}} 589 // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}} 590 #pragma omp simd reduction(, 591 for (i = 0; i < 16; ++i) 592 ; 593 // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}} 594 // expected-error@+2 {{expected expression}} 595 // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}} 596 #pragma omp simd reduction(+ 597 for (i = 0; i < 16; ++i) 598 ; 599 600 // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}} 601 // 602 // expected-error@+1 {{expected expression}} 603 #pragma omp simd reduction(+: 604 for (i = 0; i < 16; ++i) 605 ; 606 // expected-error@+1 {{expected expression}} 607 #pragma omp simd reduction(+ :) 608 for (i = 0; i < 16; ++i) 609 ; 610 // expected-error@+1 {{expected expression}} 611 #pragma omp simd reduction(+ :, y) 612 for (i = 0; i < 16; ++i) 613 ; 614 // expected-error@+1 {{expected expression}} 615 #pragma omp simd reduction(+ : x, + : y) 616 for (i = 0; i < 16; ++i) 617 ; 618 // expected-error@+1 {{expected identifier}} 619 #pragma omp simd reduction(% : x) 620 for (i = 0; i < 16; ++i) 621 ; 622 623 #pragma omp simd reduction(+ : x) 624 for (i = 0; i < 16; ++i) 625 ; 626 #pragma omp simd reduction(* : x) 627 for (i = 0; i < 16; ++i) 628 ; 629 #pragma omp simd reduction(- : x) 630 for (i = 0; i < 16; ++i) 631 ; 632 #pragma omp simd reduction(& : x) 633 for (i = 0; i < 16; ++i) 634 ; 635 #pragma omp simd reduction(| : x) 636 for (i = 0; i < 16; ++i) 637 ; 638 #pragma omp simd reduction(^ : x) 639 for (i = 0; i < 16; ++i) 640 ; 641 #pragma omp simd reduction(&& : x) 642 for (i = 0; i < 16; ++i) 643 ; 644 #pragma omp simd reduction(|| : x) 645 for (i = 0; i < 16; ++i) 646 ; 647 #pragma omp simd reduction(max : x) 648 for (i = 0; i < 16; ++i) 649 ; 650 #pragma omp simd reduction(min : x) 651 for (i = 0; i < 16; ++i) 652 ; 653 struct X { 654 int x; 655 }; 656 struct X X; 657 // expected-error@+1 {{expected variable name}} 658 #pragma omp simd reduction(+ : X.x) 659 for (i = 0; i < 16; ++i) 660 ; 661 // expected-error@+1 {{expected variable name}} 662 #pragma omp simd reduction(+ : x + x) 663 for (i = 0; i < 16; ++i) 664 ; 665 } 666 667 void test_loop_messages() { 668 float a[100], b[100], c[100]; 669 // expected-error@+2 {{variable must be of integer or pointer type}} 670 #pragma omp simd 671 for (float fi = 0; fi < 10.0; fi++) { 672 c[(int)fi] = a[(int)fi] + b[(int)fi]; 673 } 674 // expected-error@+2 {{variable must be of integer or pointer type}} 675 #pragma omp simd 676 for (double fi = 0; fi < 10.0; fi++) { 677 c[(int)fi] = a[(int)fi] + b[(int)fi]; 678 } 679 } 680 681