diff options
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/OpenMP/openmp_common.c | 2 | ||||
-rw-r--r-- | clang/test/OpenMP/parallel_default_messages.cpp | 8 | ||||
-rw-r--r-- | clang/test/OpenMP/parallel_messages.cpp | 49 | ||||
-rw-r--r-- | clang/test/OpenMP/parallel_private_messages.cpp | 26 | ||||
-rw-r--r-- | clang/test/OpenMP/parallel_shared_messages.cpp | 77 |
5 files changed, 149 insertions, 13 deletions
diff --git a/clang/test/OpenMP/openmp_common.c b/clang/test/OpenMP/openmp_common.c index ca5d89a6629..3765f4c5dc1 100644 --- a/clang/test/OpenMP/openmp_common.c +++ b/clang/test/OpenMP/openmp_common.c @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -triple x86_64-apple-macos10.7.0 -verify -fopenmp -ferror-limit 100 -o - %s +// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 -o - %s #pragma omp // expected-error {{expected an OpenMP directive}} #pragma omp unknown_directive // expected-error {{expected an OpenMP directive}} diff --git a/clang/test/OpenMP/parallel_default_messages.cpp b/clang/test/OpenMP/parallel_default_messages.cpp index e5e25721102..cbc6a73fe35 100644 --- a/clang/test/OpenMP/parallel_default_messages.cpp +++ b/clang/test/OpenMP/parallel_default_messages.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -triple x86_64-apple-macos10.7.0 -verify -fopenmp -ferror-limit 100 -o - %s +// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 -o - %s void foo(); @@ -11,5 +11,11 @@ int main(int argc, char **argv) { #pragma omp parallel default (x) // expected-error {{expected 'none' or 'shared' in OpenMP clause 'default'}} foo(); + #pragma omp parallel default(none) + ++argc; // expected-error {{variable 'argc' must have explicitly specified data sharing attributes}} + + #pragma omp parallel default(none) + #pragma omp parallel default(shared) + ++argc; return 0; } diff --git a/clang/test/OpenMP/parallel_messages.cpp b/clang/test/OpenMP/parallel_messages.cpp new file mode 100644 index 00000000000..c046f873d1b --- /dev/null +++ b/clang/test/OpenMP/parallel_messages.cpp @@ -0,0 +1,49 @@ +// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 -o - %s + +void foo() { +} + +#pragma omp parallel // expected-error {{unexpected OpenMP directive '#pragma omp parallel'}} + +int main(int argc, char **argv) { + #pragma omp parallel + #pragma omp parallel unknown() // expected-warning {{extra tokens at the end of '#pragma omp parallel' are ignored}} + foo(); + L1: + foo(); + #pragma omp parallel + ; + #pragma omp parallel + { + goto L1; // expected-error {{use of undeclared label 'L1'}} + argc++; + } + + for (int i = 0; i < 10; ++i) { + switch(argc) { + case (0): + #pragma omp parallel + { + foo(); + break; // expected-error {{'break' statement not in loop or switch statement}} + continue; // expected-error {{'continue' statement not in loop statement}} + } + default: + break; + } + } + #pragma omp parallel default(none) + ++argc; // expected-error {{variable 'argc' must have explicitly specified data sharing attributes}} + + goto L2; // expected-error {{use of undeclared label 'L2'}} + #pragma omp parallel + L2: + foo(); + #pragma omp parallel + { + return 1; // expected-error {{cannot return from OpenMP region}} + } + + return 0; +} + diff --git a/clang/test/OpenMP/parallel_private_messages.cpp b/clang/test/OpenMP/parallel_private_messages.cpp index e64fac8003b..102bf300aa2 100644 --- a/clang/test/OpenMP/parallel_private_messages.cpp +++ b/clang/test/OpenMP/parallel_private_messages.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -triple x86_64-apple-macos10.7.0 -verify -fopenmp -ferror-limit 100 %s +// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s void foo() { } @@ -13,7 +13,7 @@ class S2 { mutable int a; public: S2():a(0) { } - static float S2s; + static float S2s; // expected-note {{predetermined as shared}} }; const S2 b; const S2 ba[5]; @@ -22,9 +22,9 @@ class S3 { public: S3():a(0) { } }; -const S3 c; -const S3 ca[5]; -extern const int f; +const S3 c; // expected-note {{predetermined as shared}} +const S3 ca[5]; // expected-note {{predetermined as shared}} +extern const int f; // expected-note {{predetermined as shared}} class S4 { // expected-note {{'S4' declared here}} int a; S4(); @@ -38,9 +38,12 @@ public: S5(int v):a(v) { } }; +int threadvar; +#pragma omp threadprivate(threadvar) // expected-note {{defined as threadprivate or thread local}} + int main(int argc, char **argv) { - const int d = 5; - const int da[5] = { 0 }; + const int d = 5; // expected-note {{predetermined as shared}} + const int da[5] = { 0 }; // expected-note {{predetermined as shared}} S4 e(4); // expected-note {{'e' defined here}} S5 g(5); // expected-note {{'g' defined here}} int i; @@ -53,13 +56,14 @@ int main(int argc, char **argv) { #pragma omp parallel private (argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} #pragma omp parallel private (argc argv) // expected-error {{expected ',' or ')' in 'private' clause}} #pragma omp parallel private (S1) // expected-error {{'S1' does not refer to a value}} - #pragma omp parallel private (a, b, c, d, f) // expected-error {{a private variable with incomplete type 'S1'}} + #pragma omp parallel private (a, b, c, d, f) // expected-error {{a private variable with incomplete type 'S1'}} expected-error 3 {{shared variable cannot be private}} #pragma omp parallel private (argv[1]) // expected-error {{expected variable name}} #pragma omp parallel private(ba) - #pragma omp parallel private(ca) - #pragma omp parallel private(da) - #pragma omp parallel private(S2::S2s) + #pragma omp parallel private(ca) // expected-error {{shared variable cannot be private}} + #pragma omp parallel private(da) // expected-error {{shared variable cannot be private}} + #pragma omp parallel private(S2::S2s) // expected-error {{shared variable cannot be private}} #pragma omp parallel private(e, g) // expected-error 2 {{private variable must have an accessible, unambiguous default constructor}} + #pragma omp parallel private(threadvar) // expected-error {{threadprivate or thread local variable cannot be private}} foo(); #pragma omp parallel private(i) #pragma omp parallel private(j) // expected-error {{arguments of OpenMP clause 'private' cannot be of reference type 'int &'}} diff --git a/clang/test/OpenMP/parallel_shared_messages.cpp b/clang/test/OpenMP/parallel_shared_messages.cpp new file mode 100644 index 00000000000..0d8894e0d44 --- /dev/null +++ b/clang/test/OpenMP/parallel_shared_messages.cpp @@ -0,0 +1,77 @@ +// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s + +void foo() { +} + +bool foobool(int argc) { + return argc; +} + +struct S1; // expected-note {{declared here}} +extern S1 a; +class S2 { + mutable int a; +public: + S2():a(0) { } + S2(S2 &s2):a(s2.a) { } +}; +const S2 b; +const S2 ba[5]; +class S3 { + int a; +public: + S3():a(0) { } + S3(S3 &s3):a(s3.a) { } +}; +const S3 c; +const S3 ca[5]; +extern const int f; +class S4 { + int a; + S4(); + S4(const S4 &s4); +public: + S4(int v):a(v) { } +}; +class S5 { + int a; + S5():a(0) {} + S5(const S5 &s5):a(s5.a) { } +public: + S5(int v):a(v) { } +}; + +S3 h; +#pragma omp threadprivate(h) // expected-note {{defined as threadprivate or thread local}} + +int main(int argc, char **argv) { + const int d = 5; + const int da[5] = { 0 }; + S4 e(4); + S5 g(5); + int i; + int &j = i; + #pragma omp parallel shared // expected-error {{expected '(' after 'shared'}} + #pragma omp parallel shared ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} + #pragma omp parallel shared () // expected-error {{expected expression}} + #pragma omp parallel shared (argc // expected-error {{expected ')'}} expected-note {{to match this '('}} + #pragma omp parallel shared (argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} + #pragma omp parallel shared (argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} + #pragma omp parallel shared (argc) + #pragma omp parallel shared (S1) // expected-error {{'S1' does not refer to a value}} + #pragma omp parallel shared (a, b, c, d, f) + #pragma omp parallel shared (argv[1]) // expected-error {{expected variable name}} + #pragma omp parallel shared(ba) + #pragma omp parallel shared(ca) + #pragma omp parallel shared(da) + #pragma omp parallel shared(e, g) + #pragma omp parallel shared(h) // expected-error {{threadprivate or thread local variable cannot be shared}} + #pragma omp parallel private(i), shared(i) // expected-error {{private variable cannot be shared}} expected-note {{defined as private}} + foo(); + #pragma omp parallel private(i) + #pragma omp parallel shared(i) + #pragma omp parallel shared(j) + foo(); + + return 0; +} |