diff options
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/OpenMP/master_ast_print.cpp | 32 | ||||
| -rw-r--r-- | clang/test/OpenMP/master_messages.cpp | 64 | ||||
| -rw-r--r-- | clang/test/OpenMP/nesting_of_regions.cpp | 257 |
3 files changed, 353 insertions, 0 deletions
diff --git a/clang/test/OpenMP/master_ast_print.cpp b/clang/test/OpenMP/master_ast_print.cpp new file mode 100644 index 00000000000..7ce4c10020c --- /dev/null +++ b/clang/test/OpenMP/master_ast_print.cpp @@ -0,0 +1,32 @@ +// RUN: %clang_cc1 -verify -fopenmp=libiomp5 -ast-print %s | FileCheck %s +// RUN: %clang_cc1 -fopenmp=libiomp5 -x c++ -std=c++11 -emit-pch -o %t %s +// RUN: %clang_cc1 -fopenmp=libiomp5 -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s +// expected-no-diagnostics + +#ifndef HEADER +#define HEADER + +void foo() {} + +int main (int argc, char **argv) { + int b = argc, c, d, e, f, g; + static int a; +// CHECK: static int a; +#pragma omp parallel +{ +#pragma omp master +{ + a=2; +} +} +// CHECK-NEXT: #pragma omp parallel +// CHECK-NEXT: { +// CHECK-NEXT: #pragma omp master +// CHECK-NEXT: { +// CHECK-NEXT: a = 2; +// CHECK-NEXT: } +// CHECK-NEXT: } + return (0); +} + +#endif diff --git a/clang/test/OpenMP/master_messages.cpp b/clang/test/OpenMP/master_messages.cpp new file mode 100644 index 00000000000..fbe35ac68e4 --- /dev/null +++ b/clang/test/OpenMP/master_messages.cpp @@ -0,0 +1,64 @@ +// RUN: %clang_cc1 -verify -fopenmp=libiomp5 %s + +int foo(); + +int main() { + #pragma omp master + ; + #pragma omp master nowait // expected-error {{unexpected OpenMP clause 'nowait' in directive '#pragma omp master'}} + #pragma omp master unknown // expected-warning {{extra tokens at the end of '#pragma omp master' are ignored}} + foo(); + { + #pragma omp master + } // expected-error {{expected statement}} + #pragma omp for + for (int i = 0; i < 10; ++i) { + foo(); + #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}} + foo(); + } + #pragma omp sections + { + foo(); + #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}} + foo(); + } + #pragma omp single + for (int i = 0; i < 10; ++i) { + foo(); + #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}} + foo(); + } + #pragma omp master + for (int i = 0; i < 10; ++i) { + foo(); + #pragma omp master + foo(); + } + #pragma omp for ordered + for (int i = 0; i < 10; ++i) + #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}} + { + foo(); + } + + return 0; +} + +int foo() { + L1: + foo(); + #pragma omp master + { + foo(); + goto L1; // expected-error {{use of undeclared label 'L1'}} + } + goto L2; // expected-error {{use of undeclared label 'L2'}} + #pragma omp master + { + L2: + foo(); + } + + return 0; +} diff --git a/clang/test/OpenMP/nesting_of_regions.cpp b/clang/test/OpenMP/nesting_of_regions.cpp index c2e252673f1..d61ac3f11b3 100644 --- a/clang/test/OpenMP/nesting_of_regions.cpp +++ b/clang/test/OpenMP/nesting_of_regions.cpp @@ -26,6 +26,12 @@ void foo() { #pragma omp parallel #pragma omp single bar(); + +#pragma omp parallel +#pragma omp master + { + bar(); + } #pragma omp parallel #pragma omp parallel for for (int i = 0; i < 10; ++i) @@ -83,6 +89,13 @@ void foo() { } #pragma omp simd for (int i = 0; i < 10; ++i) { +#pragma omp master // 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) ; @@ -142,6 +155,15 @@ void foo() { bar(); } } + +#pragma omp for + for (int i = 0; i < 10; ++i) { +#pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}} + { + bar(); + } + } + #pragma omp for for (int i = 0; i < 10; ++i) { #pragma omp parallel @@ -232,6 +254,25 @@ void foo() { } #pragma omp sections { +#pragma omp parallel + { +#pragma omp master // OK + { + bar(); + } +#pragma omp for // OK + for (int i = 0; i < 10; ++i) + ; +#pragma omp master // OK + { + bar(); + } + } +#pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}} + bar(); + } +#pragma omp sections + { #pragma omp parallel for for (int i = 0; i < 10; ++i) ; @@ -309,6 +350,8 @@ void foo() { { #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 master // expected-error {{region cannot be closely nested inside 'section' region}} + bar(); } } #pragma omp sections @@ -389,6 +432,13 @@ void foo() { } #pragma omp single { +#pragma omp master // expected-error {{region cannot be closely nested inside 'single' 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(); @@ -432,6 +482,84 @@ void foo() { } } +// MASTER DIRECTIVE +#pragma omp master + { +#pragma omp for // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; + } +#pragma omp master + { +#pragma omp simd + for (int i = 0; i < 10; ++i) + ; + } +#pragma omp master + { +#pragma omp parallel + for (int i = 0; i < 10; ++i) + ; + } +#pragma omp master + { +#pragma omp single // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} + { + bar(); + } + } +#pragma omp master + { +#pragma omp master // OK, though second 'master' is redundant + { + bar(); + } + } +#pragma omp master + { +#pragma omp sections // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} + { + bar(); + } + } +#pragma omp master + { +#pragma omp parallel + { +#pragma omp master // OK + { + bar(); + } +#pragma omp for // OK + for (int i = 0; i < 10; ++i) + ; +#pragma omp sections // OK + { + bar(); + } + } + } +#pragma omp master + { +#pragma omp parallel for + for (int i = 0; i < 10; ++i) + ; + } +#pragma omp master + { +#pragma omp parallel sections + { + bar(); + } + } +#pragma omp master + { +#pragma omp task + { + bar(); + } + } + // PARALLEL FOR DIRECTIVE #pragma omp parallel for for (int i = 0; i < 10; ++i) { @@ -472,6 +600,15 @@ void foo() { bar(); } } + +#pragma omp parallel for + for (int i = 0; i < 10; ++i) { +#pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}} + { + bar(); + } + } + #pragma omp parallel for for (int i = 0; i < 10; ++i) { #pragma omp parallel @@ -553,6 +690,14 @@ void foo() { } #pragma omp parallel sections { +#pragma omp section + { +#pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}} + bar(); + } + } +#pragma omp parallel sections + { #pragma omp parallel { #pragma omp single // OK @@ -612,6 +757,9 @@ void foo() { #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 master // expected-error {{region cannot be closely nested inside 'task' region}} + bar(); +#pragma omp task #pragma omp parallel for for (int i = 0; i < 10; ++i) ; @@ -625,6 +773,7 @@ void foo() { { bar(); } + } void foo() { @@ -656,6 +805,9 @@ void foo() { #pragma omp single bar(); #pragma omp parallel +#pragma omp master + bar(); +#pragma omp parallel #pragma omp parallel for for (int i = 0; i < 10; ++i) ; @@ -707,6 +859,8 @@ void foo() { 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 master // expected-error {{OpenMP constructs may not be nested inside a simd region}} + bar(); } #pragma omp simd for (int i = 0; i < 10; ++i) { @@ -766,6 +920,8 @@ void foo() { 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 master // expected-error {{region cannot be closely nested inside 'for' region}} + bar(); } #pragma omp for for (int i = 0; i < 10; ++i) { @@ -842,6 +998,8 @@ void foo() { { #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 master // expected-error {{region cannot be closely nested inside 'sections' region}} + bar(); } #pragma omp sections { @@ -939,6 +1097,8 @@ void foo() { { #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 master // expected-error {{region cannot be closely nested inside 'section' region}} + bar(); } } #pragma omp sections @@ -1016,6 +1176,8 @@ void foo() { { bar(); } +#pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}} + bar(); } #pragma omp single { @@ -1062,6 +1224,84 @@ void foo() { } } +// MASTER DIRECTIVE +#pragma omp master + { +#pragma omp for // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} + for (int i = 0; i < 10; ++i) + ; + } +#pragma omp master + { +#pragma omp simd + for (int i = 0; i < 10; ++i) + ; + } +#pragma omp master + { +#pragma omp parallel + for (int i = 0; i < 10; ++i) + ; + } +#pragma omp master + { +#pragma omp single // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} + { + bar(); + } + } +#pragma omp master + { +#pragma omp master // OK, though second 'master' is redundant + { + bar(); + } + } +#pragma omp master + { +#pragma omp sections // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} + { + bar(); + } + } +#pragma omp master + { +#pragma omp parallel + { +#pragma omp master // OK + { + bar(); + } +#pragma omp for // OK + for (int i = 0; i < 10; ++i) + ; +#pragma omp sections // OK + { + bar(); + } + } + } +#pragma omp master + { +#pragma omp parallel for + for (int i = 0; i < 10; ++i) + ; + } +#pragma omp master + { +#pragma omp parallel sections + { + bar(); + } + } +#pragma omp master + { +#pragma omp task + { + bar(); + } + } + // PARALLEL FOR DIRECTIVE #pragma omp parallel for for (int i = 0; i < 10; ++i) { @@ -1101,6 +1341,10 @@ void foo() { { bar(); } +#pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}} + { + bar(); + } } #pragma omp parallel for for (int i = 0; i < 10; ++i) { @@ -1110,6 +1354,10 @@ void foo() { { bar(); } +#pragma omp master // OK + { + bar(); + } #pragma omp for // OK for (int i = 0; i < 10; ++i) ; @@ -1179,6 +1427,8 @@ void foo() { { #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 master // expected-error {{region cannot be closely nested inside 'section' region}} + bar(); } } #pragma omp parallel sections @@ -1189,6 +1439,10 @@ void foo() { { bar(); } +#pragma omp master // OK + { + bar(); + } #pragma omp for // OK for (int i = 0; i < 10; ++i) ; @@ -1242,6 +1496,9 @@ void foo() { #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 master // expected-error {{region cannot be closely nested inside 'task' region}} + bar(); +#pragma omp task #pragma omp parallel for for (int i = 0; i < 10; ++i) ; |

