Imported Upstream version 4.8.1
[platform/upstream/gcc48.git] / gcc / testsuite / gcc.dg / gomp / nesting-1.c
1 /* { dg-do compile } */
2 /* { dg-options "-fopenmp" } */
3
4 void
5 f1 (void)
6 {
7   int i, j;
8   #pragma omp for
9   for (i = 0; i < 3; i++)
10     {
11       #pragma omp for           /* { dg-error "may not be closely nested" } */
12       for (j = 0; j < 3; j++)
13         ;
14       #pragma omp sections      /* { dg-error "may not be closely nested" } */
15       {
16         ;
17       #pragma omp section
18         ;
19       }
20       #pragma omp single        /* { dg-error "may not be closely nested" } */
21         ;
22     #pragma omp master          /* { dg-error "may not be closely nested" } */
23       ;
24       #pragma omp barrier       /* { dg-error "may not be closely nested" } */
25     }
26   #pragma omp sections
27   {
28     #pragma omp for             /* { dg-error "may not be closely nested" } */
29     for (j = 0; j < 3; j++)
30       ;
31     #pragma omp sections        /* { dg-error "may not be closely nested" } */
32     {
33       ;
34     #pragma omp section
35       ;
36     }
37     #pragma omp single          /* { dg-error "may not be closely nested" } */
38       ;
39     #pragma omp master          /* { dg-error "may not be closely nested" } */
40       ;
41     #pragma omp section
42       ;
43   }
44   #pragma omp single
45   {
46     #pragma omp for             /* { dg-error "may not be closely nested" } */
47     for (j = 0; j < 3; j++)
48       ;
49     #pragma omp sections        /* { dg-error "may not be closely nested" } */
50     {
51       ;
52     #pragma omp section
53       ;
54     }
55     #pragma omp single          /* { dg-error "may not be closely nested" } */
56       ;
57     #pragma omp master          /* { dg-error "may not be closely nested" } */
58       ;
59     #pragma omp barrier         /* { dg-error "may not be closely nested" } */
60   }
61   #pragma omp master
62   {
63     #pragma omp for             /* { dg-error "may not be closely nested" } */
64     for (j = 0; j < 3; j++)
65       ;
66     #pragma omp sections        /* { dg-error "may not be closely nested" } */
67     {
68       ;
69     #pragma omp section
70       ;
71     }
72     #pragma omp single          /* { dg-error "may not be closely nested" } */
73       ;
74     #pragma omp master
75       ;
76     #pragma omp barrier         /* { dg-error "may not be closely nested" } */
77   }
78   #pragma omp task
79   {
80     #pragma omp for             /* { dg-error "may not be closely nested" } */
81     for (j = 0; j < 3; j++)
82       ;
83     #pragma omp sections        /* { dg-error "may not be closely nested" } */
84     {
85       ;
86     #pragma omp section
87       ;
88     }
89     #pragma omp single          /* { dg-error "may not be closely nested" } */
90       ;
91     #pragma omp master          /* { dg-error "may not be closely nested" } */
92       ;
93     #pragma omp barrier         /* { dg-error "may not be closely nested" } */
94   }
95   #pragma omp parallel
96   {
97     #pragma omp for
98     for (j = 0; j < 3; j++)
99       ;
100     #pragma omp sections
101     {
102       ;
103     #pragma omp section
104       ;
105     }
106     #pragma omp single
107       ;
108     #pragma omp master
109       ;
110     #pragma omp barrier
111   }
112 }
113
114 void
115 f2 (void)
116 {
117   int i, j;
118   #pragma omp ordered
119   {
120     #pragma omp for             /* { dg-error "may not be closely nested" } */
121     for (j = 0; j < 3; j++)
122       ;
123     #pragma omp sections        /* { dg-error "may not be closely nested" } */
124     {
125       ;
126     #pragma omp section
127       ;
128     }
129     #pragma omp single          /* { dg-error "may not be closely nested" } */
130       ;
131     #pragma omp master
132       ;
133     #pragma omp barrier         /* { dg-error "may not be closely nested" } */
134   }
135 }
136
137 void
138 f3 (void)
139 {
140   #pragma omp critical
141   {
142     #pragma omp ordered         /* { dg-error "may not be closely nested" } */
143       ;
144   }
145 }
146
147 void
148 f4 (void)
149 {
150   #pragma omp task
151   {
152     #pragma omp ordered         /* { dg-error "may not be closely nested" } */
153       ;
154   }
155 }
156
157 void
158 f5 (void)
159 {
160   int i;
161   #pragma omp for
162   for (i = 0; i < 10; i++)
163     {
164       #pragma omp ordered               /* { dg-error "must be closely nested" } */
165         ;
166     }
167   #pragma omp for ordered
168   for (i = 0; i < 10; i++)
169     {
170       #pragma omp ordered
171         ;
172     }
173 }
174
175 void
176 f6 (void)
177 {
178   #pragma omp critical (foo)
179     #pragma omp critical (bar)
180       ;
181   #pragma omp critical
182     #pragma omp critical (baz)
183       ;
184 }
185
186 void
187 f7 (void)
188 {
189   #pragma omp critical (foo2)
190     #pragma omp critical
191       ;
192   #pragma omp critical (bar)
193     #pragma omp critical (bar)          /* { dg-error "may not be nested" } */
194       ;
195   #pragma omp critical
196     #pragma omp critical                /* { dg-error "may not be nested" } */
197       ;
198 }