160e51c48SAlexey Bataev // RUN: %clang_cc1 -fsyntax-only -fopenmp -triple x86_64-unknown-unknown -verify %s -Wuninitialized
260e51c48SAlexey Bataev 
360e51c48SAlexey Bataev // RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -triple x86_64-unknown-unknown -verify %s -Wuninitialized
460e51c48SAlexey Bataev 
xxx(int argc)560e51c48SAlexey Bataev void xxx(int argc) {
660e51c48SAlexey Bataev   int x; // expected-note {{initialize the variable 'x' to silence this warning}}
760e51c48SAlexey Bataev #pragma omp master taskloop
860e51c48SAlexey Bataev   for (int i = 0; i < 10; ++i)
960e51c48SAlexey Bataev     argc = x; // expected-warning {{variable 'x' is uninitialized when used here}}
1060e51c48SAlexey Bataev }
1160e51c48SAlexey Bataev 
1260e51c48SAlexey Bataev // expected-error@+1 {{unexpected OpenMP directive '#pragma omp master taskloop'}}
1360e51c48SAlexey Bataev #pragma omp master taskloop
1460e51c48SAlexey Bataev 
1560e51c48SAlexey Bataev // expected-error@+1 {{unexpected OpenMP directive '#pragma omp master taskloop'}}
1660e51c48SAlexey Bataev #pragma omp master taskloop foo
1760e51c48SAlexey Bataev 
test_no_clause(void)18*e9e55acdSAaron Ballman void test_no_clause(void) {
1960e51c48SAlexey Bataev   int i;
2060e51c48SAlexey Bataev #pragma omp master taskloop
2160e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
2260e51c48SAlexey Bataev     ;
2360e51c48SAlexey Bataev 
2460e51c48SAlexey Bataev // expected-error@+2 {{statement after '#pragma omp master taskloop' must be a for loop}}
2560e51c48SAlexey Bataev #pragma omp master taskloop
2660e51c48SAlexey Bataev   ++i;
2760e51c48SAlexey Bataev }
2860e51c48SAlexey Bataev 
test_branch_protected_scope(void)29*e9e55acdSAaron Ballman void test_branch_protected_scope(void) {
3060e51c48SAlexey Bataev   int i = 0;
3160e51c48SAlexey Bataev L1:
3260e51c48SAlexey Bataev   ++i;
3360e51c48SAlexey Bataev 
3460e51c48SAlexey Bataev   int x[24];
3560e51c48SAlexey Bataev 
3660e51c48SAlexey Bataev #pragma omp parallel
3760e51c48SAlexey Bataev #pragma omp master taskloop
3860e51c48SAlexey Bataev   for (i = 0; i < 16; ++i) {
3960e51c48SAlexey Bataev     if (i == 5)
4060e51c48SAlexey Bataev       goto L1; // expected-error {{use of undeclared label 'L1'}}
4160e51c48SAlexey Bataev     else if (i == 6)
4260e51c48SAlexey Bataev       return; // expected-error {{cannot return from OpenMP region}}
4360e51c48SAlexey Bataev     else if (i == 7)
4460e51c48SAlexey Bataev       goto L2;
4560e51c48SAlexey Bataev     else if (i == 8) {
4660e51c48SAlexey Bataev     L2:
4760e51c48SAlexey Bataev       x[i]++;
4860e51c48SAlexey Bataev     }
4960e51c48SAlexey Bataev   }
5060e51c48SAlexey Bataev 
5160e51c48SAlexey Bataev   if (x[0] == 0)
5260e51c48SAlexey Bataev     goto L2; // expected-error {{use of undeclared label 'L2'}}
5360e51c48SAlexey Bataev   else if (x[1] == 1)
5460e51c48SAlexey Bataev     goto L1;
5560e51c48SAlexey Bataev }
5660e51c48SAlexey Bataev 
test_invalid_clause(void)57*e9e55acdSAaron Ballman void test_invalid_clause(void) {
5860e51c48SAlexey Bataev   int i;
5960e51c48SAlexey Bataev #pragma omp parallel
6060e51c48SAlexey Bataev // expected-warning@+1 {{extra tokens at the end of '#pragma omp master taskloop' are ignored}}
6160e51c48SAlexey Bataev #pragma omp master taskloop foo bar
6260e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
6360e51c48SAlexey Bataev     ;
6460e51c48SAlexey Bataev // expected-error@+1 {{directive '#pragma omp master taskloop' cannot contain more than one 'nogroup' clause}}
6560e51c48SAlexey Bataev #pragma omp master taskloop nogroup nogroup
6660e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
6760e51c48SAlexey Bataev     ;
6860e51c48SAlexey Bataev }
6960e51c48SAlexey Bataev 
test_non_identifiers(void)70*e9e55acdSAaron Ballman void test_non_identifiers(void) {
7160e51c48SAlexey Bataev   int i, x;
7260e51c48SAlexey Bataev 
7360e51c48SAlexey Bataev #pragma omp parallel
7460e51c48SAlexey Bataev // expected-warning@+1 {{extra tokens at the end of '#pragma omp master taskloop' are ignored}}
7560e51c48SAlexey Bataev #pragma omp master taskloop;
7660e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
7760e51c48SAlexey Bataev     ;
7860e51c48SAlexey Bataev // expected-warning@+3 {{extra tokens at the end of '#pragma omp master taskloop' are ignored}}
7960e51c48SAlexey Bataev // expected-error@+2 {{unexpected OpenMP clause 'linear' in directive '#pragma omp master taskloop'}}
8060e51c48SAlexey Bataev #pragma omp parallel
8160e51c48SAlexey Bataev #pragma omp master taskloop linear(x);
8260e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
8360e51c48SAlexey Bataev     ;
8460e51c48SAlexey Bataev 
8560e51c48SAlexey Bataev #pragma omp parallel
8660e51c48SAlexey Bataev // expected-warning@+1 {{extra tokens at the end of '#pragma omp master taskloop' are ignored}}
8760e51c48SAlexey Bataev #pragma omp master taskloop private(x);
8860e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
8960e51c48SAlexey Bataev     ;
9060e51c48SAlexey Bataev 
9160e51c48SAlexey Bataev #pragma omp parallel
9260e51c48SAlexey Bataev // expected-warning@+1 {{extra tokens at the end of '#pragma omp master taskloop' are ignored}}
9360e51c48SAlexey Bataev #pragma omp master taskloop, private(x);
9460e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
9560e51c48SAlexey Bataev     ;
9660e51c48SAlexey Bataev }
9760e51c48SAlexey Bataev 
98*e9e55acdSAaron Ballman extern int foo(void);
9960e51c48SAlexey Bataev 
test_collapse(void)100*e9e55acdSAaron Ballman void test_collapse(void) {
10160e51c48SAlexey Bataev   int i;
10260e51c48SAlexey Bataev #pragma omp parallel
10360e51c48SAlexey Bataev // expected-error@+1 {{expected '('}}
10460e51c48SAlexey Bataev #pragma omp master taskloop collapse
10560e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
10660e51c48SAlexey Bataev     ;
10760e51c48SAlexey Bataev #pragma omp parallel
10860e51c48SAlexey Bataev // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
10960e51c48SAlexey Bataev #pragma omp master taskloop collapse(
11060e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
11160e51c48SAlexey Bataev     ;
11260e51c48SAlexey Bataev #pragma omp parallel
11360e51c48SAlexey Bataev // expected-error@+1 {{expected expression}}
11460e51c48SAlexey Bataev #pragma omp master taskloop collapse()
11560e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
11660e51c48SAlexey Bataev     ;
11760e51c48SAlexey Bataev #pragma omp parallel
11860e51c48SAlexey Bataev // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
11960e51c48SAlexey Bataev #pragma omp master taskloop collapse(,
12060e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
12160e51c48SAlexey Bataev     ;
12260e51c48SAlexey Bataev #pragma omp parallel
12360e51c48SAlexey Bataev // expected-error@+1 {{expected expression}}  expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
12460e51c48SAlexey Bataev #pragma omp master taskloop collapse(, )
12560e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
12660e51c48SAlexey Bataev     ;
12760e51c48SAlexey Bataev #pragma omp parallel
12860e51c48SAlexey Bataev // expected-warning@+2 {{extra tokens at the end of '#pragma omp master taskloop' are ignored}}
12960e51c48SAlexey Bataev // expected-error@+1 {{expected '('}}
13060e51c48SAlexey Bataev #pragma omp master taskloop collapse 4)
13160e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
13260e51c48SAlexey Bataev     ;
13360e51c48SAlexey Bataev #pragma omp parallel
13460e51c48SAlexey Bataev // expected-error@+2 {{expected ')'}}
13560e51c48SAlexey Bataev // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
13660e51c48SAlexey Bataev #pragma omp master taskloop collapse(4
13760e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
13860e51c48SAlexey Bataev     ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop', but found only 1}}
13960e51c48SAlexey Bataev #pragma omp parallel
14060e51c48SAlexey Bataev // expected-error@+2 {{expected ')'}}
14160e51c48SAlexey Bataev // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
14260e51c48SAlexey Bataev #pragma omp master taskloop collapse(4,
14360e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
14460e51c48SAlexey Bataev     ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop', but found only 1}}
14560e51c48SAlexey Bataev #pragma omp parallel
14660e51c48SAlexey Bataev // expected-error@+2 {{expected ')'}}
14760e51c48SAlexey Bataev // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
14860e51c48SAlexey Bataev #pragma omp master taskloop collapse(4, )
14960e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
15060e51c48SAlexey Bataev     ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop', but found only 1}}
15160e51c48SAlexey Bataev #pragma omp parallel
15260e51c48SAlexey Bataev // expected-note@+1 {{as specified in 'collapse' clause}}
15360e51c48SAlexey Bataev #pragma omp master taskloop collapse(4)
15460e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
15560e51c48SAlexey Bataev     ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop', but found only 1}}
15660e51c48SAlexey Bataev #pragma omp parallel
15760e51c48SAlexey Bataev // expected-error@+2 {{expected ')'}}
15860e51c48SAlexey Bataev // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
15960e51c48SAlexey Bataev #pragma omp master taskloop collapse(4 4)
16060e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
16160e51c48SAlexey Bataev     ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop', but found only 1}}
16260e51c48SAlexey Bataev #pragma omp parallel
16360e51c48SAlexey Bataev // expected-error@+2 {{expected ')'}}
16460e51c48SAlexey Bataev // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
16560e51c48SAlexey Bataev #pragma omp master taskloop collapse(4, , 4)
16660e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
16760e51c48SAlexey Bataev     ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop', but found only 1}}
16860e51c48SAlexey Bataev #pragma omp parallel
16960e51c48SAlexey Bataev #pragma omp master taskloop collapse(4)
17060e51c48SAlexey Bataev   for (int i1 = 0; i1 < 16; ++i1)
17160e51c48SAlexey Bataev     for (int i2 = 0; i2 < 16; ++i2)
17260e51c48SAlexey Bataev       for (int i3 = 0; i3 < 16; ++i3)
17360e51c48SAlexey Bataev         for (int i4 = 0; i4 < 16; ++i4)
17460e51c48SAlexey Bataev           foo();
17560e51c48SAlexey Bataev #pragma omp parallel
17660e51c48SAlexey Bataev // expected-error@+2 {{expected ')'}}
17760e51c48SAlexey Bataev // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
17860e51c48SAlexey Bataev #pragma omp master taskloop collapse(4, 8)
17960e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
18060e51c48SAlexey Bataev     ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop', but found only 1}}
18160e51c48SAlexey Bataev #pragma omp parallel
1826f339367SRichard Smith // expected-error@+1 {{integer constant expression}}
18360e51c48SAlexey Bataev #pragma omp master taskloop collapse(2.5)
18460e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
18560e51c48SAlexey Bataev     ;
18660e51c48SAlexey Bataev #pragma omp parallel
1876f339367SRichard Smith // expected-error@+1 {{integer constant expression}}
18860e51c48SAlexey Bataev #pragma omp master taskloop collapse(foo())
18960e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
19060e51c48SAlexey Bataev     ;
19160e51c48SAlexey Bataev #pragma omp parallel
19260e51c48SAlexey Bataev // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
19360e51c48SAlexey Bataev #pragma omp master taskloop collapse(-5)
19460e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
19560e51c48SAlexey Bataev     ;
19660e51c48SAlexey Bataev #pragma omp parallel
19760e51c48SAlexey Bataev // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
19860e51c48SAlexey Bataev #pragma omp master taskloop collapse(0)
19960e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
20060e51c48SAlexey Bataev     ;
20160e51c48SAlexey Bataev #pragma omp parallel
20260e51c48SAlexey Bataev // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
20360e51c48SAlexey Bataev #pragma omp master taskloop collapse(5 - 5)
20460e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
20560e51c48SAlexey Bataev     ;
20660e51c48SAlexey Bataev }
20760e51c48SAlexey Bataev 
test_private(void)208*e9e55acdSAaron Ballman void test_private(void) {
20960e51c48SAlexey Bataev   int i;
21060e51c48SAlexey Bataev #pragma omp parallel
21160e51c48SAlexey Bataev // expected-error@+2 {{expected expression}}
21260e51c48SAlexey Bataev // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
21360e51c48SAlexey Bataev #pragma omp master taskloop private(
21460e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
21560e51c48SAlexey Bataev     ;
21660e51c48SAlexey Bataev #pragma omp parallel
21760e51c48SAlexey Bataev // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
21860e51c48SAlexey Bataev // expected-error@+1 2 {{expected expression}}
21960e51c48SAlexey Bataev #pragma omp master taskloop private(,
22060e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
22160e51c48SAlexey Bataev     ;
22260e51c48SAlexey Bataev #pragma omp parallel
22360e51c48SAlexey Bataev // expected-error@+1 2 {{expected expression}}
22460e51c48SAlexey Bataev #pragma omp master taskloop private(, )
22560e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
22660e51c48SAlexey Bataev     ;
22760e51c48SAlexey Bataev #pragma omp parallel
22860e51c48SAlexey Bataev // expected-error@+1 {{expected expression}}
22960e51c48SAlexey Bataev #pragma omp master taskloop private()
23060e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
23160e51c48SAlexey Bataev     ;
23260e51c48SAlexey Bataev #pragma omp parallel
23360e51c48SAlexey Bataev // expected-error@+1 {{expected expression}}
23460e51c48SAlexey Bataev #pragma omp master taskloop private(int)
23560e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
23660e51c48SAlexey Bataev     ;
23760e51c48SAlexey Bataev #pragma omp parallel
23860e51c48SAlexey Bataev // expected-error@+1 {{expected variable name}}
23960e51c48SAlexey Bataev #pragma omp master taskloop private(0)
24060e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
24160e51c48SAlexey Bataev     ;
24260e51c48SAlexey Bataev 
24360e51c48SAlexey Bataev   int x, y, z;
24460e51c48SAlexey Bataev #pragma omp parallel
24560e51c48SAlexey Bataev #pragma omp master taskloop private(x)
24660e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
24760e51c48SAlexey Bataev     ;
24860e51c48SAlexey Bataev #pragma omp parallel
24960e51c48SAlexey Bataev #pragma omp master taskloop private(x, y)
25060e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
25160e51c48SAlexey Bataev     ;
25260e51c48SAlexey Bataev #pragma omp parallel
25360e51c48SAlexey Bataev #pragma omp master taskloop private(x, y, z)
25460e51c48SAlexey Bataev   for (i = 0; i < 16; ++i) {
25560e51c48SAlexey Bataev     x = y * i + z;
25660e51c48SAlexey Bataev   }
25760e51c48SAlexey Bataev }
25860e51c48SAlexey Bataev 
test_lastprivate(void)259*e9e55acdSAaron Ballman void test_lastprivate(void) {
26060e51c48SAlexey Bataev   int i;
26160e51c48SAlexey Bataev #pragma omp parallel
26260e51c48SAlexey Bataev // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
26360e51c48SAlexey Bataev // expected-error@+1 {{expected expression}}
26460e51c48SAlexey Bataev #pragma omp master taskloop lastprivate(
26560e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
26660e51c48SAlexey Bataev     ;
26760e51c48SAlexey Bataev 
26860e51c48SAlexey Bataev #pragma omp parallel
26960e51c48SAlexey Bataev // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
27060e51c48SAlexey Bataev // expected-error@+1 2 {{expected expression}}
27160e51c48SAlexey Bataev #pragma omp master taskloop lastprivate(,
27260e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
27360e51c48SAlexey Bataev     ;
27460e51c48SAlexey Bataev #pragma omp parallel
27560e51c48SAlexey Bataev // expected-error@+1 2 {{expected expression}}
27660e51c48SAlexey Bataev #pragma omp master taskloop lastprivate(, )
27760e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
27860e51c48SAlexey Bataev     ;
27960e51c48SAlexey Bataev #pragma omp parallel
28060e51c48SAlexey Bataev // expected-error@+1 {{expected expression}}
28160e51c48SAlexey Bataev #pragma omp master taskloop lastprivate()
28260e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
28360e51c48SAlexey Bataev     ;
28460e51c48SAlexey Bataev #pragma omp parallel
28560e51c48SAlexey Bataev // expected-error@+1 {{expected expression}}
28660e51c48SAlexey Bataev #pragma omp master taskloop lastprivate(int)
28760e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
28860e51c48SAlexey Bataev     ;
28960e51c48SAlexey Bataev #pragma omp parallel
29060e51c48SAlexey Bataev // expected-error@+1 {{expected variable name}}
29160e51c48SAlexey Bataev #pragma omp master taskloop lastprivate(0)
29260e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
29360e51c48SAlexey Bataev     ;
29460e51c48SAlexey Bataev 
29560e51c48SAlexey Bataev   int x, y, z;
29660e51c48SAlexey Bataev #pragma omp parallel
29760e51c48SAlexey Bataev #pragma omp master taskloop lastprivate(x)
29860e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
29960e51c48SAlexey Bataev     ;
30060e51c48SAlexey Bataev #pragma omp parallel
30160e51c48SAlexey Bataev #pragma omp master taskloop lastprivate(x, y)
30260e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
30360e51c48SAlexey Bataev     ;
30460e51c48SAlexey Bataev #pragma omp parallel
30560e51c48SAlexey Bataev #pragma omp master taskloop lastprivate(x, y, z)
30660e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
30760e51c48SAlexey Bataev     ;
30860e51c48SAlexey Bataev }
30960e51c48SAlexey Bataev 
test_firstprivate(void)310*e9e55acdSAaron Ballman void test_firstprivate(void) {
31160e51c48SAlexey Bataev   int i;
31260e51c48SAlexey Bataev #pragma omp parallel
31360e51c48SAlexey Bataev // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
31460e51c48SAlexey Bataev // expected-error@+1 {{expected expression}}
31560e51c48SAlexey Bataev #pragma omp master taskloop firstprivate(
31660e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
31760e51c48SAlexey Bataev     ;
31860e51c48SAlexey Bataev 
31960e51c48SAlexey Bataev #pragma omp parallel
32060e51c48SAlexey Bataev // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
32160e51c48SAlexey Bataev // expected-error@+1 2 {{expected expression}}
32260e51c48SAlexey Bataev #pragma omp master taskloop firstprivate(,
32360e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
32460e51c48SAlexey Bataev     ;
32560e51c48SAlexey Bataev #pragma omp parallel
32660e51c48SAlexey Bataev // expected-error@+1 2 {{expected expression}}
32760e51c48SAlexey Bataev #pragma omp master taskloop firstprivate(, )
32860e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
32960e51c48SAlexey Bataev     ;
33060e51c48SAlexey Bataev #pragma omp parallel
33160e51c48SAlexey Bataev // expected-error@+1 {{expected expression}}
33260e51c48SAlexey Bataev #pragma omp master taskloop firstprivate()
33360e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
33460e51c48SAlexey Bataev     ;
33560e51c48SAlexey Bataev #pragma omp parallel
33660e51c48SAlexey Bataev // expected-error@+1 {{expected expression}}
33760e51c48SAlexey Bataev #pragma omp master taskloop firstprivate(int)
33860e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
33960e51c48SAlexey Bataev     ;
34060e51c48SAlexey Bataev #pragma omp parallel
34160e51c48SAlexey Bataev // expected-error@+1 {{expected variable name}}
34260e51c48SAlexey Bataev #pragma omp master taskloop firstprivate(0)
34360e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
34460e51c48SAlexey Bataev     ;
34560e51c48SAlexey Bataev 
34660e51c48SAlexey Bataev   int x, y, z;
34760e51c48SAlexey Bataev #pragma omp parallel
34860e51c48SAlexey Bataev #pragma omp master taskloop lastprivate(x) firstprivate(x)
34960e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
35060e51c48SAlexey Bataev     ;
35160e51c48SAlexey Bataev #pragma omp parallel
35260e51c48SAlexey Bataev #pragma omp master taskloop lastprivate(x, y) firstprivate(x, y)
35360e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
35460e51c48SAlexey Bataev     ;
35560e51c48SAlexey Bataev #pragma omp parallel
35660e51c48SAlexey Bataev #pragma omp master taskloop lastprivate(x, y, z) firstprivate(x, y, z)
35760e51c48SAlexey Bataev   for (i = 0; i < 16; ++i)
35860e51c48SAlexey Bataev     ;
35960e51c48SAlexey Bataev }
36060e51c48SAlexey Bataev 
test_loop_messages(void)361*e9e55acdSAaron Ballman void test_loop_messages(void) {
36260e51c48SAlexey Bataev   float a[100], b[100], c[100];
36360e51c48SAlexey Bataev #pragma omp parallel
36460e51c48SAlexey Bataev // expected-error@+2 {{variable must be of integer or pointer type}}
36560e51c48SAlexey Bataev #pragma omp master taskloop
36660e51c48SAlexey Bataev   for (float fi = 0; fi < 10.0; fi++) {
36760e51c48SAlexey Bataev     c[(int)fi] = a[(int)fi] + b[(int)fi];
36860e51c48SAlexey Bataev   }
36960e51c48SAlexey Bataev #pragma omp parallel
37060e51c48SAlexey Bataev // expected-error@+2 {{variable must be of integer or pointer type}}
37160e51c48SAlexey Bataev #pragma omp master taskloop
37260e51c48SAlexey Bataev   for (double fi = 0; fi < 10.0; fi++) {
37360e51c48SAlexey Bataev     c[(int)fi] = a[(int)fi] + b[(int)fi];
37460e51c48SAlexey Bataev   }
37560e51c48SAlexey Bataev 
37660e51c48SAlexey Bataev   // expected-warning@+2 {{OpenMP loop iteration variable cannot have more than 64 bits size and will be narrowed}}
37760e51c48SAlexey Bataev   #pragma omp master taskloop
37860e51c48SAlexey Bataev   for (__int128 ii = 0; ii < 10; ii++) {
37960e51c48SAlexey Bataev     c[ii] = a[ii] + b[ii];
38060e51c48SAlexey Bataev   }
38160e51c48SAlexey Bataev }
38260e51c48SAlexey Bataev 
383