2018-01-22 Sebastian Perta <sebastian.perta@renesas.com>
[official-gcc.git] / libgomp / testsuite / libgomp.c++ / shared-1.C
blob2f61daa12130411b9cd7a59107db5da20092f057
1 #include <omp.h>
3 extern "C" void abort (void);
5 struct Y
7   int l[5][10];
8 };
10 struct X
12   struct Y y;
13   float b[10];
16 void
17 parallel (int a, int b)
19   int i, j;
20   struct X A[10][5];
21   a = b = 3;
23   for (i = 0; i < 10; i++)
24     for (j = 0; j < 5; j++)
25       A[i][j].y.l[3][3] = -10;
27   #pragma omp parallel shared (a, b, A) num_threads (5)
28     {
29       int i, j;
31       #pragma omp atomic
32       a += omp_get_num_threads ();
34       #pragma omp atomic
35       b += omp_get_num_threads ();
37       #pragma omp for private (j)
38       for (i = 0; i < 10; i++)
39         for (j = 0; j < 5; j++)
40           A[i][j].y.l[3][3] += 20;
42     }
44   for (i = 0; i < 10; i++)
45     for (j = 0; j < 5; j++)
46       if (A[i][j].y.l[3][3] != 10)
47         abort ();
49   if (a != 28)
50     abort ();
52   if (b != 28)
53     abort ();
56 int
57 main()
59   parallel (1, 2);
60   return 0;