1// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 -o - %s
2
3void foo();
4
5template <class T, typename S, int N>
6T tmain(T argc, S **argv) {
7  T i;
8#pragma omp target
9#pragma omp teams
10#pragma omp 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
14#pragma omp teams
15#pragma omp 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 '('}}
16  for (i = 0; i < argc; ++i)
17    foo();
18#pragma omp target
19#pragma omp teams
20#pragma omp distribute parallel for simd proc_bind() // expected-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}}
21  for (i = 0; i < argc; ++i)
22    foo();
23#pragma omp target
24#pragma omp teams
25#pragma omp distribute parallel for simd proc_bind(master // expected-error {{expected ')'}} expected-note {{to match this '('}}
26  for (i = 0; i < argc; ++i)
27    foo();
28#pragma omp target
29#pragma omp teams
30#pragma omp distribute parallel for simd proc_bind(close), proc_bind(spread) // expected-error {{directive '#pragma omp distribute parallel for simd' cannot contain more than one 'proc_bind' clause}}
31  for (i = 0; i < argc; ++i)
32    foo();
33#pragma omp target
34#pragma omp teams
35#pragma omp distribute parallel for simd proc_bind(x) // expected-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}}
36  for (i = 0; i < argc; ++i)
37    foo();
38
39#pragma omp target
40#pragma omp teams
41#pragma omp distribute parallel for simd proc_bind(master)
42  for (i = 0; i < argc; ++i)
43    foo();
44
45#pragma omp parallel proc_bind(close)
46#pragma omp target
47#pragma omp teams
48#pragma omp distribute parallel for simd proc_bind(spread)
49  for (i = 0; i < argc; ++i)
50    foo();
51
52  return T();
53}
54
55int main(int argc, char **argv) {
56  int i;
57#pragma omp target
58#pragma omp teams
59#pragma omp distribute parallel for simd proc_bind // expected-error {{expected '(' after 'proc_bind'}}
60  for (i = 0; i < argc; ++i)
61    foo();
62#pragma omp target
63#pragma omp teams
64#pragma omp 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 '('}}
65  for (i = 0; i < argc; ++i)
66    foo();
67#pragma omp target
68#pragma omp teams
69#pragma omp distribute parallel for simd proc_bind() // expected-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}}
70  for (i = 0; i < argc; ++i)
71    foo();
72#pragma omp target
73#pragma omp teams
74#pragma omp distribute parallel for simd proc_bind(master // expected-error {{expected ')'}} expected-note {{to match this '('}}
75  for (i = 0; i < argc; ++i)
76    foo();
77#pragma omp target
78#pragma omp teams
79#pragma omp distribute parallel for simd proc_bind(close), proc_bind(spread) // expected-error {{directive '#pragma omp distribute parallel for simd' cannot contain more than one 'proc_bind' clause}}
80  for (i = 0; i < argc; ++i)
81    foo();
82#pragma omp target
83#pragma omp teams
84#pragma omp distribute parallel for simd proc_bind(x) // expected-error {{expected 'master', 'close' or 'spread' in OpenMP clause 'proc_bind'}}
85  for (i = 0; i < argc; ++i)
86    foo();
87
88#pragma omp target
89#pragma omp teams
90#pragma omp distribute parallel for simd proc_bind(master)
91  for (i = 0; i < argc; ++i)
92    foo();
93
94#pragma omp parallel proc_bind(close)
95#pragma omp target
96#pragma omp teams
97#pragma omp distribute parallel for simd proc_bind(spread)
98  for (i = 0; i < argc; ++i)
99    foo();
100  return tmain<int, char, 3>(argc, argv);
101}
102