• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // RUN: %clang_cc1 -fsyntax-only -fopenmp=libiomp5 -verify %s
2 
3 void bar();
4 
5 template <class T>
foo()6 void foo() {
7 // PARALLEL DIRECTIVE
8 #pragma omp parallel
9 #pragma omp for
10   for (int i = 0; i < 10; ++i)
11     ;
12 #pragma omp parallel
13 #pragma omp simd
14   for (int i = 0; i < 10; ++i)
15     ;
16 #pragma omp parallel
17 #pragma omp sections
18   {
19     bar();
20   }
21 #pragma omp parallel
22 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}}
23   {
24     bar();
25   }
26 #pragma omp parallel
27 #pragma omp single
28   bar();
29 #pragma omp parallel
30 #pragma omp parallel for
31   for (int i = 0; i < 10; ++i)
32     ;
33 #pragma omp parallel
34 #pragma omp parallel sections
35   {
36     bar();
37   }
38 
39 // SIMD DIRECTIVE
40 #pragma omp simd
41   for (int i = 0; i < 10; ++i) {
42 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
43     for (int i = 0; i < 10; ++i)
44       ;
45   }
46 #pragma omp simd
47   for (int i = 0; i < 10; ++i) {
48 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
49     for (int i = 0; i < 10; ++i)
50       ;
51   }
52 #pragma omp simd
53   for (int i = 0; i < 10; ++i) {
54 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
55     for (int i = 0; i < 10; ++i)
56       ;
57   }
58 #pragma omp simd
59   for (int i = 0; i < 10; ++i) {
60 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
61     {
62       bar();
63     }
64   }
65 #pragma omp simd
66   for (int i = 0; i < 10; ++i) {
67 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
68     {
69       bar();
70     }
71   }
72 #pragma omp simd
73   for (int i = 0; i < 10; ++i) {
74 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
75     {
76       bar();
77     }
78   }
79 #pragma omp simd
80   for (int i = 0; i < 10; ++i) {
81 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
82     for (int i = 0; i < 10; ++i)
83       ;
84   }
85 #pragma omp simd
86   for (int i = 0; i < 10; ++i) {
87 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
88     {
89       bar();
90     }
91   }
92 
93 // FOR DIRECTIVE
94 #pragma omp for
95   for (int i = 0; i < 10; ++i) {
96 #pragma omp for // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
97     for (int i = 0; i < 10; ++i)
98       ;
99   }
100 #pragma omp for
101   for (int i = 0; i < 10; ++i) {
102 #pragma omp simd
103     for (int i = 0; i < 10; ++i)
104       ;
105   }
106 #pragma omp for
107   for (int i = 0; i < 10; ++i) {
108 #pragma omp parallel
109     for (int i = 0; i < 10; ++i)
110       ;
111   }
112 #pragma omp for
113   for (int i = 0; i < 10; ++i) {
114 #pragma omp sections // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
115     {
116       bar();
117     }
118   }
119 #pragma omp for
120   for (int i = 0; i < 10; ++i) {
121 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}}
122     {
123       bar();
124     }
125   }
126 #pragma omp for
127   for (int i = 0; i < 10; ++i) {
128 #pragma omp single // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
129     {
130       bar();
131     }
132   }
133 #pragma omp for
134   for (int i = 0; i < 10; ++i) {
135 #pragma omp parallel
136     {
137 #pragma omp single // OK
138       {
139         bar();
140       }
141 #pragma omp for // OK
142       for (int i = 0; i < 10; ++i)
143         ;
144 #pragma omp sections // OK
145       {
146         bar();
147       }
148     }
149   }
150 #pragma omp for
151   for (int i = 0; i < 10; ++i) {
152 #pragma omp parallel for
153     for (int i = 0; i < 10; ++i)
154       ;
155   }
156 #pragma omp for
157   for (int i = 0; i < 10; ++i) {
158 #pragma omp parallel sections
159     {
160       bar();
161     }
162   }
163 
164 // SECTIONS DIRECTIVE
165 #pragma omp sections
166   {
167 #pragma omp for // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
168     for (int i = 0; i < 10; ++i)
169       ;
170   }
171 #pragma omp sections
172   {
173 #pragma omp simd
174     for (int i = 0; i < 10; ++i)
175       ;
176   }
177 #pragma omp sections
178   {
179 #pragma omp parallel
180     for (int i = 0; i < 10; ++i)
181       ;
182   }
183 #pragma omp sections
184   {
185 #pragma omp sections // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
186     {
187       bar();
188     }
189   }
190 #pragma omp sections
191   {
192 #pragma omp section
193     {
194       bar();
195     }
196   }
197 #pragma omp sections
198   {
199 #pragma omp section
200     {
201 #pragma omp single // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
202       bar();
203     }
204   }
205 #pragma omp sections
206   {
207 #pragma omp parallel
208     {
209 #pragma omp single // OK
210       {
211         bar();
212       }
213 #pragma omp for // OK
214       for (int i = 0; i < 10; ++i)
215         ;
216 #pragma omp sections // OK
217       {
218         bar();
219       }
220     }
221   }
222 #pragma omp sections
223   {
224 #pragma omp parallel for
225     for (int i = 0; i < 10; ++i)
226       ;
227   }
228 #pragma omp sections
229   {
230 #pragma omp parallel sections
231     {
232       bar();
233     }
234   }
235 
236 // SECTION DIRECTIVE
237 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
238   {
239     bar();
240   }
241 
242 // SINGLE DIRECTIVE
243 #pragma omp single
244   {
245 #pragma omp for // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
246     for (int i = 0; i < 10; ++i)
247       ;
248   }
249 #pragma omp single
250   {
251 #pragma omp simd
252     for (int i = 0; i < 10; ++i)
253       ;
254   }
255 #pragma omp single
256   {
257 #pragma omp parallel
258     for (int i = 0; i < 10; ++i)
259       ;
260   }
261 #pragma omp single
262   {
263 #pragma omp single // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
264     {
265       bar();
266     }
267   }
268 #pragma omp single
269   {
270 #pragma omp sections // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
271     {
272       bar();
273     }
274   }
275 #pragma omp single
276   {
277 #pragma omp parallel
278     {
279 #pragma omp single // OK
280       {
281         bar();
282       }
283 #pragma omp for // OK
284       for (int i = 0; i < 10; ++i)
285         ;
286 #pragma omp sections // OK
287       {
288         bar();
289       }
290     }
291   }
292 #pragma omp single
293   {
294 #pragma omp parallel for
295     for (int i = 0; i < 10; ++i)
296       ;
297   }
298 #pragma omp single
299   {
300 #pragma omp parallel sections
301     {
302       bar();
303     }
304   }
305 
306 // PARALLEL FOR DIRECTIVE
307 #pragma omp parallel for
308   for (int i = 0; i < 10; ++i) {
309 #pragma omp for // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
310     for (int i = 0; i < 10; ++i)
311       ;
312   }
313 #pragma omp parallel for
314   for (int i = 0; i < 10; ++i) {
315 #pragma omp simd
316     for (int i = 0; i < 10; ++i)
317       ;
318   }
319 #pragma omp parallel for
320   for (int i = 0; i < 10; ++i) {
321 #pragma omp parallel
322     for (int i = 0; i < 10; ++i)
323       ;
324   }
325 #pragma omp parallel for
326   for (int i = 0; i < 10; ++i) {
327 #pragma omp sections // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
328     {
329       bar();
330     }
331   }
332 #pragma omp parallel for
333   for (int i = 0; i < 10; ++i) {
334 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}}
335     {
336       bar();
337     }
338   }
339 #pragma omp parallel for
340   for (int i = 0; i < 10; ++i) {
341 #pragma omp single // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
342     {
343       bar();
344     }
345   }
346 #pragma omp parallel for
347   for (int i = 0; i < 10; ++i) {
348 #pragma omp parallel
349     {
350 #pragma omp single // OK
351       {
352         bar();
353       }
354 #pragma omp for // OK
355       for (int i = 0; i < 10; ++i)
356         ;
357 #pragma omp sections // OK
358       {
359         bar();
360       }
361     }
362   }
363 #pragma omp parallel for
364   for (int i = 0; i < 10; ++i) {
365 #pragma omp parallel for
366     for (int i = 0; i < 10; ++i)
367       ;
368   }
369 #pragma omp parallel for
370   for (int i = 0; i < 10; ++i) {
371 #pragma omp parallel sections
372     {
373       bar();
374     }
375   }
376 
377 // PARALLEL SECTIONS DIRECTIVE
378 #pragma omp parallel sections
379   {
380 #pragma omp for // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
381     for (int i = 0; i < 10; ++i)
382       ;
383   }
384 #pragma omp parallel sections
385   {
386 #pragma omp simd
387     for (int i = 0; i < 10; ++i)
388       ;
389   }
390 #pragma omp parallel sections
391   {
392 #pragma omp parallel
393     for (int i = 0; i < 10; ++i)
394       ;
395   }
396 #pragma omp parallel sections
397   {
398 #pragma omp sections // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
399     {
400       bar();
401     }
402   }
403 #pragma omp parallel sections
404   {
405 #pragma omp section
406     {
407       bar();
408     }
409   }
410 #pragma omp parallel sections
411   {
412 #pragma omp section
413     {
414 #pragma omp single // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
415       bar();
416     }
417   }
418 #pragma omp parallel sections
419   {
420 #pragma omp parallel
421     {
422 #pragma omp single // OK
423       {
424         bar();
425       }
426 #pragma omp for // OK
427       for (int i = 0; i < 10; ++i)
428         ;
429 #pragma omp sections // OK
430       {
431         bar();
432       }
433     }
434   }
435 #pragma omp parallel sections
436   {
437 #pragma omp parallel for
438     for (int i = 0; i < 10; ++i)
439       ;
440   }
441 #pragma omp parallel sections
442   {
443 #pragma omp parallel sections
444     {
445       bar();
446     }
447   }
448 }
449 
foo()450 void foo() {
451 // PARALLEL DIRECTIVE
452 #pragma omp parallel
453 #pragma omp for
454   for (int i = 0; i < 10; ++i)
455     ;
456 #pragma omp parallel
457 #pragma omp simd
458   for (int i = 0; i < 10; ++i)
459     ;
460 #pragma omp parallel
461 #pragma omp sections
462   {
463     bar();
464   }
465 #pragma omp parallel
466 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}}
467   {
468     bar();
469   }
470 #pragma omp parallel
471 #pragma omp sections
472   {
473     bar();
474   }
475 #pragma omp parallel
476 #pragma omp single
477   bar();
478 #pragma omp parallel
479 #pragma omp parallel for
480   for (int i = 0; i < 10; ++i)
481     ;
482 #pragma omp parallel
483 #pragma omp parallel sections
484   {
485     bar();
486   }
487 
488 // SIMD DIRECTIVE
489 #pragma omp simd
490   for (int i = 0; i < 10; ++i) {
491 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
492     for (int i = 0; i < 10; ++i)
493       ;
494   }
495 #pragma omp simd
496   for (int i = 0; i < 10; ++i) {
497 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
498     for (int i = 0; i < 10; ++i)
499       ;
500   }
501 #pragma omp simd
502   for (int i = 0; i < 10; ++i) {
503 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
504     for (int i = 0; i < 10; ++i)
505       ;
506   }
507 #pragma omp simd
508   for (int i = 0; i < 10; ++i) {
509 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
510     {
511       bar();
512     }
513   }
514 #pragma omp simd
515   for (int i = 0; i < 10; ++i) {
516 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
517     {
518       bar();
519     }
520   }
521 #pragma omp simd
522   for (int i = 0; i < 10; ++i) {
523 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
524     bar();
525   }
526 #pragma omp simd
527   for (int i = 0; i < 10; ++i) {
528 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
529     for (int i = 0; i < 10; ++i)
530       ;
531   }
532 #pragma omp simd
533   for (int i = 0; i < 10; ++i) {
534 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
535     {
536       bar();
537     }
538   }
539 
540 // FOR DIRECTIVE
541 #pragma omp for
542   for (int i = 0; i < 10; ++i) {
543 #pragma omp for // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
544     for (int i = 0; i < 10; ++i)
545       ;
546   }
547 #pragma omp for
548   for (int i = 0; i < 10; ++i) {
549 #pragma omp simd
550     for (int i = 0; i < 10; ++i)
551       ;
552   }
553 #pragma omp for
554   for (int i = 0; i < 10; ++i) {
555 #pragma omp parallel
556     for (int i = 0; i < 10; ++i)
557       ;
558   }
559 #pragma omp for
560   for (int i = 0; i < 10; ++i) {
561 #pragma omp sections // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
562     {
563       bar();
564     }
565   }
566 #pragma omp for
567   for (int i = 0; i < 10; ++i) {
568 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}}
569     {
570       bar();
571     }
572   }
573 #pragma omp for
574   for (int i = 0; i < 10; ++i) {
575 #pragma omp single // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
576     bar();
577   }
578 #pragma omp for
579   for (int i = 0; i < 10; ++i) {
580 #pragma omp parallel
581     {
582 #pragma omp single // OK
583       {
584         bar();
585       }
586 #pragma omp for // OK
587       for (int i = 0; i < 10; ++i)
588         ;
589 #pragma omp sections // OK
590       {
591         bar();
592       }
593     }
594   }
595 #pragma omp for
596   for (int i = 0; i < 10; ++i) {
597 #pragma omp parallel for
598     for (int i = 0; i < 10; ++i)
599       ;
600   }
601 #pragma omp for
602   for (int i = 0; i < 10; ++i) {
603 #pragma omp parallel sections
604     {
605       bar();
606     }
607   }
608 
609 // SECTIONS DIRECTIVE
610 #pragma omp sections
611   {
612 #pragma omp for // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
613     for (int i = 0; i < 10; ++i)
614       ;
615   }
616 #pragma omp sections
617   {
618 #pragma omp simd
619     for (int i = 0; i < 10; ++i)
620       ;
621   }
622 #pragma omp sections
623   {
624 #pragma omp parallel
625     for (int i = 0; i < 10; ++i)
626       ;
627   }
628 #pragma omp sections
629   {
630 #pragma omp sections // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
631     {
632       bar();
633     }
634   }
635 #pragma omp sections
636   {
637 #pragma omp section
638     {
639       bar();
640     }
641   }
642 #pragma omp sections
643   {
644 #pragma omp single // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
645     bar();
646   }
647 #pragma omp sections
648   {
649 #pragma omp parallel
650     {
651 #pragma omp single // OK
652       {
653         bar();
654       }
655 #pragma omp for // OK
656       for (int i = 0; i < 10; ++i)
657         ;
658 #pragma omp sections // OK
659       {
660         bar();
661       }
662     }
663   }
664 #pragma omp sections
665   {
666 #pragma omp parallel for
667     for (int i = 0; i < 10; ++i)
668       ;
669   }
670 #pragma omp sections
671   {
672 #pragma omp parallel sections
673     {
674       bar();
675     }
676   }
677 
678 // SECTION DIRECTIVE
679 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
680   {
681     bar();
682   }
683 
684 // SINGLE DIRECTIVE
685 #pragma omp single
686   {
687 #pragma omp for // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
688     for (int i = 0; i < 10; ++i)
689       ;
690   }
691 #pragma omp single
692   {
693 #pragma omp simd
694     for (int i = 0; i < 10; ++i)
695       ;
696   }
697 #pragma omp single
698   {
699 #pragma omp parallel
700     for (int i = 0; i < 10; ++i)
701       ;
702   }
703 #pragma omp single
704   {
705 #pragma omp single // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
706     {
707       bar();
708     }
709   }
710 #pragma omp single
711   {
712 #pragma omp sections // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
713     {
714       bar();
715     }
716   }
717 #pragma omp single
718   {
719 #pragma omp parallel
720     {
721 #pragma omp single // OK
722       {
723         bar();
724       }
725 #pragma omp for // OK
726       for (int i = 0; i < 10; ++i)
727         ;
728 #pragma omp sections // OK
729       {
730         bar();
731       }
732     }
733   }
734 #pragma omp single
735   {
736 #pragma omp parallel for
737     for (int i = 0; i < 10; ++i)
738       ;
739   }
740 #pragma omp single
741   {
742 #pragma omp parallel sections
743     {
744       bar();
745     }
746   }
747 
748 // PARALLEL FOR DIRECTIVE
749 #pragma omp parallel for
750   for (int i = 0; i < 10; ++i) {
751 #pragma omp for // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
752     for (int i = 0; i < 10; ++i)
753       ;
754   }
755 #pragma omp parallel for
756   for (int i = 0; i < 10; ++i) {
757 #pragma omp simd
758     for (int i = 0; i < 10; ++i)
759       ;
760   }
761 #pragma omp parallel for
762   for (int i = 0; i < 10; ++i) {
763 #pragma omp parallel
764     for (int i = 0; i < 10; ++i)
765       ;
766   }
767 #pragma omp parallel for
768   for (int i = 0; i < 10; ++i) {
769 #pragma omp sections // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
770     {
771       bar();
772     }
773   }
774 #pragma omp parallel for
775   for (int i = 0; i < 10; ++i) {
776 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}}
777     {
778       bar();
779     }
780   }
781 #pragma omp parallel for
782   for (int i = 0; i < 10; ++i) {
783 #pragma omp single // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
784     {
785       bar();
786     }
787   }
788 #pragma omp parallel for
789   for (int i = 0; i < 10; ++i) {
790 #pragma omp parallel
791     {
792 #pragma omp single // OK
793       {
794         bar();
795       }
796 #pragma omp for // OK
797       for (int i = 0; i < 10; ++i)
798         ;
799 #pragma omp sections // OK
800       {
801         bar();
802       }
803     }
804   }
805 #pragma omp parallel for
806   for (int i = 0; i < 10; ++i) {
807 #pragma omp parallel for
808     for (int i = 0; i < 10; ++i)
809       ;
810   }
811 #pragma omp parallel for
812   for (int i = 0; i < 10; ++i) {
813 #pragma omp parallel sections
814     {
815       bar();
816     }
817   }
818 
819 // PARALLEL SECTIONS DIRECTIVE
820 #pragma omp parallel sections
821   {
822 #pragma omp for // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
823     for (int i = 0; i < 10; ++i)
824       ;
825   }
826 #pragma omp parallel sections
827   {
828 #pragma omp simd
829     for (int i = 0; i < 10; ++i)
830       ;
831   }
832 #pragma omp parallel sections
833   {
834 #pragma omp parallel
835     for (int i = 0; i < 10; ++i)
836       ;
837   }
838 #pragma omp parallel sections
839   {
840 #pragma omp sections // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
841     {
842       bar();
843     }
844   }
845 #pragma omp parallel sections
846   {
847 #pragma omp section
848     {
849       bar();
850     }
851   }
852 #pragma omp parallel sections
853   {
854 #pragma omp section
855     {
856 #pragma omp single // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
857       bar();
858     }
859   }
860 #pragma omp parallel sections
861   {
862 #pragma omp parallel
863     {
864 #pragma omp single // OK
865       {
866         bar();
867       }
868 #pragma omp for // OK
869       for (int i = 0; i < 10; ++i)
870         ;
871 #pragma omp sections // OK
872       {
873         bar();
874       }
875     }
876   }
877 #pragma omp parallel sections
878   {
879 #pragma omp parallel for
880     for (int i = 0; i < 10; ++i)
881       ;
882   }
883 #pragma omp parallel sections
884   {
885 #pragma omp parallel sections
886     {
887       bar();
888     }
889   }
890   return foo<int>();
891 }
892 
893