pr30494.c revision 1.1.1.1
1/* PR middle-end/30494 */
2/* { dg-do run } */
3
4#include <omp.h>
5
6int errors;
7
8int
9check (int m, int i, int *v, int *w)
10{
11  int j;
12  int n = omp_get_thread_num ();
13  for (j = 0; j < m; j++)
14    if (v[j] != j + n)
15      #pragma omp atomic
16	errors += 1;
17  for (j = 0; j < m * 3 + i; j++)
18    if (w[j] != j + 10 + n)
19      #pragma omp atomic
20	errors += 1;
21}
22
23int
24foo (int n, int m)
25{
26  int i;
27#pragma omp for
28  for (i = 0; i < 6; i++)
29    {
30      int v[n], w[n * 3 + i], j;
31      for (j = 0; j < n; j++)
32	v[j] = j + omp_get_thread_num ();
33      for (j = 0; j < n * 3 + i; j++)
34	w[j] = j + 10 + omp_get_thread_num ();
35      check (m, i, v, w);
36    }
37  return 0;
38}
39
40int
41bar (int n, int m)
42{
43  int i;
44#pragma omp parallel for num_threads (4)
45  for (i = 0; i < 6; i++)
46    {
47      int v[n], w[n * 3 + i], j;
48      for (j = 0; j < n; j++)
49	v[j] = j + omp_get_thread_num ();
50      for (j = 0; j < n * 3 + i; j++)
51	w[j] = j + 10 + omp_get_thread_num ();
52      check (m, i, v, w);
53    }
54  return 0;
55}
56
57int
58main (void)
59{
60#pragma omp parallel num_threads (3)
61  foo (128, 128);
62  bar (256, 256);
63  return 0;
64}
65