blob: 6c4370abaa31f1d187a947e65f7236567902cbc4 [file] [log] [blame]
/* { dg-do run } */
/* { dg-require-effective-target tls_runtime } */
/* { dg-additional-options "-std=gnu99" {target c } } */
#include <omp.h>
#include <stdlib.h>
int r, s, u, v, t;
int *x;
void
foo (int *a)
{
int i;
long long j;
#pragma omp for lastprivate (conditional: u, x) ordered
for (i = 15; i < 64; i++)
{
#pragma omp critical
{
if ((a[i] % 5) == 3)
u = i;
}
#pragma omp ordered
{
if ((a[i] % 7) == 2)
x = &a[i];
}
}
#pragma omp for lastprivate (conditional: v) reduction (+:r, s) schedule (nonmonotonic: static) reduction (task, +: t)
for (i = -3; i < 119; i += 2)
{
++s;
#pragma omp taskgroup
{
#pragma omp task in_reduction (+: t)
++t;
if ((a[i + 4] % 11) == 9)
v = i;
else
++r;
}
}
}
int
main ()
{
int a[128], i;
for (i = 0; i < 128; i++)
a[i] = i;
#pragma omp parallel
foo (a);
if (u != 63 || v != 115 || x != &a[58] || r != 55 || s != 61 || t != 61)
abort ();
return 0;
}