1*d64ba896SFazlay Rabbi // RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s -Wuninitialized
2*d64ba896SFazlay Rabbi 
3*d64ba896SFazlay Rabbi // RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
4*d64ba896SFazlay Rabbi 
foo()5*d64ba896SFazlay Rabbi void foo() {
6*d64ba896SFazlay Rabbi }
7*d64ba896SFazlay Rabbi 
foobool(int argc)8*d64ba896SFazlay Rabbi bool foobool(int argc) {
9*d64ba896SFazlay Rabbi   return argc;
10*d64ba896SFazlay Rabbi }
11*d64ba896SFazlay Rabbi 
12*d64ba896SFazlay Rabbi struct S1; // expected-note {{declared here}}
13*d64ba896SFazlay Rabbi 
14*d64ba896SFazlay Rabbi template <class T, class S> // expected-note {{declared here}}
tmain(T argc,S ** argv)15*d64ba896SFazlay Rabbi int tmain(T argc, S **argv) {
16*d64ba896SFazlay Rabbi   T z;
17*d64ba896SFazlay Rabbi   #pragma omp parallel masked taskloop priority // expected-error {{expected '(' after 'priority'}}
18*d64ba896SFazlay Rabbi   for (int i = 0; i < 10; ++i)
19*d64ba896SFazlay Rabbi     foo();
20*d64ba896SFazlay Rabbi   #pragma omp parallel masked taskloop priority ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
21*d64ba896SFazlay Rabbi   for (int i = 0; i < 10; ++i)
22*d64ba896SFazlay Rabbi     foo();
23*d64ba896SFazlay Rabbi   #pragma omp parallel masked taskloop priority () // expected-error {{expected expression}}
24*d64ba896SFazlay Rabbi   for (int i = 0; i < 10; ++i)
25*d64ba896SFazlay Rabbi     foo();
26*d64ba896SFazlay Rabbi   #pragma omp parallel masked taskloop priority (argc // expected-error {{expected ')'}} expected-note {{to match this '('}}
27*d64ba896SFazlay Rabbi   for (int i = 0; i < 10; ++i)
28*d64ba896SFazlay Rabbi     foo();
29*d64ba896SFazlay Rabbi   #pragma omp parallel masked taskloop priority (argc)) // expected-warning {{extra tokens at the end of '#pragma omp parallel masked taskloop' are ignored}}
30*d64ba896SFazlay Rabbi   for (int i = 0; i < 10; ++i)
31*d64ba896SFazlay Rabbi     foo();
32*d64ba896SFazlay Rabbi   #pragma omp parallel masked taskloop priority (argc > 0 ? argv[1][0] : argv[2][argc] + z)
33*d64ba896SFazlay Rabbi   for (int i = 0; i < 10; ++i)
34*d64ba896SFazlay Rabbi     foo();
35*d64ba896SFazlay Rabbi   #pragma omp parallel masked taskloop priority (foobool(argc)), priority (true) // expected-error {{directive '#pragma omp parallel masked taskloop' cannot contain more than one 'priority' clause}}
36*d64ba896SFazlay Rabbi   for (int i = 0; i < 10; ++i)
37*d64ba896SFazlay Rabbi     foo();
38*d64ba896SFazlay Rabbi   #pragma omp parallel masked taskloop priority (S) // expected-error {{'S' does not refer to a value}}
39*d64ba896SFazlay Rabbi   for (int i = 0; i < 10; ++i)
40*d64ba896SFazlay Rabbi     foo();
41*d64ba896SFazlay Rabbi   #pragma omp parallel masked taskloop priority (argc argc) // expected-error {{expected ')'}} expected-note {{to match this '('}}
42*d64ba896SFazlay Rabbi   for (int i = 0; i < 10; ++i)
43*d64ba896SFazlay Rabbi     foo();
44*d64ba896SFazlay Rabbi   #pragma omp parallel masked taskloop priority(0)
45*d64ba896SFazlay Rabbi   for (int i = 0; i < 10; ++i)
46*d64ba896SFazlay Rabbi     foo();
47*d64ba896SFazlay Rabbi   #pragma omp parallel masked taskloop priority(-1) // expected-error {{argument to 'priority' clause must be a non-negative integer value}}
48*d64ba896SFazlay Rabbi   for (int i = 0; i < 10; ++i)
49*d64ba896SFazlay Rabbi     foo();
50*d64ba896SFazlay Rabbi 
51*d64ba896SFazlay Rabbi   return 0;
52*d64ba896SFazlay Rabbi }
53*d64ba896SFazlay Rabbi 
main(int argc,char ** argv)54*d64ba896SFazlay Rabbi int main(int argc, char **argv) {
55*d64ba896SFazlay Rabbi   int z;
56*d64ba896SFazlay Rabbi   #pragma omp parallel masked taskloop priority // expected-error {{expected '(' after 'priority'}}
57*d64ba896SFazlay Rabbi   for (int i = 0; i < 10; ++i)
58*d64ba896SFazlay Rabbi     foo();
59*d64ba896SFazlay Rabbi   #pragma omp parallel masked taskloop priority ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
60*d64ba896SFazlay Rabbi   for (int i = 0; i < 10; ++i)
61*d64ba896SFazlay Rabbi     foo();
62*d64ba896SFazlay Rabbi   #pragma omp parallel masked taskloop priority () // expected-error {{expected expression}}
63*d64ba896SFazlay Rabbi   for (int i = 0; i < 10; ++i)
64*d64ba896SFazlay Rabbi     foo();
65*d64ba896SFazlay Rabbi   #pragma omp parallel masked taskloop priority (argc // expected-error {{expected ')'}} expected-note {{to match this '('}}
66*d64ba896SFazlay Rabbi   for (int i = 0; i < 10; ++i)
67*d64ba896SFazlay Rabbi     foo();
68*d64ba896SFazlay Rabbi   #pragma omp parallel masked taskloop priority (argc)) // expected-warning {{extra tokens at the end of '#pragma omp parallel masked taskloop' are ignored}}
69*d64ba896SFazlay Rabbi   for (int i = 0; i < 10; ++i)
70*d64ba896SFazlay Rabbi     foo();
71*d64ba896SFazlay Rabbi   #pragma omp parallel masked taskloop priority (argc > 0 ? argv[1][0] : argv[2][argc] - z)
72*d64ba896SFazlay Rabbi   for (int i = 0; i < 10; ++i)
73*d64ba896SFazlay Rabbi     foo();
74*d64ba896SFazlay Rabbi   #pragma omp parallel masked taskloop priority (foobool(argc)), priority (true) // expected-error {{directive '#pragma omp parallel masked taskloop' cannot contain more than one 'priority' clause}}
75*d64ba896SFazlay Rabbi   for (int i = 0; i < 10; ++i)
76*d64ba896SFazlay Rabbi     foo();
77*d64ba896SFazlay Rabbi   #pragma omp parallel masked taskloop priority (S1) // expected-error {{'S1' does not refer to a value}}
78*d64ba896SFazlay Rabbi   for (int i = 0; i < 10; ++i)
79*d64ba896SFazlay Rabbi     foo();
80*d64ba896SFazlay Rabbi   #pragma omp parallel masked taskloop priority (argc argc) // expected-error {{expected ')'}} expected-note {{to match this '('}}
81*d64ba896SFazlay Rabbi   for (int i = 0; i < 10; ++i)
82*d64ba896SFazlay Rabbi     foo();
83*d64ba896SFazlay Rabbi   #pragma omp parallel masked taskloop priority (1 0) // expected-error {{expected ')'}} expected-note {{to match this '('}}
84*d64ba896SFazlay Rabbi   for (int i = 0; i < 10; ++i)
85*d64ba896SFazlay Rabbi     foo();
86*d64ba896SFazlay Rabbi   #pragma omp parallel masked taskloop priority(if(tmain(argc, argv) // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
87*d64ba896SFazlay Rabbi   for (int i = 0; i < 10; ++i)
88*d64ba896SFazlay Rabbi     foo();
89*d64ba896SFazlay Rabbi   #pragma omp parallel masked taskloop priority(0)
90*d64ba896SFazlay Rabbi   for (int i = 0; i < 10; ++i)
91*d64ba896SFazlay Rabbi     foo();
92*d64ba896SFazlay Rabbi   #pragma omp parallel masked taskloop priority(-1) // expected-error {{argument to 'priority' clause must be a non-negative integer value}}
93*d64ba896SFazlay Rabbi   for (int i = 0; i < 10; ++i)
94*d64ba896SFazlay Rabbi     foo();
95*d64ba896SFazlay Rabbi 
96*d64ba896SFazlay Rabbi   return tmain(argc, argv);
97*d64ba896SFazlay Rabbi }
98