OSDN Git Service

2010-04-13 Richard Guenther <rguenther@suse.de>
[pf3gnuchains/gcc-fork.git] / libgomp / testsuite / libgomp.c / vla-1.c
1 /* { dg-do run } */
2
3 #include <omp.h>
4 #include <stdlib.h>
5 #include <string.h>
6
7 int
8 main (int argc, char **argv[])
9 {
10   int n = argc < 5 ? 12 : 31, i, m, l;
11   char a[n + 3];
12   unsigned short b[n / 2 - 1];
13   int c[n * 2 + 1];
14
15   for (i = 0; i < n + 3; i++)
16     a[i] = i;
17   for (i = 0; i < n / 2 - 1; i++)
18     b[i] = (i << 8) | i;
19   for (i = 0; i < n * 2 + 1; i++)
20     c[i] = (i << 24) | i;
21   l = 0;
22   m = n;
23 #pragma omp parallel default (shared) num_threads (4) \
24   firstprivate (a, m) private (b, i) reduction (+:l)
25   {
26     for (i = 0; i < m + 3; i++)
27       if (a[i] != i)
28         l++;
29     for (i = 0; i < m * 2 + 1; i++)
30       if (c[i] != ((i << 24) | i))
31         l++;
32 #pragma omp barrier
33     memset (a, omp_get_thread_num (), m + 3);
34     for (i = 0; i < m / 2 - 1; i++)
35       b[i] = a[0] + 7;
36 #pragma omp master
37     {
38       for (i = 0; i < m * 2 + 1; i++)
39         c[i] = a[0] + 16;
40     }
41 #pragma omp barrier
42     if (a[0] != omp_get_thread_num ())
43       l++;
44     for (i = 1; i < m + 3; i++)
45       if (a[i] != a[0])
46         l++;
47     for (i = 0; i < m / 2 - 1; i++)
48       if (b[i] != a[0] + 7)
49         l++;
50     for (i = 0; i < m * 2 + 1; i++)
51       if (c[i] != 16)
52         l++;
53   }
54   if (l)
55     abort ();
56   for (i = 0; i < n * 2 + 1; i++)
57     if (c[i] != 16)
58       l++;
59   return 0;
60 }