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