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