Clang Project

clang_source_code/test/OpenMP/simd_private_messages.cpp
1// RUN: %clang_cc1 -verify -fopenmp %s
2
3// RUN: %clang_cc1 -verify -fopenmp-simd %s
4
5extern int omp_default_mem_alloc;
6void foo() {
7}
8
9bool foobool(int argc) {
10  return argc;
11}
12
13struct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}}
14extern S1 a;
15class S2 {
16  mutable int a;
17public:
18  S2():a(0) { }
19};
20const S2 b;
21const S2 ba[5];
22class S3 {
23  int a;
24public:
25  S3():a(0) { }
26};
27const S3 ca[5];
28class S4 {
29  int a;
30  S4(); // expected-note {{implicitly declared private here}}
31public:
32  S4(int v) : a(v) {
33#pragma omp simd private(a) private(this->a)
34    for (int k = 0; k < v; ++k)
35      ++this->a;
36  }
37};
38class S5 {
39  int a;
40  S5():a(0) {} // expected-note {{implicitly declared private here}}
41public:
42  S5(int v):a(v) { }
43  S5 &operator=(S5 &s) {
44#pragma omp simd private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}}
45    for (int k = 0; k < s.a; ++k)
46      ++s.a;
47    return *this;
48  }
49};
50
51template <typename T>
52class S6 {
53public:
54  T a;
55
56  S6() : a(0) {}
57  S6(T v) : a(v) {
58#pragma omp simd private(a) private(this->a)
59    for (int k = 0; k < v; ++k)
60      ++this->a;
61  }
62  S6 &operator=(S6 &s) {
63#pragma omp simd private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}}
64    for (int k = 0; k < s.a; ++k)
65      ++s.a;
66    return *this;
67  }
68};
69
70template <typename T>
71class S7 : public T {
72  T a;
73  S7() : a(0) {}
74
75public:
76  S7(T v) : a(v) {
77#pragma omp simd private(a) private(this->a) private(T::a)
78    for (int k = 0; k < a.a; ++k)
79      ++this->a.a;
80  }
81  S7 &operator=(S7 &s) {
82#pragma omp simd private(a) private(this->a) private(s.a) private(s.T::a) // expected-error 2 {{expected variable name or data member of current class}}
83    for (int k = 0; k < s.a.a; ++k)
84      ++s.a.a;
85    return *this;
86  }
87};
88
89S3 h;
90#pragma omp threadprivate(h) // expected-note 2 {{defined as threadprivate or thread local}}
91
92template<class I, class C> int foomain(I argc, C **argv) {
93  I e(4);
94  I g(5);
95  int i;
96  int &j = i;
97  #pragma omp simd private // expected-error {{expected '(' after 'private'}}
98  for (int k = 0; k < argc; ++k) ++k;
99  #pragma omp simd private ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
100  for (int k = 0; k < argc; ++k) ++k;
101  #pragma omp simd private () // expected-error {{expected expression}}
102  for (int k = 0; k < argc; ++k) ++k;
103  #pragma omp simd private (argc // expected-error {{expected ')'}} expected-note {{to match this '('}}
104  for (int k = 0; k < argc; ++k) ++k;
105  #pragma omp simd private (argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
106  for (int k = 0; k < argc; ++k) ++k;
107  #pragma omp simd private (argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}
108  for (int k = 0; k < argc; ++k) ++k;
109  #pragma omp simd private (argc) allocate , allocate(, allocate(omp_default , allocate(omp_default_mem_alloc, allocate(omp_default_mem_alloc:, allocate(omp_default_mem_alloc: argc, allocate(omp_default_mem_alloc: argv), allocate(argv) // expected-error {{expected '(' after 'allocate'}} expected-error 2 {{expected expression}} expected-error 2 {{expected ')'}} expected-error {{use of undeclared identifier 'omp_default'}} expected-note 2 {{to match this '('}}
110  for (int k = 0; k < argc; ++k) ++k;
111  #pragma omp simd private (S1) // expected-error {{'S1' does not refer to a value}}
112  for (int k = 0; k < argc; ++k) ++k;
113  #pragma omp simd private (a, b) // expected-error {{private variable with incomplete type 'S1'}}
114  for (int k = 0; k < argc; ++k) ++k;
115  #pragma omp simd private (argv[1]) // expected-error {{expected variable name}}
116  for (int k = 0; k < argc; ++k) ++k;
117  #pragma omp simd private(e, g)
118  for (int k = 0; k < argc; ++k) ++k;
119  #pragma omp simd private(h) // expected-error {{threadprivate or thread local variable cannot be private}}
120  for (int k = 0; k < argc; ++k) ++k;
121  #pragma omp simd shared(i) // expected-error {{unexpected OpenMP clause 'shared' in directive '#pragma omp simd'}}
122  for (int k = 0; k < argc; ++k) ++k;
123  #pragma omp parallel
124  {
125    int v = 0;
126    int i;
127    #pragma omp simd private(i)
128    for (int k = 0; k < argc; ++k) { i = k; v += i; }
129  }
130  #pragma omp parallel shared(i)
131  #pragma omp parallel private(i)
132  #pragma omp simd private(j)
133  for (int k = 0; k < argc; ++k) ++k;
134  #pragma omp simd private(i)
135  for (int k = 0; k < argc; ++k) ++k;
136  return 0;
137}
138
139namespace A {
140double x;
141#pragma omp threadprivate(x) // expected-note {{defined as threadprivate or thread local}}
142}
143namespace B {
144using A::x;
145}
146
147int main(int argc, char **argv) {
148  S4 e(4);
149  S5 g(5);
150  S6<float> s6(0.0) , s6_0(1.0);
151  S7<S6<float> > s7(0.0) , s7_0(1.0);
152  int i;
153  int &j = i;
154  #pragma omp simd private // expected-error {{expected '(' after 'private'}}
155  for (int k = 0; k < argc; ++k) ++k;
156  #pragma omp simd private ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
157  for (int k = 0; k < argc; ++k) ++k;
158  #pragma omp simd private () // expected-error {{expected expression}}
159  for (int k = 0; k < argc; ++k) ++k;
160  #pragma omp simd private (argc // expected-error {{expected ')'}} expected-note {{to match this '('}}
161  for (int k = 0; k < argc; ++k) ++k;
162  #pragma omp simd private (argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
163  for (int k = 0; k < argc; ++k) ++k;
164  #pragma omp simd private (argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}
165  for (int k = 0; k < argc; ++k) ++k;
166  #pragma omp simd private (argc)
167  for (int k = 0; k < argc; ++k) ++k;
168  #pragma omp simd private (S1) // expected-error {{'S1' does not refer to a value}}
169  for (int k = 0; k < argc; ++k) ++k;
170  #pragma omp simd private (a, b) // expected-error {{private variable with incomplete type 'S1'}}
171  for (int k = 0; k < argc; ++k) ++k;
172  #pragma omp simd private (argv[1]) // expected-error {{expected variable name}}
173  for (int k = 0; k < argc; ++k) ++k;
174  #pragma omp simd private(e, g) // expected-error {{calling a private constructor of class 'S4'}} expected-error {{calling a private constructor of class 'S5'}}
175  for (int k = 0; k < argc; ++k) ++k;
176  #pragma omp simd private(h, B::x) // expected-error 2 {{threadprivate or thread local variable cannot be private}}
177  for (int k = 0; k < argc; ++k) ++k;
178  #pragma omp simd shared(i) // expected-error {{unexpected OpenMP clause 'shared' in directive '#pragma omp simd'}}
179  for (int k = 0; k < argc; ++k) ++k;
180  #pragma omp parallel
181  {
182    int i;
183    #pragma omp simd private(i)
184    for (int k = 0; k < argc; ++k) ++k;
185  }
186  #pragma omp parallel shared(i)
187  #pragma omp parallel private(i)
188  #pragma omp simd private(j)
189  for (int k = 0; k < argc; ++k) ++k;
190  #pragma omp simd private(i)
191  for (int k = 0; k < argc; ++k) ++k;
192
193  s6 = s6_0; // expected-note {{in instantiation of member function 'S6<float>::operator=' requested here}}
194  s7 = s7_0; // expected-note {{in instantiation of member function 'S7<S6<float> >::operator=' requested here}}
195  return foomain(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<int, char>' requested here}}
196}
197
198