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