// RUN: %clang_cc1 -fsyntax-only -fopenmp=libiomp5 -verify %s void bar(); template void foo() { // PARALLEL DIRECTIVE #pragma omp parallel #pragma omp for for (int i = 0; i < 10; ++i) ; #pragma omp parallel #pragma omp simd for (int i = 0; i < 10; ++i) ; #pragma omp parallel #pragma omp sections { bar(); } #pragma omp parallel #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}} { bar(); } #pragma omp parallel #pragma omp single bar(); #pragma omp parallel #pragma omp parallel for for (int i = 0; i < 10; ++i) ; #pragma omp parallel #pragma omp parallel sections { bar(); } #pragma omp parallel #pragma omp task { bar(); } // SIMD DIRECTIVE #pragma omp simd for (int i = 0; i < 10; ++i) { #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}} for (int i = 0; i < 10; ++i) ; } #pragma omp simd for (int i = 0; i < 10; ++i) { #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} for (int i = 0; i < 10; ++i) ; } #pragma omp simd for (int i = 0; i < 10; ++i) { #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} for (int i = 0; i < 10; ++i) ; } #pragma omp simd for (int i = 0; i < 10; ++i) { #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} { bar(); } } #pragma omp simd for (int i = 0; i < 10; ++i) { #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}} { bar(); } } #pragma omp simd for (int i = 0; i < 10; ++i) { #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}} { bar(); } } #pragma omp simd for (int i = 0; i < 10; ++i) { #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} for (int i = 0; i < 10; ++i) ; } #pragma omp simd for (int i = 0; i < 10; ++i) { #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} { bar(); } } #pragma omp simd for (int i = 0; i < 10; ++i) { #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}} { bar(); } } // FOR DIRECTIVE #pragma omp for for (int i = 0; i < 10; ++i) { #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?}} for (int i = 0; i < 10; ++i) ; } #pragma omp for for (int i = 0; i < 10; ++i) { #pragma omp simd for (int i = 0; i < 10; ++i) ; } #pragma omp for for (int i = 0; i < 10; ++i) { #pragma omp parallel for (int i = 0; i < 10; ++i) ; } #pragma omp for for (int i = 0; i < 10; ++i) { #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?}} { bar(); } } #pragma omp for for (int i = 0; i < 10; ++i) { #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}} { bar(); } } #pragma omp for for (int i = 0; i < 10; ++i) { #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?}} { bar(); } } #pragma omp for for (int i = 0; i < 10; ++i) { #pragma omp parallel { #pragma omp single // OK { bar(); } #pragma omp for // OK for (int i = 0; i < 10; ++i) ; #pragma omp sections // OK { bar(); } } } #pragma omp for for (int i = 0; i < 10; ++i) { #pragma omp parallel for for (int i = 0; i < 10; ++i) ; } #pragma omp for for (int i = 0; i < 10; ++i) { #pragma omp parallel sections { bar(); } } #pragma omp for for (int i = 0; i < 10; ++i) { #pragma omp task { bar(); } } // SECTIONS DIRECTIVE #pragma omp sections { #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?}} for (int i = 0; i < 10; ++i) ; } #pragma omp sections { #pragma omp simd for (int i = 0; i < 10; ++i) ; } #pragma omp sections { #pragma omp parallel for (int i = 0; i < 10; ++i) ; } #pragma omp sections { #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?}} { bar(); } } #pragma omp sections { #pragma omp section { bar(); } } #pragma omp sections { #pragma omp section { #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?}} bar(); } } #pragma omp sections { #pragma omp parallel { #pragma omp single // OK { bar(); } #pragma omp for // OK for (int i = 0; i < 10; ++i) ; #pragma omp sections // OK { bar(); } } } #pragma omp sections { #pragma omp parallel for for (int i = 0; i < 10; ++i) ; } #pragma omp sections { #pragma omp parallel sections { bar(); } } #pragma omp sections { #pragma omp task { bar(); } } // SECTION DIRECTIVE #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}} { bar(); } #pragma omp sections { #pragma omp section { #pragma omp for // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} for (int i = 0; i < 10; ++i) ; } } #pragma omp sections { #pragma omp section { #pragma omp simd for (int i = 0; i < 10; ++i) ; } } #pragma omp sections { #pragma omp section { #pragma omp parallel for (int i = 0; i < 10; ++i) ; } } #pragma omp sections { #pragma omp section { #pragma omp sections // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} { bar(); } } } #pragma omp sections { #pragma omp section { #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}} { bar(); } } } #pragma omp sections { #pragma omp section { #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?}} bar(); } } #pragma omp sections { #pragma omp section { #pragma omp parallel { #pragma omp single // OK { bar(); } #pragma omp for // OK for (int i = 0; i < 10; ++i) ; #pragma omp sections // OK { bar(); } } } } #pragma omp sections { #pragma omp section { #pragma omp parallel for for (int i = 0; i < 10; ++i) ; } } #pragma omp sections { #pragma omp section { #pragma omp parallel sections { bar(); } } } #pragma omp sections { #pragma omp section { #pragma omp task { bar(); } } } // SINGLE DIRECTIVE #pragma omp single { #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?}} for (int i = 0; i < 10; ++i) ; } #pragma omp single { #pragma omp simd for (int i = 0; i < 10; ++i) ; } #pragma omp single { #pragma omp parallel for (int i = 0; i < 10; ++i) ; } #pragma omp single { #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?}} { bar(); } } #pragma omp single { #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?}} { bar(); } } #pragma omp single { #pragma omp parallel { #pragma omp single // OK { bar(); } #pragma omp for // OK for (int i = 0; i < 10; ++i) ; #pragma omp sections // OK { bar(); } } } #pragma omp single { #pragma omp parallel for for (int i = 0; i < 10; ++i) ; } #pragma omp single { #pragma omp parallel sections { bar(); } } #pragma omp single { #pragma omp task { bar(); } } // PARALLEL FOR DIRECTIVE #pragma omp parallel for for (int i = 0; i < 10; ++i) { #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?}} for (int i = 0; i < 10; ++i) ; } #pragma omp parallel for for (int i = 0; i < 10; ++i) { #pragma omp simd for (int i = 0; i < 10; ++i) ; } #pragma omp parallel for for (int i = 0; i < 10; ++i) { #pragma omp parallel for (int i = 0; i < 10; ++i) ; } #pragma omp parallel for for (int i = 0; i < 10; ++i) { #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?}} { bar(); } } #pragma omp parallel for for (int i = 0; i < 10; ++i) { #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}} { bar(); } } #pragma omp parallel for for (int i = 0; i < 10; ++i) { #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?}} { bar(); } } #pragma omp parallel for for (int i = 0; i < 10; ++i) { #pragma omp parallel { #pragma omp single // OK { bar(); } #pragma omp for // OK for (int i = 0; i < 10; ++i) ; #pragma omp sections // OK { bar(); } } } #pragma omp parallel for for (int i = 0; i < 10; ++i) { #pragma omp parallel for for (int i = 0; i < 10; ++i) ; } #pragma omp parallel for for (int i = 0; i < 10; ++i) { #pragma omp parallel sections { bar(); } } #pragma omp parallel for for (int i = 0; i < 10; ++i) { #pragma omp task { bar(); } } // PARALLEL SECTIONS DIRECTIVE #pragma omp parallel sections { #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?}} for (int i = 0; i < 10; ++i) ; } #pragma omp parallel sections { #pragma omp simd for (int i = 0; i < 10; ++i) ; } #pragma omp parallel sections { #pragma omp parallel for (int i = 0; i < 10; ++i) ; } #pragma omp parallel sections { #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?}} { bar(); } } #pragma omp parallel sections { #pragma omp section { bar(); } } #pragma omp parallel sections { #pragma omp section { #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?}} bar(); } } #pragma omp parallel sections { #pragma omp parallel { #pragma omp single // OK { bar(); } #pragma omp for // OK for (int i = 0; i < 10; ++i) ; #pragma omp sections // OK { bar(); } } } #pragma omp parallel sections { #pragma omp parallel for for (int i = 0; i < 10; ++i) ; } #pragma omp parallel sections { #pragma omp parallel sections { bar(); } } #pragma omp parallel sections { #pragma omp task { bar(); } } // TASK DIRECTIVE #pragma omp task #pragma omp for // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} for (int i = 0; i < 10; ++i) ; #pragma omp task #pragma omp simd for (int i = 0; i < 10; ++i) ; #pragma omp task #pragma omp sections // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} { bar(); } #pragma omp task #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}} { bar(); } #pragma omp task #pragma omp single // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} bar(); #pragma omp task #pragma omp parallel for for (int i = 0; i < 10; ++i) ; #pragma omp task #pragma omp parallel sections { bar(); } #pragma omp task #pragma omp task { bar(); } } void foo() { // PARALLEL DIRECTIVE #pragma omp parallel #pragma omp for for (int i = 0; i < 10; ++i) ; #pragma omp parallel #pragma omp simd for (int i = 0; i < 10; ++i) ; #pragma omp parallel #pragma omp sections { bar(); } #pragma omp parallel #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}} { bar(); } #pragma omp parallel #pragma omp sections { bar(); } #pragma omp parallel #pragma omp single bar(); #pragma omp parallel #pragma omp parallel for for (int i = 0; i < 10; ++i) ; #pragma omp parallel #pragma omp parallel sections { bar(); } #pragma omp parallel #pragma omp task { bar(); } // SIMD DIRECTIVE #pragma omp simd for (int i = 0; i < 10; ++i) { #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}} for (int i = 0; i < 10; ++i) ; } #pragma omp simd for (int i = 0; i < 10; ++i) { #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} for (int i = 0; i < 10; ++i) ; } #pragma omp simd for (int i = 0; i < 10; ++i) { #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} for (int i = 0; i < 10; ++i) ; } #pragma omp simd for (int i = 0; i < 10; ++i) { #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} { bar(); } } #pragma omp simd for (int i = 0; i < 10; ++i) { #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}} { bar(); } } #pragma omp simd for (int i = 0; i < 10; ++i) { #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}} bar(); } #pragma omp simd for (int i = 0; i < 10; ++i) { #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} for (int i = 0; i < 10; ++i) ; } #pragma omp simd for (int i = 0; i < 10; ++i) { #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} { bar(); } } #pragma omp simd for (int i = 0; i < 10; ++i) { #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}} { bar(); } } // FOR DIRECTIVE #pragma omp for for (int i = 0; i < 10; ++i) { #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?}} for (int i = 0; i < 10; ++i) ; } #pragma omp for for (int i = 0; i < 10; ++i) { #pragma omp simd for (int i = 0; i < 10; ++i) ; } #pragma omp for for (int i = 0; i < 10; ++i) { #pragma omp parallel for (int i = 0; i < 10; ++i) ; } #pragma omp for for (int i = 0; i < 10; ++i) { #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?}} { bar(); } } #pragma omp for for (int i = 0; i < 10; ++i) { #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}} { bar(); } } #pragma omp for for (int i = 0; i < 10; ++i) { #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?}} bar(); } #pragma omp for for (int i = 0; i < 10; ++i) { #pragma omp parallel { #pragma omp single // OK { bar(); } #pragma omp for // OK for (int i = 0; i < 10; ++i) ; #pragma omp sections // OK { bar(); } } } #pragma omp for for (int i = 0; i < 10; ++i) { #pragma omp parallel for for (int i = 0; i < 10; ++i) ; } #pragma omp for for (int i = 0; i < 10; ++i) { #pragma omp parallel sections { bar(); } } #pragma omp for for (int i = 0; i < 10; ++i) { #pragma omp task { bar(); } } // SECTIONS DIRECTIVE #pragma omp sections { #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?}} for (int i = 0; i < 10; ++i) ; } #pragma omp sections { #pragma omp simd for (int i = 0; i < 10; ++i) ; } #pragma omp sections { #pragma omp parallel for (int i = 0; i < 10; ++i) ; } #pragma omp sections { #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?}} { bar(); } } #pragma omp sections { #pragma omp section { bar(); } } #pragma omp sections { #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?}} bar(); } #pragma omp sections { #pragma omp parallel { #pragma omp single // OK { bar(); } #pragma omp for // OK for (int i = 0; i < 10; ++i) ; #pragma omp sections // OK { bar(); } } } #pragma omp sections { #pragma omp parallel for for (int i = 0; i < 10; ++i) ; } #pragma omp sections { #pragma omp parallel sections { bar(); } } #pragma omp sections { #pragma omp task { bar(); } } // SECTION DIRECTIVE #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}} { bar(); } #pragma omp sections { #pragma omp section { #pragma omp for // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} for (int i = 0; i < 10; ++i) ; } } #pragma omp sections { #pragma omp section { #pragma omp simd for (int i = 0; i < 10; ++i) ; } } #pragma omp sections { #pragma omp section { #pragma omp parallel for (int i = 0; i < 10; ++i) ; } } #pragma omp sections { #pragma omp section { #pragma omp sections // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} { bar(); } } } #pragma omp sections { #pragma omp section { #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}} { bar(); } } } #pragma omp sections { #pragma omp section { #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?}} bar(); } } #pragma omp sections { #pragma omp section { #pragma omp parallel { #pragma omp single // OK { bar(); } #pragma omp for // OK for (int i = 0; i < 10; ++i) ; #pragma omp sections // OK { bar(); } } } } #pragma omp sections { #pragma omp section { #pragma omp parallel for for (int i = 0; i < 10; ++i) ; } } #pragma omp sections { #pragma omp section { #pragma omp parallel sections { bar(); } } } #pragma omp sections { #pragma omp section { #pragma omp task { bar(); } } } // SINGLE DIRECTIVE #pragma omp single { #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?}} for (int i = 0; i < 10; ++i) ; } #pragma omp single { #pragma omp simd for (int i = 0; i < 10; ++i) ; } #pragma omp single { #pragma omp parallel for (int i = 0; i < 10; ++i) ; } #pragma omp single { #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?}} { bar(); } } #pragma omp single { #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?}} { bar(); } } #pragma omp single { #pragma omp parallel { #pragma omp single // OK { bar(); } #pragma omp for // OK for (int i = 0; i < 10; ++i) ; #pragma omp sections // OK { bar(); } } } #pragma omp single { #pragma omp parallel for for (int i = 0; i < 10; ++i) ; } #pragma omp single { #pragma omp parallel sections { bar(); } } #pragma omp single { #pragma omp task { bar(); } } // PARALLEL FOR DIRECTIVE #pragma omp parallel for for (int i = 0; i < 10; ++i) { #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?}} for (int i = 0; i < 10; ++i) ; } #pragma omp parallel for for (int i = 0; i < 10; ++i) { #pragma omp simd for (int i = 0; i < 10; ++i) ; } #pragma omp parallel for for (int i = 0; i < 10; ++i) { #pragma omp parallel for (int i = 0; i < 10; ++i) ; } #pragma omp parallel for for (int i = 0; i < 10; ++i) { #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?}} { bar(); } } #pragma omp parallel for for (int i = 0; i < 10; ++i) { #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}} { bar(); } } #pragma omp parallel for for (int i = 0; i < 10; ++i) { #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?}} { bar(); } } #pragma omp parallel for for (int i = 0; i < 10; ++i) { #pragma omp parallel { #pragma omp single // OK { bar(); } #pragma omp for // OK for (int i = 0; i < 10; ++i) ; #pragma omp sections // OK { bar(); } } } #pragma omp parallel for for (int i = 0; i < 10; ++i) { #pragma omp parallel for for (int i = 0; i < 10; ++i) ; } #pragma omp parallel for for (int i = 0; i < 10; ++i) { #pragma omp parallel sections { bar(); } } #pragma omp parallel for for (int i = 0; i < 10; ++i) { #pragma omp task { bar(); } } // PARALLEL SECTIONS DIRECTIVE #pragma omp parallel sections { #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?}} for (int i = 0; i < 10; ++i) ; } #pragma omp parallel sections { #pragma omp simd for (int i = 0; i < 10; ++i) ; } #pragma omp parallel sections { #pragma omp parallel for (int i = 0; i < 10; ++i) ; } #pragma omp parallel sections { #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?}} { bar(); } } #pragma omp parallel sections { #pragma omp section { bar(); } } #pragma omp parallel sections { #pragma omp section { #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?}} bar(); } } #pragma omp parallel sections { #pragma omp parallel { #pragma omp single // OK { bar(); } #pragma omp for // OK for (int i = 0; i < 10; ++i) ; #pragma omp sections // OK { bar(); } } } #pragma omp parallel sections { #pragma omp parallel for for (int i = 0; i < 10; ++i) ; } #pragma omp parallel sections { #pragma omp parallel sections { bar(); } } #pragma omp parallel sections { #pragma omp task { bar(); } } // TASK DIRECTIVE #pragma omp task #pragma omp for // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} for (int i = 0; i < 10; ++i) ; #pragma omp task #pragma omp simd for (int i = 0; i < 10; ++i) ; #pragma omp task #pragma omp sections // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} { bar(); } #pragma omp task #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}} { bar(); } #pragma omp task #pragma omp single // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} bar(); #pragma omp task #pragma omp parallel for for (int i = 0; i < 10; ++i) ; #pragma omp task #pragma omp parallel sections { bar(); } #pragma omp task #pragma omp task { bar(); } return foo(); }