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