Retro68/gcc/libgomp/testsuite/libgomp.c++/target-6.C
2017-04-10 13:32:00 +02:00

65 lines
1.3 KiB
C

extern "C" void abort (void);
struct S { int s, t; };
void
foo (int &x, int &y, S &u, S &v, double &s, double &t)
{
int err = 0, i;
int a[y - 2], b[y - 2];
int (&c)[y - 2] = a, (&d)[y - 2] = b;
for (i = 0; i < y - 2; i++)
{
c[i] = i;
d[i] = 3 + i;
}
#pragma omp target private (x, u, s, c, i) firstprivate (y, v, t, d) map(from:err)
{
x = y;
u = v;
s = t;
for (i = 0; i < y - 2; i++)
c[i] = d[i];
err = (x != 6 || y != 6
|| u.s != 9 || u.t != 10 || v.s != 9 || v.t != 10
|| s != 12.5 || t != 12.5);
for (i = 0; i < y - 2; i++)
if (d[i] != 3 + i || c[i] != 3 + i)
err = 1;
else
{
c[i] += 2 * i;
d[i] += i;
}
x += 1;
y += 2;
u.s += 3;
v.t += 4;
s += 2.5;
t += 3.0;
if (x != 7 || y != 8
|| u.s != 12 || u.t != 10 || v.s != 9 || v.t != 14
|| s != 15.0 || t != 15.5)
err = 1;
for (i = 0; i < y - 4; i++)
if (d[i] != 3 + 2 * i || c[i] != 3 + 3 * i)
err = 1;
}
if (err || x != 5 || y != 6
|| u.s != 7 || u.t != 8 || v.s != 9 || v.t != 10
|| s != 11.5 || t != 12.5)
abort ();
for (i = 0; i < y - 2; i++)
if (d[i] != 3 + i || c[i] != i)
abort ();
}
int
main ()
{
int x = 5, y = 6;
S u = { 7, 8 }, v = { 9, 10 };
double s = 11.5, t = 12.5;
foo (x, y, u, v, s, t);
return 0;
}