TT1 struct T { T () {}; virtual ~T () {}; int t; };
2 struct S : virtual public T { int a; void foo (); };
3 template <typename T>
UU4 struct U { U () {}; virtual ~U () {}; T t; };
5 template <typename T>
6 struct V : virtual public U<T> { T a; void foo (); };
7
8 void
foo()9 S::foo ()
10 {
11 #pragma omp parallel firstprivate (a, t)
12 {
13 int *q1 = &a;
14 int *q2 = &this->a;
15 int q3 = a;
16 int q4 = this->a;
17 int *q5 = &t;
18 int *q6 = &this->t;
19 int q7 = t;
20 int q8 = this->t;
21 int q9 = T::t;
22 int q10 = this->T::t;
23 int &q11 = a;
24 int &q12 = this->a;
25 int &q13 = t;
26 int &q14 = this->t;
27 int &q15 = S::a;
28 int &q16 = this->S::a;
29 int &q17 = T::t;
30 int &q18 = this->T::t;
31 }
32 #pragma omp parallel private (a, t)
33 {
34 a = 7;
35 S::a += 9;
36 t = 10;
37 T::t += 11;
38 }
39 #pragma omp parallel
40 {
41 #pragma omp sections lastprivate (S::a, T::t)
42 {
43 #pragma omp section
44 {
45 S::a = 6;
46 T::t = 8;
47 }
48 }
49 }
50 #pragma omp parallel
51 {
52 #pragma omp for firstprivate (a, t) lastprivate (a, t)
53 for (int i = 0; i < 10; i++)
54 {
55 int q19 = a + t;
56 if (i == 9)
57 {
58 a = i;
59 T::t = i + 2;
60 }
61 }
62 }
63 #pragma omp sections lastprivate (a, t)
64 {
65 #pragma omp section
66 {
67 a = 5;
68 t = 6;
69 }
70 }
71 #pragma omp for firstprivate (a, t) lastprivate (a, t)
72 for (int i = 0; i < 10; i++)
73 {
74 int q20 = a + t;
75 if (i == 9)
76 {
77 a = i;
78 T::t = i + 2;
79 }
80 }
81 #pragma omp parallel sections lastprivate (a, t)
82 {
83 #pragma omp section
84 {
85 a = 5;
86 t = 6;
87 }
88 }
89 #pragma omp parallel
90 {
91 #pragma omp task firstprivate (a, t)
92 {
93 S::a++;
94 t++;
95 }
96 }
97 #pragma omp parallel
98 {
99 #pragma omp taskloop firstprivate (a, t) lastprivate (t)
100 for (int i = 0; i < a; i++)
101 t++;
102 }
103 #pragma omp taskloop firstprivate (a, t) lastprivate (t)
104 for (int i = 0; i < a; i++)
105 t++;
106 a = 1;
107 t = 0;
108 #pragma omp parallel sections reduction (*: S::a) reduction (+: t)
109 {
110 {
111 a = 1;
112 t = 2;
113 }
114 #pragma omp section
115 {
116 a = 2;
117 t = 3;
118 }
119 #pragma omp section
120 {
121 a = 3;
122 t = 4;
123 }
124 }
125 }
126
127 template <typename T>
128 void
foo()129 V<T>::foo ()
130 {
131 #pragma omp parallel firstprivate (a, U<T>::t)
132 {
133 int *q1 = &a;
134 int *q2 = &this->a;
135 int q3 = a;
136 int q4 = this->a;
137 int *q5 = &(U<T>::t);
138 int *q6 = &this->U<T>::t;
139 int q7 = U<T>::t;
140 int q8 = this->U<T>::t;
141 int q9 = U<T>::t;
142 int q10 = this->U<T>::t;
143 int &q11 = a;
144 int &q12 = this->a;
145 int &q13 = U<T>::t;
146 int &q14 = this->U<T>::t;
147 int &q15 = V::a;
148 int &q16 = this->V::a;
149 int &q17 = U<T>::t;
150 int &q18 = this->U<T>::t;
151 }
152 #pragma omp parallel private (a, U<T>::t)
153 {
154 a = 7;
155 V::a += 9;
156 U<T>::t = 10;
157 U<T>::t += 11;
158 }
159 #pragma omp parallel
160 {
161 #pragma omp sections lastprivate (V::a, U<T>::t)
162 {
163 #pragma omp section
164 {
165 V::a = 6;
166 U<T>::t = 8;
167 }
168 }
169 }
170 #pragma omp parallel
171 {
172 #pragma omp for firstprivate (a, U<T>::t) lastprivate (a, U<T>::t)
173 for (int i = 0; i < 10; i++)
174 {
175 int q19 = a + U<T>::t;
176 if (i == 9)
177 {
178 a = i;
179 U<T>::t = i + 2;
180 }
181 }
182 }
183 #pragma omp sections lastprivate (a, U<T>::t)
184 {
185 #pragma omp section
186 {
187 a = 5;
188 U<T>::t = 6;
189 }
190 }
191 #pragma omp for firstprivate (a, U<T>::t) lastprivate (a, U<T>::t)
192 for (int i = 0; i < 10; i++)
193 {
194 int q20 = a + U<T>::t;
195 if (i == 9)
196 {
197 a = i;
198 U<T>::t = i + 2;
199 }
200 }
201 #pragma omp parallel sections lastprivate (a, U<T>::t)
202 {
203 #pragma omp section
204 {
205 a = 5;
206 U<T>::t = 6;
207 }
208 }
209 #pragma omp parallel
210 {
211 #pragma omp task firstprivate (a, U<T>::t)
212 {
213 V::a++;
214 U<T>::t++;
215 }
216 }
217 #pragma omp parallel
218 {
219 #pragma omp taskloop firstprivate (a, U<T>::t) lastprivate (U<T>::t)
220 for (int i = 0; i < a; i++)
221 U<T>::t++;
222 }
223 #pragma omp taskloop firstprivate (a, U<T>::t) lastprivate (U<T>::t)
224 for (int i = 0; i < a; i++)
225 U<T>::t++;
226 a = 1;
227 U<T>::t = 0;
228 #pragma omp parallel sections reduction (*: V::a) reduction (+: U<T>::t)
229 {
230 {
231 a = 1;
232 U<T>::t = 2;
233 }
234 #pragma omp section
235 {
236 a = 2;
237 U<T>::t = 3;
238 }
239 #pragma omp section
240 {
241 a = 3;
242 U<T>::t = 4;
243 }
244 }
245 }
246
247 void
bar()248 bar ()
249 {
250 V<int> v;
251 v.foo ();
252 }
253