1 // RUN: %clang_cc1 -verify -fopenmp %s
6 bool foobool(int argc) {
10 struct S1; // expected-note {{declared here}} expected-note {{forward declaration of 'S1'}}
16 static float S2s; // expected-note {{predetermined as shared}}
25 const S3 c; // expected-note {{predetermined as shared}}
26 const S3 ca[5]; // expected-note {{predetermined as shared}}
27 extern const int f; // expected-note {{predetermined as shared}}
30 S4(); // expected-note {{implicitly declared private here}}
36 S5():a(0) {} // expected-note {{implicitly declared private here}}
42 #pragma omp threadprivate(h) // expected-note {{defined as threadprivate or thread local}}
45 int main(int argc, char **argv) {
46 const int d = 5; // expected-note {{predetermined as shared}}
47 const int da[5] = { 0 }; // expected-note {{predetermined as shared}}
54 #pragma omp teams distribute parallel for simd private // expected-error {{expected '(' after 'private'}}
55 for (int k = 0; k < argc; ++k) ++k;
58 #pragma omp teams distribute parallel for simd private ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
59 for (int k = 0; k < argc; ++k) ++k;
62 #pragma omp teams distribute parallel for simd private () // expected-error {{expected expression}}
63 for (int k = 0; k < argc; ++k) ++k;
66 #pragma omp teams distribute parallel for simd private (argc // expected-error {{expected ')'}} expected-note {{to match this '('}}
67 for (int k = 0; k < argc; ++k) ++k;
70 #pragma omp teams distribute parallel for simd private (argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
71 for (int k = 0; k < argc; ++k) ++k;
74 #pragma omp teams distribute parallel for simd private (argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}
75 for (int k = 0; k < argc; ++k) ++k;
78 #pragma omp teams distribute parallel for simd private (argc)
79 for (int k = 0; k < argc; ++k) ++k;
82 #pragma omp teams distribute parallel for simd private (S1) // expected-error {{'S1' does not refer to a value}}
83 for (int k = 0; k < argc; ++k) ++k;
86 #pragma omp teams distribute parallel for simd private (a, b, c, d, f) // expected-error {{private variable with incomplete type 'S1'}} expected-error 3 {{shared variable cannot be private}}
87 for (int k = 0; k < argc; ++k) ++k;
90 #pragma omp teams distribute parallel for simd private (argv[1]) // expected-error {{expected variable name}}
91 for (int k = 0; k < argc; ++k) ++k;
94 #pragma omp teams distribute parallel for simd private(ba)
95 for (int k = 0; k < argc; ++k) ++k;
98 #pragma omp teams distribute parallel for simd private(ca) // expected-error {{shared variable cannot be private}}
99 for (int k = 0; k < argc; ++k) ++k;
102 #pragma omp teams distribute parallel for simd private(da) // expected-error {{shared variable cannot be private}}
103 for (int k = 0; k < argc; ++k) ++k;
106 #pragma omp teams distribute parallel for simd private(S2::S2s) // expected-error {{shared variable cannot be private}}
107 for (int k = 0; k < argc; ++k) ++k;
110 #pragma omp teams distribute parallel for simd private(e, g) // expected-error {{calling a private constructor of class 'S4'}} expected-error {{calling a private constructor of class 'S5'}}
111 for (int k = 0; k < argc; ++k) ++k;
114 #pragma omp teams distribute parallel for simd private(h) // expected-error {{threadprivate or thread local variable cannot be private}}
115 for (int k = 0; k < argc; ++k) ++k;
118 #pragma omp teams distribute parallel for simd shared(i)
119 for (int k = 0; k < argc; ++k) ++k;
122 #pragma omp teams distribute parallel for simd firstprivate(i), private(i) // expected-error {{firstprivate variable cannot be private}} expected-note {{defined as firstprivate}}
123 for (int k = 0; k < argc; ++k) ++k;
126 #pragma omp teams distribute parallel for simd private(j)
127 for (int k = 0; k < argc; ++k) ++k;
130 #pragma omp teams distribute parallel for simd reduction(+:i)
131 for (int k = 0; k < argc; ++k) ++k;
133 #pragma omp distribute private(i)
134 for (int k = 0; k < 10; ++k) {
136 #pragma omp teams distribute parallel for simd private(i)
137 for (int x = 0; x < 10; ++x) foo();
141 #pragma omp teams distribute parallel for simd firstprivate(i)
142 for (int k = 0; k < 10; ++k) {