1/* PR debug/36617 */
2/* { dg-do run } */
3/* { dg-options "-g -fopenmp -O0" } */
4
5int
6f1 (void)
7{
8  int v1i, v1j, v1k, v1l = 0;
9  v1i = 6;
10  v1j = 8;
11  #pragma omp parallel private (v1k) firstprivate (v1j) shared (v1i) reduction (+:v1l)
12  {
13    v1k = v1i + v1j;
14    {
15      int v1m = 1;
16      v1l = v1m;
17    }
18  }
19  return v1l;
20}
21
22int v2k = 9;
23
24int
25f2 (void)
26{
27  int v2i = 6, v2j = 7;
28  #pragma omp single private (v2i) firstprivate (v2k)
29  {
30    int v2l = v2j + v2k;
31    v2i = 8;
32    v2k = 10;
33    v2j = v2l + v2i;
34  }
35  return v2i + v2j;
36}
37
38int
39f3 (void)
40{
41  int v3i = 6, v3j = 7, v3k = 9;
42  #pragma omp parallel
43  {
44    #pragma omp master
45      v3i++;
46    #pragma omp single private (v3i) firstprivate (v3k)
47    {
48      int v3l = v3j + v3k;
49      v3i = 8;
50      v3k = 10;
51      v3j = v3l + v3i;
52    }
53    #pragma omp atomic
54      v3k++;
55  }
56  return v3i + v3j;
57}
58
59int v4k = 9, v4l = 0;
60
61int
62f4 (void)
63{
64  int v4i = 6, v4j = 7, v4n = 0;
65  #pragma omp sections private (v4i) firstprivate (v4k) reduction (+:v4l)
66  {
67    #pragma omp section
68    {
69      int v4m = v4j + v4k;
70      v4i = 8;
71      v4k = 10;
72      v4l++;
73      v4n = v4m + v4i;
74    }
75    #pragma omp section
76    {
77      int v4o = v4j + v4k;
78      v4i = 10;
79      v4k = 11;
80      v4l++;
81    }
82  }
83  return v4i + v4j + v4l + v4n;
84}
85
86int
87f5 (void)
88{
89  int v5i = 6, v5j = 7, v5k = 9, v5l = 0, v5n = 0, v5p = 0;
90  #pragma omp parallel
91  {
92    #pragma omp master
93      v5p++;
94    #pragma omp sections private (v5i) firstprivate (v5k) reduction (+:v5l)
95    {
96      #pragma omp section
97      {
98	int v5m = v5j + v5k;
99	v5i = 8;
100	v5k = 10;
101	v5l++;
102	v5n = v5m + v5i;
103      }
104      #pragma omp section
105      {
106	int v5o = v5j + v5k;
107	v5i = 10;
108	v5k = 11;
109	v5l++;
110      }
111    }
112  }
113  return v5i + v5j + v5l + v5n + v5p;
114}
115
116int v6k = 9, v6l = 0;
117
118int
119f6 (void)
120{
121  int v6i = 6, v6j = 7, v6n = 0;
122  #pragma omp for private (v6i) firstprivate (v6k) reduction (+:v6l)
123  for (v6n = 0; v6n < 3; v6n++)
124    {
125      int v6m = v6j + v6k;
126      v6i = 8;
127      v6l++;
128    }
129  return v6i + v6j + v6k + v6l + v6n;
130}
131
132int
133f7 (void)
134{
135  int v7i = 6, v7j = 7, v7k = 9, v7l = 0, v7n = 0, v7o = 1;
136  #pragma omp parallel
137  {
138    #pragma omp master
139      v7o++;
140    #pragma omp for private (v7i) firstprivate (v7k) reduction (+:v7l)
141    for (v7n = 0; v7n < 3; v7n++)
142      {
143	int v7m = v7j + v7k;
144	v7i = 8;
145	v7l++;
146      }
147  }
148  return v7i + v7j + v7k + v7l + v7n;
149}
150
151int
152main (void)
153{
154  f1 ();
155  f2 ();
156  f3 ();
157  f4 ();
158  f5 ();
159  f6 ();
160  f7 ();
161  return 0;
162}
163