Home | History | Annotate | Download | only in OpenMP
      1 // RUN: %clang_cc1 -fsyntax-only -fopenmp -verify %s
      2 
      3 // expected-error@+1 {{unexpected OpenMP directive '#pragma omp distribute simd'}}
      4 #pragma omp distribute simd
      5 
      6 // expected-error@+1 {{unexpected OpenMP directive '#pragma omp distribute simd'}}
      7 #pragma omp distribute simd foo
      8 
      9 // expected-error@+1 {{unexpected OpenMP directive '#pragma omp distribute simd'}}
     10 #pragma omp distribute simd safelen(4)
     11 
     12 void test_no_clause() {
     13   int i;
     14 #pragma omp target
     15 #pragma omp teams
     16 #pragma omp distribute simd
     17   for (i = 0; i < 16; ++i)
     18     ;
     19 
     20 #pragma omp target
     21 #pragma omp teams
     22 // expected-error@+2 {{statement after '#pragma omp distribute simd' must be a for loop}}
     23 #pragma omp distribute simd
     24   ++i;
     25 }
     26 
     27 void test_branch_protected_scope() {
     28   int i = 0;
     29 L1:
     30   ++i;
     31 
     32   int x[24];
     33 
     34 #pragma omp target
     35 #pragma omp teams
     36 #pragma omp distribute simd
     37   for (i = 0; i < 16; ++i) {
     38     if (i == 5)
     39       goto L1; // expected-error {{use of undeclared label 'L1'}}
     40     else if (i == 6)
     41       return; // expected-error {{cannot return from OpenMP region}}
     42     else if (i == 7)
     43       goto L2;
     44     else if (i == 8) {
     45     L2:
     46       x[i]++;
     47     }
     48   }
     49 
     50   if (x[0] == 0)
     51     goto L2; // expected-error {{use of undeclared label 'L2'}}
     52   else if (x[1] == 1)
     53     goto L1;
     54 }
     55 
     56 void test_invalid_clause() {
     57   int i;
     58 #pragma omp target
     59 #pragma omp teams
     60 // expected-warning@+1 {{extra tokens at the end of '#pragma omp distribute simd' are ignored}}
     61 #pragma omp distribute simd foo bar
     62   for (i = 0; i < 16; ++i)
     63     ;
     64 }
     65 
     66 void test_non_identifiers() {
     67   int i, x;
     68 
     69 #pragma omp target
     70 #pragma omp teams
     71 // expected-warning@+1 {{extra tokens at the end of '#pragma omp distribute simd' are ignored}}
     72 #pragma omp distribute simd;
     73   for (i = 0; i < 16; ++i)
     74     ;
     75 
     76 #pragma omp target
     77 #pragma omp teams
     78 // expected-warning@+1 {{extra tokens at the end of '#pragma omp distribute simd' are ignored}}
     79 #pragma omp distribute simd private(x);
     80   for (i = 0; i < 16; ++i)
     81     ;
     82 
     83 #pragma omp target
     84 #pragma omp teams
     85 // expected-warning@+1 {{extra tokens at the end of '#pragma omp distribute simd' are ignored}}
     86 #pragma omp distribute simd, private(x);
     87   for (i = 0; i < 16; ++i)
     88     ;
     89 }
     90 
     91 extern int foo();
     92 void test_safelen() {
     93   int i;
     94 #pragma omp target
     95 #pragma omp teams
     96 // expected-error@+1 {{expected '('}}
     97 #pragma omp distribute simd safelen
     98   for (i = 0; i < 16; ++i)
     99     ;
    100 #pragma omp target
    101 #pragma omp teams
    102 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
    103 #pragma omp distribute simd safelen(
    104   for (i = 0; i < 16; ++i)
    105     ;
    106 #pragma omp target
    107 #pragma omp teams
    108 // expected-error@+1 {{expected expression}}
    109 #pragma omp distribute simd safelen()
    110   for (i = 0; i < 16; ++i)
    111     ;
    112 #pragma omp target
    113 #pragma omp teams
    114 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
    115 #pragma omp distribute simd safelen(,
    116   for (i = 0; i < 16; ++i)
    117     ;
    118 #pragma omp target
    119 #pragma omp teams
    120 // expected-error@+1 {{expected expression}}  expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
    121 #pragma omp distribute simd safelen(, )
    122   for (i = 0; i < 16; ++i)
    123     ;
    124 #pragma omp target
    125 #pragma omp teams
    126 // expected-warning@+2 {{extra tokens at the end of '#pragma omp distribute simd' are ignored}}
    127 // expected-error@+1 {{expected '('}}
    128 #pragma omp distribute simd safelen 4)
    129   for (i = 0; i < 16; ++i)
    130     ;
    131 #pragma omp target
    132 #pragma omp teams
    133 // expected-error@+2 {{expected ')'}}
    134 // expected-note@+1 {{to match this '('}}
    135 #pragma omp distribute simd safelen(4
    136   for (i = 0; i < 16; ++i)
    137     ;
    138 #pragma omp target
    139 #pragma omp teams
    140 // expected-error@+2 {{expected ')'}}
    141 // expected-note@+1 {{to match this '('}}
    142 #pragma omp distribute simd safelen(4,
    143   for (i = 0; i < 16; ++i)
    144     ;
    145 #pragma omp target
    146 #pragma omp teams
    147 // expected-error@+2 {{expected ')'}}
    148 // expected-note@+1 {{to match this '('}}
    149 #pragma omp distribute simd safelen(4, )
    150   for (i = 0; i < 16; ++i)
    151     ;
    152 #pragma omp target
    153 #pragma omp teams
    154 // xxpected-error@+1 {{expected expression}}
    155 #pragma omp distribute simd safelen(4)
    156   for (i = 0; i < 16; ++i)
    157     ;
    158 #pragma omp target
    159 #pragma omp teams
    160 // expected-error@+2 {{expected ')'}}
    161 // expected-note@+1 {{to match this '('}}
    162 #pragma omp distribute simd safelen(4 4)
    163   for (i = 0; i < 16; ++i)
    164     ;
    165 #pragma omp target
    166 #pragma omp teams
    167 // expected-error@+2 {{expected ')'}}
    168 // expected-note@+1 {{to match this '('}}
    169 #pragma omp distribute simd safelen(4, , 4)
    170   for (i = 0; i < 16; ++i)
    171     ;
    172 #pragma omp target
    173 #pragma omp teams
    174 #pragma omp distribute simd safelen(4)
    175   for (i = 0; i < 16; ++i)
    176     ;
    177 #pragma omp target
    178 #pragma omp teams
    179 // expected-error@+2 {{expected ')'}}
    180 // expected-note@+1 {{to match this '('}}
    181 #pragma omp distribute simd safelen(4, 8)
    182   for (i = 0; i < 16; ++i)
    183     ;
    184 #pragma omp target
    185 #pragma omp teams
    186 // expected-error@+1 {{expression is not an integer constant expression}}
    187 #pragma omp distribute simd safelen(2.5)
    188   for (i = 0; i < 16; ++i)
    189     ;
    190 #pragma omp target
    191 #pragma omp teams
    192 // expected-error@+1 {{expression is not an integer constant expression}}
    193 #pragma omp distribute simd safelen(foo())
    194   for (i = 0; i < 16; ++i)
    195     ;
    196 #pragma omp target
    197 #pragma omp teams
    198 // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
    199 #pragma omp distribute simd safelen(-5)
    200   for (i = 0; i < 16; ++i)
    201     ;
    202 #pragma omp target
    203 #pragma omp teams
    204 // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
    205 #pragma omp distribute simd safelen(0)
    206   for (i = 0; i < 16; ++i)
    207     ;
    208 #pragma omp target
    209 #pragma omp teams
    210 // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
    211 #pragma omp distribute simd safelen(5 - 5)
    212   for (i = 0; i < 16; ++i)
    213     ;
    214 }
    215 
    216 void test_simdlen() {
    217   int i;
    218 #pragma omp target
    219 #pragma omp teams
    220 // expected-error@+1 {{expected '('}}
    221 #pragma omp distribute simd simdlen
    222   for (i = 0; i < 16; ++i)
    223     ;
    224 #pragma omp target
    225 #pragma omp teams
    226 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
    227 #pragma omp distribute simd simdlen(
    228   for (i = 0; i < 16; ++i)
    229     ;
    230 #pragma omp target
    231 #pragma omp teams
    232 // expected-error@+1 {{expected expression}}
    233 #pragma omp distribute simd simdlen()
    234   for (i = 0; i < 16; ++i)
    235     ;
    236 #pragma omp target
    237 #pragma omp teams
    238 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
    239 #pragma omp distribute simd simdlen(,
    240   for (i = 0; i < 16; ++i)
    241     ;
    242 #pragma omp target
    243 #pragma omp teams
    244 // expected-error@+1 {{expected expression}}  expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
    245 #pragma omp distribute simd simdlen(, )
    246   for (i = 0; i < 16; ++i)
    247     ;
    248 #pragma omp target
    249 #pragma omp teams
    250 // expected-warning@+2 {{extra tokens at the end of '#pragma omp distribute simd' are ignored}}
    251 // expected-error@+1 {{expected '('}}
    252 #pragma omp distribute simd simdlen 4)
    253   for (i = 0; i < 16; ++i)
    254     ;
    255 #pragma omp target
    256 #pragma omp teams
    257 // expected-error@+2 {{expected ')'}}
    258 // expected-note@+1 {{to match this '('}}
    259 #pragma omp distribute simd simdlen(4
    260   for (i = 0; i < 16; ++i)
    261     ;
    262 #pragma omp target
    263 #pragma omp teams
    264 // expected-error@+2 {{expected ')'}}
    265 // expected-note@+1 {{to match this '('}}
    266 #pragma omp distribute simd simdlen(4,
    267   for (i = 0; i < 16; ++i)
    268     ;
    269 #pragma omp target
    270 #pragma omp teams
    271 // expected-error@+2 {{expected ')'}}
    272 // expected-note@+1 {{to match this '('}}
    273 #pragma omp distribute simd simdlen(4, )
    274   for (i = 0; i < 16; ++i)
    275     ;
    276 #pragma omp target
    277 #pragma omp teams
    278 #pragma omp distribute simd simdlen(4)
    279   for (i = 0; i < 16; ++i)
    280     ;
    281 #pragma omp target
    282 #pragma omp teams
    283 // expected-error@+2 {{expected ')'}}
    284 // expected-note@+1 {{to match this '('}}
    285 #pragma omp distribute simd simdlen(4 4)
    286   for (i = 0; i < 16; ++i)
    287     ;
    288 #pragma omp target
    289 #pragma omp teams
    290 // expected-error@+2 {{expected ')'}}
    291 // expected-note@+1 {{to match this '('}}
    292 #pragma omp distribute simd simdlen(4, , 4)
    293   for (i = 0; i < 16; ++i)
    294     ;
    295 #pragma omp target
    296 #pragma omp teams
    297 #pragma omp distribute simd simdlen(4)
    298   for (i = 0; i < 16; ++i)
    299     ;
    300 #pragma omp target
    301 #pragma omp teams
    302 // expected-error@+2 {{expected ')'}}
    303 // expected-note@+1 {{to match this '('}}
    304 #pragma omp distribute simd simdlen(4, 8)
    305   for (i = 0; i < 16; ++i)
    306     ;
    307 #pragma omp target
    308 #pragma omp teams
    309 // expected-error@+1 {{expression is not an integer constant expression}}
    310 #pragma omp distribute simd simdlen(2.5)
    311   for (i = 0; i < 16; ++i)
    312     ;
    313 #pragma omp target
    314 #pragma omp teams
    315 // expected-error@+1 {{expression is not an integer constant expression}}
    316 #pragma omp distribute simd simdlen(foo())
    317   for (i = 0; i < 16; ++i)
    318     ;
    319 #pragma omp target
    320 #pragma omp teams
    321 // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
    322 #pragma omp distribute simd simdlen(-5)
    323   for (i = 0; i < 16; ++i)
    324     ;
    325 #pragma omp target
    326 #pragma omp teams
    327 // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
    328 #pragma omp distribute simd simdlen(0)
    329   for (i = 0; i < 16; ++i)
    330     ;
    331 #pragma omp target
    332 #pragma omp teams
    333 // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
    334 #pragma omp distribute simd simdlen(5 - 5)
    335   for (i = 0; i < 16; ++i)
    336     ;
    337 }
    338 
    339 void test_collapse() {
    340   int i;
    341 #pragma omp target
    342 #pragma omp teams
    343 // expected-error@+1 {{expected '('}}
    344 #pragma omp distribute simd collapse
    345   for (i = 0; i < 16; ++i)
    346     ;
    347 #pragma omp target
    348 #pragma omp teams
    349 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
    350 #pragma omp distribute simd collapse(
    351   for (i = 0; i < 16; ++i)
    352     ;
    353 #pragma omp target
    354 #pragma omp teams
    355 // expected-error@+1 {{expected expression}}
    356 #pragma omp distribute simd collapse()
    357   for (i = 0; i < 16; ++i)
    358     ;
    359 #pragma omp target
    360 #pragma omp teams
    361 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
    362 #pragma omp distribute simd collapse(,
    363   for (i = 0; i < 16; ++i)
    364     ;
    365 #pragma omp target
    366 #pragma omp teams
    367 // expected-error@+1 {{expected expression}}  expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
    368 #pragma omp distribute simd collapse(, )
    369   for (i = 0; i < 16; ++i)
    370     ;
    371 #pragma omp target
    372 #pragma omp teams
    373 // expected-warning@+2 {{extra tokens at the end of '#pragma omp distribute simd' are ignored}}
    374 // expected-error@+1 {{expected '('}}
    375 #pragma omp distribute simd collapse 4)
    376   for (i = 0; i < 16; ++i)
    377     ;
    378 #pragma omp target
    379 #pragma omp teams
    380 // expected-error@+2 {{expected ')'}}
    381 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
    382 #pragma omp distribute simd collapse(4
    383   for (i = 0; i < 16; ++i)
    384     ; // expected-error {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
    385 #pragma omp target
    386 #pragma omp teams
    387 // expected-error@+2 {{expected ')'}}
    388 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
    389 #pragma omp distribute simd collapse(4,
    390   for (i = 0; i < 16; ++i)
    391     ; // expected-error {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
    392 #pragma omp target
    393 #pragma omp teams
    394 // expected-error@+2 {{expected ')'}}
    395 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
    396 #pragma omp distribute simd collapse(4, )
    397   for (i = 0; i < 16; ++i)
    398     ; // expected-error {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
    399 #pragma omp target
    400 #pragma omp teams
    401 // xxpected-error@+1 {{expected expression}} expected-note@+1 {{as specified in 'collapse' clause}}
    402 #pragma omp distribute simd collapse(4)
    403   for (i = 0; i < 16; ++i)
    404     ; // expected-error {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
    405 #pragma omp target
    406 #pragma omp teams
    407 // expected-error@+2 {{expected ')'}}
    408 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
    409 #pragma omp distribute simd collapse(4 4)
    410   for (i = 0; i < 16; ++i)
    411     ; // expected-error {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
    412 #pragma omp target
    413 #pragma omp teams
    414 // expected-error@+2 {{expected ')'}}
    415 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
    416 #pragma omp distribute simd collapse(4, , 4)
    417   for (i = 0; i < 16; ++i)
    418     ; // expected-error {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
    419 #pragma omp target
    420 #pragma omp teams
    421 #pragma omp distribute simd collapse(4)
    422   for (int i1 = 0; i1 < 16; ++i1)
    423     for (int i2 = 0; i2 < 16; ++i2)
    424       for (int i3 = 0; i3 < 16; ++i3)
    425         for (int i4 = 0; i4 < 16; ++i4)
    426           foo();
    427 #pragma omp target
    428 #pragma omp teams
    429 // expected-error@+2 {{expected ')'}}
    430 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
    431 #pragma omp distribute simd collapse(4, 8)
    432   for (i = 0; i < 16; ++i)
    433     ; // expected-error {{expected 4 for loops after '#pragma omp distribute simd', but found only 1}}
    434 #pragma omp target
    435 #pragma omp teams
    436 // expected-error@+1 {{expression is not an integer constant expression}}
    437 #pragma omp distribute simd collapse(2.5)
    438   for (i = 0; i < 16; ++i)
    439     ;
    440 #pragma omp target
    441 #pragma omp teams
    442 // expected-error@+1 {{expression is not an integer constant expression}}
    443 #pragma omp distribute simd collapse(foo())
    444   for (i = 0; i < 16; ++i)
    445     ;
    446 #pragma omp target
    447 #pragma omp teams
    448 // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
    449 #pragma omp distribute simd collapse(-5)
    450   for (i = 0; i < 16; ++i)
    451     ;
    452 #pragma omp target
    453 #pragma omp teams
    454 // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
    455 #pragma omp distribute simd collapse(0)
    456   for (i = 0; i < 16; ++i)
    457     ;
    458 #pragma omp target
    459 #pragma omp teams
    460 // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
    461 #pragma omp distribute simd collapse(5 - 5)
    462   for (i = 0; i < 16; ++i)
    463     ;
    464 // expected-note@+3 {{defined as reduction}}
    465 #pragma omp target
    466 #pragma omp teams
    467 #pragma omp distribute simd collapse(2) reduction(+ : i)
    468   for (i = 0; i < 16; ++i)
    469     // 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?}}
    470     for (int j = 0; j < 16; ++j)
    471 // expected-error@+2 2 {{reduction variable must be shared}}
    472 // expected-error@+1 {{OpenMP constructs may not be nested inside a simd region}}
    473 #pragma omp for reduction(+ : i, j)
    474       for (int k = 0; k < 16; ++k)
    475         i += j;
    476 
    477 #pragma omp target
    478 #pragma omp teams
    479   for (i = 0; i < 16; ++i)
    480     for (int j = 0; j < 16; ++j)
    481 #pragma omp distribute simd reduction(+ : i, j)
    482       for (int k = 0; k < 16; ++k)
    483         i += j;
    484 }
    485 
    486 void test_linear() {
    487   int i;
    488 #pragma omp target
    489 #pragma omp teams
    490 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
    491 #pragma omp distribute simd linear(
    492   for (i = 0; i < 16; ++i)
    493     ;
    494 #pragma omp target
    495 #pragma omp teams
    496 // expected-error@+2 {{expected expression}}
    497 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
    498 #pragma omp distribute simd linear(,
    499   for (i = 0; i < 16; ++i)
    500     ;
    501 #pragma omp target
    502 #pragma omp teams
    503 // expected-error@+2 {{expected expression}}
    504 // expected-error@+1 {{expected expression}}
    505 #pragma omp distribute simd linear(, )
    506   for (i = 0; i < 16; ++i)
    507     ;
    508 #pragma omp target
    509 #pragma omp teams
    510 // expected-error@+1 {{expected expression}}
    511 #pragma omp distribute simd linear()
    512   for (i = 0; i < 16; ++i)
    513     ;
    514 #pragma omp target
    515 #pragma omp teams
    516 // expected-error@+1 {{expected expression}}
    517 #pragma omp distribute simd linear(int)
    518   for (i = 0; i < 16; ++i)
    519     ;
    520 #pragma omp target
    521 #pragma omp teams
    522 // expected-error@+1 {{expected variable name}}
    523 #pragma omp distribute simd linear(0)
    524   for (i = 0; i < 16; ++i)
    525     ;
    526 #pragma omp target
    527 #pragma omp teams
    528 // expected-error@+1 {{use of undeclared identifier 'x'}}
    529 #pragma omp distribute simd linear(x)
    530   for (i = 0; i < 16; ++i)
    531     ;
    532 #pragma omp target
    533 #pragma omp teams
    534 // expected-error@+2 {{use of undeclared identifier 'x'}}
    535 // expected-error@+1 {{use of undeclared identifier 'y'}}
    536 #pragma omp distribute simd linear(x, y)
    537   for (i = 0; i < 16; ++i)
    538     ;
    539 #pragma omp target
    540 #pragma omp teams
    541 // expected-error@+3 {{use of undeclared identifier 'x'}}
    542 // expected-error@+2 {{use of undeclared identifier 'y'}}
    543 // expected-error@+1 {{use of undeclared identifier 'z'}}
    544 #pragma omp distribute simd linear(x, y, z)
    545   for (i = 0; i < 16; ++i)
    546     ;
    547 
    548   int x, y;
    549 #pragma omp target
    550 #pragma omp teams
    551 // expected-error@+1 {{expected expression}}
    552 #pragma omp distribute simd linear(x :)
    553   for (i = 0; i < 16; ++i)
    554     ;
    555 #pragma omp target
    556 #pragma omp teams
    557 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
    558 #pragma omp distribute simd linear(x :, )
    559   for (i = 0; i < 16; ++i)
    560     ;
    561 #pragma omp target
    562 #pragma omp teams
    563 #pragma omp distribute simd linear(x : 1)
    564   for (i = 0; i < 16; ++i)
    565     ;
    566 #pragma omp target
    567 #pragma omp teams
    568 #pragma omp distribute simd linear(x : 2 * 2)
    569   for (i = 0; i < 16; ++i)
    570     ;
    571 #pragma omp target
    572 #pragma omp teams
    573 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
    574 #pragma omp distribute simd linear(x : 1, y)
    575   for (i = 0; i < 16; ++i)
    576     ;
    577 #pragma omp target
    578 #pragma omp teams
    579 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
    580 #pragma omp distribute simd linear(x : 1, y, z : 1)
    581   for (i = 0; i < 16; ++i)
    582     ;
    583 
    584 #pragma omp target
    585 #pragma omp teams
    586 // expected-note@+2 {{defined as linear}}
    587 // expected-error@+1 {{linear variable cannot be linear}}
    588 #pragma omp distribute simd linear(x) linear(x)
    589   for (i = 0; i < 16; ++i)
    590     ;
    591 
    592 #pragma omp target
    593 #pragma omp teams
    594 // expected-note@+2 {{defined as private}}
    595 // expected-error@+1 {{private variable cannot be linear}}
    596 #pragma omp distribute simd private(x) linear(x)
    597   for (i = 0; i < 16; ++i)
    598     ;
    599 
    600 #pragma omp target
    601 #pragma omp teams
    602 // expected-note@+2 {{defined as linear}}
    603 // expected-error@+1 {{linear variable cannot be private}}
    604 #pragma omp distribute simd linear(x) private(x)
    605   for (i = 0; i < 16; ++i)
    606     ;
    607 
    608 #pragma omp target
    609 #pragma omp teams
    610 // expected-warning@+1 {{zero linear step (x and other variables in clause should probably be const)}}
    611 #pragma omp distribute simd linear(x, y : 0)
    612   for (i = 0; i < 16; ++i)
    613     ;
    614 
    615 #pragma omp target
    616 #pragma omp teams
    617 // expected-note@+2 {{defined as linear}}
    618 // expected-error@+1 {{linear variable cannot be lastprivate}}
    619 #pragma omp distribute simd linear(x) lastprivate(x)
    620   for (i = 0; i < 16; ++i)
    621     ;
    622 
    623 #pragma omp target
    624 #pragma omp teams
    625 // expected-note@+2 {{defined as lastprivate}}
    626 // expected-error@+1 {{lastprivate variable cannot be linear}}
    627 #pragma omp distribute simd lastprivate(x) linear(x)
    628   for (i = 0; i < 16; ++i)
    629     ;
    630 }
    631 
    632 void test_aligned() {
    633   int i;
    634 #pragma omp target
    635 #pragma omp teams
    636 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
    637 #pragma omp distribute simd aligned(
    638   for (i = 0; i < 16; ++i)
    639     ;
    640 #pragma omp target
    641 #pragma omp teams
    642 // expected-error@+2 {{expected expression}}
    643 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
    644 #pragma omp distribute simd aligned(,
    645   for (i = 0; i < 16; ++i)
    646     ;
    647 #pragma omp target
    648 #pragma omp teams
    649 // expected-error@+2 {{expected expression}}
    650 // expected-error@+1 {{expected expression}}
    651 #pragma omp distribute simd aligned(, )
    652   for (i = 0; i < 16; ++i)
    653     ;
    654 #pragma omp target
    655 #pragma omp teams
    656 // expected-error@+1 {{expected expression}}
    657 #pragma omp distribute simd aligned()
    658   for (i = 0; i < 16; ++i)
    659     ;
    660 #pragma omp target
    661 #pragma omp teams
    662 // expected-error@+1 {{expected expression}}
    663 #pragma omp distribute simd aligned(int)
    664   for (i = 0; i < 16; ++i)
    665     ;
    666 #pragma omp target
    667 #pragma omp teams
    668 // expected-error@+1 {{expected variable name}}
    669 #pragma omp distribute simd aligned(0)
    670   for (i = 0; i < 16; ++i)
    671     ;
    672 #pragma omp target
    673 #pragma omp teams
    674 // expected-error@+1 {{use of undeclared identifier 'x'}}
    675 #pragma omp distribute simd aligned(x)
    676   for (i = 0; i < 16; ++i)
    677     ;
    678 #pragma omp target
    679 #pragma omp teams
    680 // expected-error@+2 {{use of undeclared identifier 'x'}}
    681 // expected-error@+1 {{use of undeclared identifier 'y'}}
    682 #pragma omp distribute simd aligned(x, y)
    683   for (i = 0; i < 16; ++i)
    684     ;
    685 #pragma omp target
    686 #pragma omp teams
    687 // expected-error@+3 {{use of undeclared identifier 'x'}}
    688 // expected-error@+2 {{use of undeclared identifier 'y'}}
    689 // expected-error@+1 {{use of undeclared identifier 'z'}}
    690 #pragma omp distribute simd aligned(x, y, z)
    691   for (i = 0; i < 16; ++i)
    692     ;
    693 
    694   int *x, y, z[25]; // expected-note 4 {{'y' defined here}}
    695 #pragma omp target
    696 #pragma omp teams
    697 #pragma omp distribute simd aligned(x)
    698   for (i = 0; i < 16; ++i)
    699     ;
    700 #pragma omp target
    701 #pragma omp teams
    702 #pragma omp distribute simd aligned(z)
    703   for (i = 0; i < 16; ++i)
    704     ;
    705 #pragma omp target
    706 #pragma omp teams
    707 // expected-error@+1 {{expected expression}}
    708 #pragma omp distribute simd aligned(x :)
    709   for (i = 0; i < 16; ++i)
    710     ;
    711 #pragma omp target
    712 #pragma omp teams
    713 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
    714 #pragma omp distribute simd aligned(x :, )
    715   for (i = 0; i < 16; ++i)
    716     ;
    717 #pragma omp target
    718 #pragma omp teams
    719 #pragma omp distribute simd aligned(x : 1)
    720   for (i = 0; i < 16; ++i)
    721     ;
    722 #pragma omp target
    723 #pragma omp teams
    724 #pragma omp distribute simd aligned(x : 2 * 2)
    725   for (i = 0; i < 16; ++i)
    726     ;
    727 #pragma omp target
    728 #pragma omp teams
    729 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
    730 #pragma omp distribute simd aligned(x : 1, y)
    731   for (i = 0; i < 16; ++i)
    732     ;
    733 #pragma omp target
    734 #pragma omp teams
    735 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
    736 #pragma omp distribute simd aligned(x : 1, y, z : 1)
    737   for (i = 0; i < 16; ++i)
    738     ;
    739 
    740 #pragma omp target
    741 #pragma omp teams
    742 // expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}}
    743 #pragma omp distribute simd aligned(x, y)
    744   for (i = 0; i < 16; ++i)
    745     ;
    746 #pragma omp target
    747 #pragma omp teams
    748 // expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}}
    749 #pragma omp distribute simd aligned(x, y, z)
    750   for (i = 0; i < 16; ++i)
    751     ;
    752 
    753 #pragma omp target
    754 #pragma omp teams
    755 // expected-note@+2 {{defined as aligned}}
    756 // expected-error@+1 {{a variable cannot appear in more than one aligned clause}}
    757 #pragma omp distribute simd aligned(x) aligned(z, x)
    758   for (i = 0; i < 16; ++i)
    759     ;
    760 
    761 #pragma omp target
    762 #pragma omp teams
    763 // expected-note@+3 {{defined as aligned}}
    764 // expected-error@+2 {{a variable cannot appear in more than one aligned clause}}
    765 // expected-error@+1 2 {{argument of aligned clause should be array or pointer, not 'int'}}
    766 #pragma omp distribute simd aligned(x, y, z) aligned(y, z)
    767   for (i = 0; i < 16; ++i)
    768     ;
    769 }
    770 
    771 void test_private() {
    772   int i;
    773 #pragma omp target
    774 #pragma omp teams
    775 // expected-error@+2 {{expected expression}}
    776 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
    777 #pragma omp distribute simd private(
    778   for (i = 0; i < 16; ++i)
    779     ;
    780 #pragma omp target
    781 #pragma omp teams
    782 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
    783 // expected-error@+1 2 {{expected expression}}
    784 #pragma omp distribute simd private(,
    785   for (i = 0; i < 16; ++i)
    786     ;
    787 #pragma omp target
    788 #pragma omp teams
    789 // expected-error@+1 2 {{expected expression}}
    790 #pragma omp distribute simd private(, )
    791   for (i = 0; i < 16; ++i)
    792     ;
    793 #pragma omp target
    794 #pragma omp teams
    795 // expected-error@+1 {{expected expression}}
    796 #pragma omp distribute simd private()
    797   for (i = 0; i < 16; ++i)
    798     ;
    799 #pragma omp target
    800 #pragma omp teams
    801 // expected-error@+1 {{expected expression}}
    802 #pragma omp distribute simd private(int)
    803   for (i = 0; i < 16; ++i)
    804     ;
    805 #pragma omp target
    806 #pragma omp teams
    807 // expected-error@+1 {{expected variable name}}
    808 #pragma omp distribute simd private(0)
    809   for (i = 0; i < 16; ++i)
    810     ;
    811 
    812   int x, y, z;
    813 #pragma omp target
    814 #pragma omp teams
    815 #pragma omp distribute simd private(x)
    816   for (i = 0; i < 16; ++i)
    817     ;
    818 #pragma omp target
    819 #pragma omp teams
    820 #pragma omp distribute simd private(x, y)
    821   for (i = 0; i < 16; ++i)
    822     ;
    823 #pragma omp target
    824 #pragma omp teams
    825 #pragma omp distribute simd private(x, y, z)
    826   for (i = 0; i < 16; ++i) {
    827     x = y * i + z;
    828   }
    829 }
    830 
    831 void test_firstprivate() {
    832   int i;
    833 #pragma omp target
    834 #pragma omp teams
    835 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
    836 // expected-error@+1 {{expected expression}}
    837 #pragma omp distribute simd firstprivate(
    838   for (i = 0; i < 16; ++i)
    839     ;
    840 }
    841 
    842 void test_lastprivate() {
    843   int i;
    844 #pragma omp target
    845 #pragma omp teams
    846 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
    847 // expected-error@+1 {{expected expression}}
    848 #pragma omp distribute simd lastprivate(
    849   for (i = 0; i < 16; ++i)
    850     ;
    851 
    852 #pragma omp target
    853 #pragma omp teams
    854 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
    855 // expected-error@+1 2 {{expected expression}}
    856 #pragma omp distribute simd lastprivate(,
    857   for (i = 0; i < 16; ++i)
    858     ;
    859 #pragma omp target
    860 #pragma omp teams
    861 // expected-error@+1 2 {{expected expression}}
    862 #pragma omp distribute simd lastprivate(, )
    863   for (i = 0; i < 16; ++i)
    864     ;
    865 #pragma omp target
    866 #pragma omp teams
    867 // expected-error@+1 {{expected expression}}
    868 #pragma omp distribute simd lastprivate()
    869   for (i = 0; i < 16; ++i)
    870     ;
    871 #pragma omp target
    872 #pragma omp teams
    873 // expected-error@+1 {{expected expression}}
    874 #pragma omp distribute simd lastprivate(int)
    875   for (i = 0; i < 16; ++i)
    876     ;
    877 #pragma omp target
    878 #pragma omp teams
    879 // expected-error@+1 {{expected variable name}}
    880 #pragma omp distribute simd lastprivate(0)
    881   for (i = 0; i < 16; ++i)
    882     ;
    883 
    884   int x, y, z;
    885 #pragma omp target
    886 #pragma omp teams
    887 #pragma omp distribute simd lastprivate(x)
    888   for (i = 0; i < 16; ++i)
    889     ;
    890 #pragma omp target
    891 #pragma omp teams
    892 #pragma omp distribute simd lastprivate(x, y)
    893   for (i = 0; i < 16; ++i)
    894     ;
    895 #pragma omp target
    896 #pragma omp teams
    897 #pragma omp distribute simd lastprivate(x, y, z)
    898   for (i = 0; i < 16; ++i)
    899     ;
    900 }
    901 
    902 void test_reduction() {
    903   int i, x, y;
    904 #pragma omp target
    905 #pragma omp teams
    906 // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}
    907 // expected-error@+2 {{expected identifier}}
    908 // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}
    909 #pragma omp distribute simd reduction(
    910   for (i = 0; i < 16; ++i)
    911     ;
    912 #pragma omp target
    913 #pragma omp teams
    914 // expected-error@+2 {{expected identifier}}
    915 // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}
    916 #pragma omp distribute simd reduction()
    917   for (i = 0; i < 16; ++i)
    918     ;
    919 #pragma omp target
    920 #pragma omp teams
    921 // expected-error@+2 {{expected expression}}
    922 // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}
    923 #pragma omp distribute simd reduction(x)
    924   for (i = 0; i < 16; ++i)
    925     ;
    926 #pragma omp target
    927 #pragma omp teams
    928 // expected-error@+1 {{expected identifier}}
    929 #pragma omp distribute simd reduction( : x)
    930   for (i = 0; i < 16; ++i)
    931     ;
    932 #pragma omp target
    933 #pragma omp teams
    934 // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}
    935 // expected-error@+2 {{expected identifier}}
    936 // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}
    937 #pragma omp distribute simd reduction(,
    938   for (i = 0; i < 16; ++i)
    939     ;
    940 #pragma omp target
    941 #pragma omp teams
    942 // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}
    943 // expected-error@+2 {{expected expression}}
    944 // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}
    945 #pragma omp distribute simd reduction(+
    946   for (i = 0; i < 16; ++i)
    947     ;
    948 
    949 #pragma omp target
    950 #pragma omp teams
    951 // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}
    952 //
    953 // expected-error@+1 {{expected expression}}
    954 #pragma omp distribute simd reduction(+:
    955   for (i = 0; i < 16; ++i)
    956     ;
    957 #pragma omp target
    958 #pragma omp teams
    959 // expected-error@+1 {{expected expression}}
    960 #pragma omp distribute simd reduction(+ :)
    961   for (i = 0; i < 16; ++i)
    962     ;
    963 #pragma omp target
    964 #pragma omp teams
    965 // expected-error@+1 {{expected expression}}
    966 #pragma omp distribute simd reduction(+ :, y)
    967   for (i = 0; i < 16; ++i)
    968     ;
    969 #pragma omp target
    970 #pragma omp teams
    971 // expected-error@+1 {{expected expression}}
    972 #pragma omp distribute simd reduction(+ : x, + : y)
    973   for (i = 0; i < 16; ++i)
    974     ;
    975 #pragma omp target
    976 #pragma omp teams
    977 // expected-error@+1 {{expected identifier}}
    978 #pragma omp distribute simd reduction(% : x)
    979   for (i = 0; i < 16; ++i)
    980     ;
    981 
    982 #pragma omp target
    983 #pragma omp teams
    984 #pragma omp distribute simd reduction(+ : x)
    985   for (i = 0; i < 16; ++i)
    986     ;
    987 #pragma omp target
    988 #pragma omp teams
    989 #pragma omp distribute simd reduction(* : x)
    990   for (i = 0; i < 16; ++i)
    991     ;
    992 #pragma omp target
    993 #pragma omp teams
    994 #pragma omp distribute simd reduction(- : x)
    995   for (i = 0; i < 16; ++i)
    996     ;
    997 #pragma omp target
    998 #pragma omp teams
    999 #pragma omp distribute simd reduction(& : x)
   1000   for (i = 0; i < 16; ++i)
   1001     ;
   1002 #pragma omp target
   1003 #pragma omp teams
   1004 #pragma omp distribute simd reduction(| : x)
   1005   for (i = 0; i < 16; ++i)
   1006     ;
   1007 #pragma omp target
   1008 #pragma omp teams
   1009 #pragma omp distribute simd reduction(^ : x)
   1010   for (i = 0; i < 16; ++i)
   1011     ;
   1012 #pragma omp target
   1013 #pragma omp teams
   1014 #pragma omp distribute simd reduction(&& : x)
   1015   for (i = 0; i < 16; ++i)
   1016     ;
   1017 #pragma omp target
   1018 #pragma omp teams
   1019 #pragma omp distribute simd reduction(|| : x)
   1020   for (i = 0; i < 16; ++i)
   1021     ;
   1022 #pragma omp target
   1023 #pragma omp teams
   1024 #pragma omp distribute simd reduction(max : x)
   1025   for (i = 0; i < 16; ++i)
   1026     ;
   1027 #pragma omp target
   1028 #pragma omp teams
   1029 #pragma omp distribute simd reduction(min : x)
   1030   for (i = 0; i < 16; ++i)
   1031     ;
   1032   struct X {
   1033     int x;
   1034   };
   1035   struct X X;
   1036 #pragma omp target
   1037 #pragma omp teams
   1038 // expected-error@+1 {{expected variable name}}
   1039 #pragma omp distribute simd reduction(+ : X.x)
   1040   for (i = 0; i < 16; ++i)
   1041     ;
   1042 #pragma omp target
   1043 #pragma omp teams
   1044 // expected-error@+1 {{expected variable name}}
   1045 #pragma omp distribute simd reduction(+ : x + x)
   1046   for (i = 0; i < 16; ++i)
   1047     ;
   1048 }
   1049 
   1050 void test_loop_messages() {
   1051   float a[100], b[100], c[100];
   1052 #pragma omp target
   1053 #pragma omp teams
   1054 // expected-error@+2 {{variable must be of integer or pointer type}}
   1055 #pragma omp distribute simd
   1056   for (float fi = 0; fi < 10.0; fi++) {
   1057     c[(int)fi] = a[(int)fi] + b[(int)fi];
   1058   }
   1059 #pragma omp target
   1060 #pragma omp teams
   1061 // expected-error@+2 {{variable must be of integer or pointer type}}
   1062 #pragma omp distribute simd
   1063   for (double fi = 0; fi < 10.0; fi++) {
   1064     c[(int)fi] = a[(int)fi] + b[(int)fi];
   1065   }
   1066 }
   1067 
   1068 void linear_modifiers(int argc) {
   1069   int f;
   1070 #pragma omp target
   1071 #pragma omp teams
   1072 #pragma omp distribute simd linear(f)
   1073   for (int k = 0; k < argc; ++k) ++k;
   1074 #pragma omp target
   1075 #pragma omp teams
   1076 #pragma omp distribute simd linear(val(f))
   1077   for (int k = 0; k < argc; ++k) ++k;
   1078 #pragma omp target
   1079 #pragma omp teams
   1080 #pragma omp distribute simd linear(uval(f)) // expected-error {{expected 'val' modifier}}
   1081   for (int k = 0; k < argc; ++k) ++k;
   1082 #pragma omp target
   1083 #pragma omp teams
   1084 #pragma omp distribute simd linear(ref(f)) // expected-error {{expected 'val' modifier}}
   1085   for (int k = 0; k < argc; ++k) ++k;
   1086 #pragma omp target
   1087 #pragma omp teams
   1088 #pragma omp distribute simd linear(foo(f)) // expected-error {{expected 'val' modifier}}
   1089   for (int k = 0; k < argc; ++k) ++k;
   1090 }
   1091 
   1092