blob: 2f61daa12130411b9cd7a59107db5da20092f057 [file] [log] [blame]
#include <omp.h>
extern "C" void abort (void);
struct Y
{
int l[5][10];
};
struct X
{
struct Y y;
float b[10];
};
void
parallel (int a, int b)
{
int i, j;
struct X A[10][5];
a = b = 3;
for (i = 0; i < 10; i++)
for (j = 0; j < 5; j++)
A[i][j].y.l[3][3] = -10;
#pragma omp parallel shared (a, b, A) num_threads (5)
{
int i, j;
#pragma omp atomic
a += omp_get_num_threads ();
#pragma omp atomic
b += omp_get_num_threads ();
#pragma omp for private (j)
for (i = 0; i < 10; i++)
for (j = 0; j < 5; j++)
A[i][j].y.l[3][3] += 20;
}
for (i = 0; i < 10; i++)
for (j = 0; j < 5; j++)
if (A[i][j].y.l[3][3] != 10)
abort ();
if (a != 28)
abort ();
if (b != 28)
abort ();
}
int
main()
{
parallel (1, 2);
return 0;
}