OSDN Git Service

2006-01-18 Richard Henderson <rth@redhat.com>
[pf3gnuchains/gcc-fork.git] / libgomp / testsuite / libgomp.c / shared-1.c
1 extern void abort (void);
2
3 struct Y
4 {
5   int l[5][10];
6 };
7
8 struct X
9 {
10   struct Y y;
11   float b[10];
12 };
13
14 void
15 parallel (int a, int b)
16 {
17   int i, j;
18   struct X A[10][5];
19   a = b = 3;
20
21   for (i = 0; i < 10; i++)
22     for (j = 0; j < 5; j++)
23       A[i][j].y.l[3][3] = -10;
24
25   #pragma omp parallel shared (a, b, A) num_threads (5)
26     {
27       int i, j;
28
29       #pragma omp atomic
30       a += omp_get_num_threads ();
31
32       #pragma omp atomic
33       b += omp_get_num_threads ();
34
35       #pragma omp for private (j)
36       for (i = 0; i < 10; i++)
37         for (j = 0; j < 5; j++)
38           A[i][j].y.l[3][3] += 20;
39
40     }
41
42   for (i = 0; i < 10; i++)
43     for (j = 0; j < 5; j++)
44       if (A[i][j].y.l[3][3] != 10)
45         abort ();
46
47   if (a != 28)
48     abort ();
49
50   if (b != 28)
51     abort ();
52 }
53
54 main()
55 {
56   parallel (1, 2);
57   return 0;
58 }