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