1 // RUN: %clang_cc1 -verify -fopenmp -o - %s -Wuninitialized
2 
3 // RUN: %clang_cc1 -verify -fopenmp-simd -o - %s -Wuninitialized
4 
5 void foo();
6 
7 template <class T, typename S, int N>
8 T tmain(T argc, S **argv) {
9   T i;
10 #pragma omp target teams distribute parallel for simd proc_bind // expected-error {{expected '(' after 'proc_bind'}}
11   for (i = 0; i < argc; ++i)
12     foo();
13 #pragma omp target teams distribute parallel for simd proc_bind( // expected-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}} expected-error {{expected ')'}} expected-note {{to match this '('}}
14   for (i = 0; i < argc; ++i)
15     foo();
16 #pragma omp target teams distribute parallel for simd proc_bind() // expected-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}}
17   for (i = 0; i < argc; ++i)
18     foo();
19 #pragma omp target teams distribute parallel for simd proc_bind(master // expected-error {{expected ')'}} expected-note {{to match this '('}}
20   for (i = 0; i < argc; ++i)
21     foo();
22 #pragma omp target teams distribute parallel for simd proc_bind(close), proc_bind(spread) // expected-error {{directive '#pragma omp target teams distribute parallel for simd' cannot contain more than one 'proc_bind' clause}}
23   for (i = 0; i < argc; ++i)
24     foo();
25 #pragma omp target teams distribute parallel for simd proc_bind(x) // expected-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}}
26   for (i = 0; i < argc; ++i)
27     foo();
28 
29 #pragma omp target teams distribute parallel for simd proc_bind(master)
30   for (i = 0; i < argc; ++i)
31     foo();
32 
33 #pragma omp parallel proc_bind(close)
34 #pragma omp target teams distribute parallel for simd proc_bind(spread)
35   for (i = 0; i < argc; ++i)
36     foo();
37 
38   return T();
39 }
40 
main(int argc,char ** argv)41 int main(int argc, char **argv) {
42   int i;
43 #pragma omp target teams distribute parallel for simd proc_bind // expected-error {{expected '(' after 'proc_bind'}}
44   for (i = 0; i < argc; ++i)
45     foo();
46 #pragma omp target teams distribute parallel for simd proc_bind( // expected-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}} expected-error {{expected ')'}} expected-note {{to match this '('}}
47   for (i = 0; i < argc; ++i)
48     foo();
49 #pragma omp target teams distribute parallel for simd proc_bind() // expected-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}}
50   for (i = 0; i < argc; ++i)
51     foo();
52 #pragma omp target teams distribute parallel for simd proc_bind(master // expected-error {{expected ')'}} expected-note {{to match this '('}}
53   for (i = 0; i < argc; ++i)
54     foo();
55 #pragma omp target teams distribute parallel for simd proc_bind(close), proc_bind(spread) // expected-error {{directive '#pragma omp target teams distribute parallel for simd' cannot contain more than one 'proc_bind' clause}}
56   for (i = 0; i < argc; ++i)
57     foo();
58 #pragma omp target teams distribute parallel for simd proc_bind(x) // expected-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}}
59   for (i = 0; i < argc; ++i)
60     foo();
61 
62 #pragma omp target teams distribute parallel for simd proc_bind(master)
63   for (i = 0; i < argc; ++i)
64     foo();
65 
66 #pragma omp parallel proc_bind(close)
67 #pragma omp target teams distribute parallel for simd proc_bind(spread)
68   for (i = 0; i < argc; ++i)
69     foo();
70   return tmain<int, char, 3>(argc, argv);
71 }
72