blob: bc102a10cd1465e2a61db83995077f8f6a8bdd61 [file] [log] [blame]
#include <stdlib.h>
int x;
long long y;
int r, s, t;
void
foo (const char *a)
{
#pragma omp sections lastprivate (conditional: x, y)
{
if (a[0])
x = a[0];
#pragma omp section
{
if (a[1])
x = a[1];
if (a[2])
y = a[2];
}
#pragma omp section
if (a[3])
y = a[3];
#pragma omp section
if (a[4])
x = a[4];
#pragma omp section
{
if (a[5])
x = a[5];
if (a[6])
y = a[6];
}
}
}
void
bar (const char *a)
{
#pragma omp sections lastprivate (conditional: x, y) reduction (task, +: t)
{
if (a[0])
x = a[0];
#pragma omp section
{
if (a[1])
x = a[1];
if (a[2])
y = a[2];
#pragma omp task in_reduction (+: t)
t++;
}
#pragma omp section
if (a[3])
y = a[3];
#pragma omp section
if (a[4])
x = a[4];
#pragma omp section
{
#pragma omp task in_reduction (+: t)
++t;
if (a[5])
x = a[5];
if (a[6])
y = a[6];
}
}
}
void
baz (const char *a)
{
#pragma omp sections lastprivate (conditional: x, y) reduction (+: r, s)
{
if (a[0])
x = a[0];
#pragma omp section
{
if (a[1])
x = a[1];
++r;
++s;
if (a[2])
y = a[2];
}
#pragma omp section
if (a[3])
y = a[3];
#pragma omp section
{
++s;
if (a[4])
x = a[4];
}
#pragma omp section
{
if (a[5])
x = a[5];
if (a[6])
y = a[6];
++s;
}
}
}
int
main ()
{
#pragma omp parallel
{
foo ("\0\1\2\3\0\5");
if (x != 5 || y != 3)
abort ();
#pragma omp barrier
foo ("\6\0\0\0\0\0\7");
if (x != 6 || y != 7)
abort ();
#pragma omp barrier
foo ("\7\6\5\4\3\2\1");
if (x != 2 || y != 1)
abort ();
#pragma omp barrier
foo ("\0\0\4\3\0\7");
if (x != 7 || y != 3)
abort ();
#pragma omp barrier
bar ("\0\1\2\4\0\5");
if (x != 5 || y != 4 || t != 2)
abort ();
#pragma omp barrier
bar ("\6\0\0\0\0\0\7");
if (x != 6 || y != 7 || t != 4)
abort ();
#pragma omp barrier
bar ("\7\6\5\4\3\2\1");
if (x != 2 || y != 1 || t != 6)
abort ();
#pragma omp barrier
bar ("\0\0\4\3\0\7");
if (x != 7 || y != 3 || t != 8)
abort ();
#pragma omp barrier
baz ("\0\1\2\4\0\5");
if (x != 5 || y != 4 || r != 1 || s != 3)
abort ();
#pragma omp barrier
baz ("\6\0\0\0\0\0\7");
if (x != 6 || y != 7 || r != 2 || s != 6)
abort ();
#pragma omp barrier
baz ("\7\6\5\4\3\2\1");
if (x != 2 || y != 1 || r != 3 || s != 9)
abort ();
#pragma omp barrier
baz ("\0\0\4\3\0\7");
if (x != 7 || y != 3 || r != 4 || s != 12)
abort ();
}
return 0;
}