1 /* PR debug/36617 */
2 /* { dg-do run } */
3 /* { dg-options "-g -O0" } */
4 
5 int
f1(void)6 f1 (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 
22 int v2k = 9;
23 
24 int
f2(void)25 f2 (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 
38 int
f3(void)39 f3 (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 
59 int v4k = 9, v4l = 0;
60 
61 int
f4(void)62 f4 (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 
86 int
f5(void)87 f5 (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 
116 int v6k = 9, v6l = 0;
117 
118 int
f6(void)119 f6 (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 
132 int
f7(void)133 f7 (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 
151 int
main(void)152 main (void)
153 {
154   f1 ();
155   f2 ();
156   f3 ();
157   f4 ();
158   f5 ();
159   f6 ();
160   f7 ();
161   return 0;
162 }
163