blob: cf32b098123d161a2aa9b09a81daade6ebaafee6 [file] [log] [blame]
struct T { T () {}; virtual ~T () {}; int t; };
struct S : virtual public T { int a; void foo (); };
template <typename T>
struct U { U () {}; virtual ~U () {}; T t; };
template <typename T>
struct V : virtual public U<T> { T a; void foo (); };
void
S::foo ()
{
#pragma omp parallel firstprivate (a, t)
{
int *q1 = &a;
int *q2 = &this->a;
int q3 = a;
int q4 = this->a;
int *q5 = &t;
int *q6 = &this->t;
int q7 = t;
int q8 = this->t;
int q9 = T::t;
int q10 = this->T::t;
int &q11 = a;
int &q12 = this->a;
int &q13 = t;
int &q14 = this->t;
int &q15 = S::a;
int &q16 = this->S::a;
int &q17 = T::t;
int &q18 = this->T::t;
}
#pragma omp parallel private (a, t)
{
a = 7;
S::a += 9;
t = 10;
T::t += 11;
}
#pragma omp parallel
{
#pragma omp sections lastprivate (S::a, T::t)
{
#pragma omp section
{
S::a = 6;
T::t = 8;
}
}
}
#pragma omp parallel
{
#pragma omp for firstprivate (a, t) lastprivate (a, t)
for (int i = 0; i < 10; i++)
{
int q19 = a + t;
if (i == 9)
{
a = i;
T::t = i + 2;
}
}
}
#pragma omp sections lastprivate (a, t)
{
#pragma omp section
{
a = 5;
t = 6;
}
}
#pragma omp for firstprivate (a, t) lastprivate (a, t)
for (int i = 0; i < 10; i++)
{
int q20 = a + t;
if (i == 9)
{
a = i;
T::t = i + 2;
}
}
#pragma omp parallel sections lastprivate (a, t)
{
#pragma omp section
{
a = 5;
t = 6;
}
}
#pragma omp parallel
{
#pragma omp task firstprivate (a, t)
{
S::a++;
t++;
}
}
#pragma omp parallel
{
#pragma omp taskloop firstprivate (a, t) lastprivate (t)
for (int i = 0; i < a; i++)
t++;
}
#pragma omp taskloop firstprivate (a, t) lastprivate (t)
for (int i = 0; i < a; i++)
t++;
a = 1;
t = 0;
#pragma omp parallel sections reduction (*: S::a) reduction (+: t)
{
{
a = 1;
t = 2;
}
#pragma omp section
{
a = 2;
t = 3;
}
#pragma omp section
{
a = 3;
t = 4;
}
}
}
template <typename T>
void
V<T>::foo ()
{
#pragma omp parallel firstprivate (a, U<T>::t)
{
int *q1 = &a;
int *q2 = &this->a;
int q3 = a;
int q4 = this->a;
int *q5 = &(U<T>::t);
int *q6 = &this->U<T>::t;
int q7 = U<T>::t;
int q8 = this->U<T>::t;
int q9 = U<T>::t;
int q10 = this->U<T>::t;
int &q11 = a;
int &q12 = this->a;
int &q13 = U<T>::t;
int &q14 = this->U<T>::t;
int &q15 = V::a;
int &q16 = this->V::a;
int &q17 = U<T>::t;
int &q18 = this->U<T>::t;
}
#pragma omp parallel private (a, U<T>::t)
{
a = 7;
V::a += 9;
U<T>::t = 10;
U<T>::t += 11;
}
#pragma omp parallel
{
#pragma omp sections lastprivate (V::a, U<T>::t)
{
#pragma omp section
{
V::a = 6;
U<T>::t = 8;
}
}
}
#pragma omp parallel
{
#pragma omp for firstprivate (a, U<T>::t) lastprivate (a, U<T>::t)
for (int i = 0; i < 10; i++)
{
int q19 = a + U<T>::t;
if (i == 9)
{
a = i;
U<T>::t = i + 2;
}
}
}
#pragma omp sections lastprivate (a, U<T>::t)
{
#pragma omp section
{
a = 5;
U<T>::t = 6;
}
}
#pragma omp for firstprivate (a, U<T>::t) lastprivate (a, U<T>::t)
for (int i = 0; i < 10; i++)
{
int q20 = a + U<T>::t;
if (i == 9)
{
a = i;
U<T>::t = i + 2;
}
}
#pragma omp parallel sections lastprivate (a, U<T>::t)
{
#pragma omp section
{
a = 5;
U<T>::t = 6;
}
}
#pragma omp parallel
{
#pragma omp task firstprivate (a, U<T>::t)
{
V::a++;
U<T>::t++;
}
}
#pragma omp parallel
{
#pragma omp taskloop firstprivate (a, U<T>::t) lastprivate (U<T>::t)
for (int i = 0; i < a; i++)
U<T>::t++;
}
#pragma omp taskloop firstprivate (a, U<T>::t) lastprivate (U<T>::t)
for (int i = 0; i < a; i++)
U<T>::t++;
a = 1;
U<T>::t = 0;
#pragma omp parallel sections reduction (*: V::a) reduction (+: U<T>::t)
{
{
a = 1;
U<T>::t = 2;
}
#pragma omp section
{
a = 2;
U<T>::t = 3;
}
#pragma omp section
{
a = 3;
U<T>::t = 4;
}
}
}
void
bar ()
{
V<int> v;
v.foo ();
}