diff options
Diffstat (limited to 'clang/test/OpenMP')
18 files changed, 994 insertions, 22 deletions
diff --git a/clang/test/OpenMP/distribute_ast_print.cpp b/clang/test/OpenMP/distribute_ast_print.cpp index c3a175a5e5e..5748fc79ed6 100644 --- a/clang/test/OpenMP/distribute_ast_print.cpp +++ b/clang/test/OpenMP/distribute_ast_print.cpp @@ -8,6 +8,75 @@ void foo() {} +struct S { + S(): a(0) {} + S(int v) : a(v) {} + int a; + typedef int type; +}; + +template <typename T> +class S7 : public T { +protected: + T a; + S7() : a(0) {} + +public: + S7(typename T::type v) : a(v) { +#pragma omp target +#pragma omp teams +#pragma omp distribute private(a) private(this->a) private(T::a) + for (int k = 0; k < a.a; ++k) + ++this->a.a; + } + S7 &operator=(S7 &s) { +#pragma omp target +#pragma omp teams +#pragma omp distribute private(a) private(this->a) + for (int k = 0; k < s.a.a; ++k) + ++s.a.a; + return *this; + } +}; + +// CHECK: #pragma omp target +// CHECK-NEXT: #pragma omp teams +// CHECK-NEXT: #pragma omp distribute private(this->a) private(this->a) private(this->S::a) +// CHECK: #pragma omp target +// CHECK-NEXT: #pragma omp teams +// CHECK-NEXT: #pragma omp distribute private(this->a) private(this->a) private(T::a) +// CHECK: #pragma omp target +// CHECK-NEXT: #pragma omp teams +// CHECK-NEXT: #pragma omp distribute private(this->a) private(this->a) + +class S8 : public S7<S> { + S8() {} + +public: + S8(int v) : S7<S>(v){ +#pragma omp target +#pragma omp teams +#pragma omp distribute private(a) private(this->a) private(S7<S>::a) + for (int k = 0; k < a.a; ++k) + ++this->a.a; + } + S8 &operator=(S8 &s) { +#pragma omp target +#pragma omp teams +#pragma omp distribute private(a) private(this->a) + for (int k = 0; k < s.a.a; ++k) + ++s.a.a; + return *this; + } +}; + +// CHECK: #pragma omp target +// CHECK-NEXT: #pragma omp teams +// CHECK-NEXT: #pragma omp distribute private(this->a) private(this->a) private(this->S7<S>::a) +// CHECK: #pragma omp target +// CHECK-NEXT: #pragma omp teams +// CHECK-NEXT: #pragma omp distribute private(this->a) private(this->a) + template <class T, int N> T tmain(T argc) { T b = argc, c, d, e, f, g; diff --git a/clang/test/OpenMP/for_ast_print.cpp b/clang/test/OpenMP/for_ast_print.cpp index 8fd82e7f028..76ba89d1c6c 100644 --- a/clang/test/OpenMP/for_ast_print.cpp +++ b/clang/test/OpenMP/for_ast_print.cpp @@ -8,6 +8,57 @@ void foo() {} +struct S { + S(): a(0) {} + S(int v) : a(v) {} + int a; + typedef int type; +}; + +template <typename T> +class S7 : public T { +protected: + T a; + S7() : a(0) {} + +public: + S7(typename T::type v) : a(v) { +#pragma omp for private(a) private(this->a) private(T::a) + for (int k = 0; k < a.a; ++k) + ++this->a.a; + } + S7 &operator=(S7 &s) { +#pragma omp for private(a) private(this->a) + for (int k = 0; k < s.a.a; ++k) + ++s.a.a; + return *this; + } +}; + +// CHECK: #pragma omp for private(this->a) private(this->a) private(this->S::a) +// CHECK: #pragma omp for private(this->a) private(this->a) private(T::a) +// CHECK: #pragma omp for private(this->a) private(this->a) + +class S8 : public S7<S> { + S8() {} + +public: + S8(int v) : S7<S>(v){ +#pragma omp for private(a) private(this->a) private(S7<S>::a) + for (int k = 0; k < a.a; ++k) + ++this->a.a; + } + S8 &operator=(S8 &s) { +#pragma omp for private(a) private(this->a) + for (int k = 0; k < s.a.a; ++k) + ++s.a.a; + return *this; + } +}; + +// CHECK: #pragma omp for private(this->a) private(this->a) private(this->S7<S>::a) +// CHECK: #pragma omp for private(this->a) private(this->a) + template <class T, int N> T tmain(T argc) { T b = argc, c, d, e, f, g; diff --git a/clang/test/OpenMP/for_private_messages.cpp b/clang/test/OpenMP/for_private_messages.cpp index 3015f819b54..4045c5b56ff 100644 --- a/clang/test/OpenMP/for_private_messages.cpp +++ b/clang/test/OpenMP/for_private_messages.cpp @@ -29,7 +29,11 @@ class S4 { S4(); // expected-note {{implicitly declared private here}} public: - S4(int v) : a(v) {} + S4(int v) : a(v) { +#pragma omp for private(a) private(this->a) + for (int k = 0; k < v; ++k) + ++this->a; + } }; class S5 { int a; @@ -37,6 +41,50 @@ class S5 { public: S5(int v) : a(v) {} + S5 &operator=(S5 &s) { +#pragma omp for private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}} + for (int k = 0; k < s.a; ++k) + ++s.a; + return *this; + } +}; + +template <typename T> +class S6 { +public: + T a; + + S6() : a(0) {} + S6(T v) : a(v) { +#pragma omp for private(a) private(this->a) + for (int k = 0; k < v; ++k) + ++this->a; + } + S6 &operator=(S6 &s) { +#pragma omp for private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}} + for (int k = 0; k < s.a; ++k) + ++s.a; + return *this; + } +}; + +template <typename T> +class S7 : public T { + T a; + S7() : a(0) {} + +public: + S7(T v) : a(v) { +#pragma omp for private(a) private(this->a) private(T::a) + for (int k = 0; k < a.a; ++k) + ++this->a.a; + } + S7 &operator=(S7 &s) { +#pragma omp for private(a) private(this->a) private(s.a) private(s.T::a) // expected-error 2 {{expected variable name or data member of current class}} + for (int k = 0; k < s.a.a; ++k) + ++s.a.a; + return *this; + } }; S3 h; @@ -126,6 +174,8 @@ using A::x; int main(int argc, char **argv) { S4 e(4); S5 g(5); + S6<float> s6(0.0) , s6_0(1.0); + S7<S6<float> > s7(0.0) , s7_0(1.0); int i; int &j = i; #pragma omp for private // expected-error {{expected '(' after 'private'}} @@ -190,6 +240,8 @@ int main(int argc, char **argv) { for(int k = 0; k < argc; ++k) si = k + 1; - return 0; + s6 = s6_0; // expected-note {{in instantiation of member function 'S6<float>::operator=' requested here}} + s7 = s7_0; // expected-note {{in instantiation of member function 'S7<S6<float> >::operator=' requested here}} + return foomain(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<int, char>' requested here}} } diff --git a/clang/test/OpenMP/for_simd_ast_print.cpp b/clang/test/OpenMP/for_simd_ast_print.cpp index d4b13ba1998..54f0d467613 100644 --- a/clang/test/OpenMP/for_simd_ast_print.cpp +++ b/clang/test/OpenMP/for_simd_ast_print.cpp @@ -6,6 +6,57 @@ #ifndef HEADER #define HEADER +struct S1 { + S1(): a(0) {} + S1(int v) : a(v) {} + int a; + typedef int type; +}; + +template <typename T> +class S7 : public T { +protected: + T a; + S7() : a(0) {} + +public: + S7(typename T::type v) : a(v) { +#pragma omp for simd private(a) private(this->a) private(T::a) + for (int k = 0; k < a.a; ++k) + ++this->a.a; + } + S7 &operator=(S7 &s) { +#pragma omp for simd private(a) private(this->a) + for (int k = 0; k < s.a.a; ++k) + ++s.a.a; + return *this; + } +}; + +// CHECK: #pragma omp for simd private(this->a) private(this->a) private(this->S1::a) +// CHECK: #pragma omp for simd private(this->a) private(this->a) private(T::a) +// CHECK: #pragma omp for simd private(this->a) private(this->a) + +class S8 : public S7<S1> { + S8() {} + +public: + S8(int v) : S7<S1>(v){ +#pragma omp for simd private(a) private(this->a) private(S7<S1>::a) + for (int k = 0; k < a.a; ++k) + ++this->a.a; + } + S8 &operator=(S8 &s) { +#pragma omp for simd private(a) private(this->a) + for (int k = 0; k < s.a.a; ++k) + ++s.a.a; + return *this; + } +}; + +// CHECK: #pragma omp for simd private(this->a) private(this->a) private(this->S7<S1>::a) +// CHECK: #pragma omp for simd private(this->a) private(this->a) + void foo() {} int g_ind = 1; template<class T, class N> T reduct(T* arr, N num) { diff --git a/clang/test/OpenMP/for_simd_private_messages.cpp b/clang/test/OpenMP/for_simd_private_messages.cpp index 15e235c2f8f..ca4c3a33fca 100644 --- a/clang/test/OpenMP/for_simd_private_messages.cpp +++ b/clang/test/OpenMP/for_simd_private_messages.cpp @@ -29,7 +29,11 @@ class S4 { S4(); // expected-note {{implicitly declared private here}} public: - S4(int v) : a(v) {} + S4(int v) : a(v) { +#pragma omp for simd private(a) private(this->a) + for (int k = 0; k < v; ++k) + ++this->a; + } }; class S5 { int a; @@ -37,6 +41,50 @@ class S5 { public: S5(int v) : a(v) {} + S5 &operator=(S5 &s) { +#pragma omp for simd private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}} + for (int k = 0; k < s.a; ++k) + ++s.a; + return *this; + } +}; + +template <typename T> +class S6 { +public: + T a; + + S6() : a(0) {} + S6(T v) : a(v) { +#pragma omp for simd private(a) private(this->a) + for (int k = 0; k < v; ++k) + ++this->a; + } + S6 &operator=(S6 &s) { +#pragma omp for simd private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}} + for (int k = 0; k < s.a; ++k) + ++s.a; + return *this; + } +}; + +template <typename T> +class S7 : public T { + T a; + S7() : a(0) {} + +public: + S7(T v) : a(v) { +#pragma omp for simd private(a) private(this->a) private(T::a) + for (int k = 0; k < a.a; ++k) + ++this->a.a; + } + S7 &operator=(S7 &s) { +#pragma omp for simd private(a) private(this->a) private(s.a) private(s.T::a) // expected-error 2 {{expected variable name or data member of current class}} + for (int k = 0; k < s.a.a; ++k) + ++s.a.a; + return *this; + } }; S3 h; @@ -119,6 +167,8 @@ using A::x; int main(int argc, char **argv) { S4 e(4); S5 g(5); + S6<float> s6(0.0) , s6_0(1.0); + S7<S6<float> > s7(0.0) , s7_0(1.0); int i; int &j = i; #pragma omp for simd private // expected-error {{expected '(' after 'private'}} @@ -180,6 +230,8 @@ int main(int argc, char **argv) { for (int k = 0; k < argc; ++k) m = k + 2; - return 0; + s6 = s6_0; // expected-note {{in instantiation of member function 'S6<float>::operator=' requested here}} + s7 = s7_0; // expected-note {{in instantiation of member function 'S7<S6<float> >::operator=' requested here}} + return foomain(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<int, char>' requested here}} } diff --git a/clang/test/OpenMP/parallel_ast_print.cpp b/clang/test/OpenMP/parallel_ast_print.cpp index 1e46fba48ca..88d8053cc7a 100644 --- a/clang/test/OpenMP/parallel_ast_print.cpp +++ b/clang/test/OpenMP/parallel_ast_print.cpp @@ -8,6 +8,57 @@ void foo() {} +struct S1 { + S1(): a(0) {} + S1(int v) : a(v) {} + int a; + typedef int type; +}; + +template <typename T> +class S7 : public T { +protected: + T a; + S7() : a(0) {} + +public: + S7(typename T::type v) : a(v) { +#pragma omp parallel private(a) private(this->a) private(T::a) + for (int k = 0; k < a.a; ++k) + ++this->a.a; + } + S7 &operator=(S7 &s) { +#pragma omp parallel private(a) private(this->a) + for (int k = 0; k < s.a.a; ++k) + ++s.a.a; + return *this; + } +}; + +// CHECK: #pragma omp parallel private(this->a) private(this->a) private(this->S1::a) +// CHECK: #pragma omp parallel private(this->a) private(this->a) private(T::a) +// CHECK: #pragma omp parallel private(this->a) private(this->a) + +class S8 : public S7<S1> { + S8() {} + +public: + S8(int v) : S7<S1>(v){ +#pragma omp parallel private(a) private(this->a) private(S7<S1>::a) + for (int k = 0; k < a.a; ++k) + ++this->a.a; + } + S8 &operator=(S8 &s) { +#pragma omp parallel private(a) private(this->a) + for (int k = 0; k < s.a.a; ++k) + ++s.a.a; + return *this; + } +}; + +// CHECK: #pragma omp parallel private(this->a) private(this->a) private(this->S7<S1>::a) +// CHECK: #pragma omp parallel private(this->a) private(this->a) + template <class T> struct S { operator T() {return T();} diff --git a/clang/test/OpenMP/parallel_for_ast_print.cpp b/clang/test/OpenMP/parallel_for_ast_print.cpp index c4be521455d..2476ee87605 100644 --- a/clang/test/OpenMP/parallel_for_ast_print.cpp +++ b/clang/test/OpenMP/parallel_for_ast_print.cpp @@ -8,6 +8,57 @@ void foo() {} +struct S { + S(): a(0) {} + S(int v) : a(v) {} + int a; + typedef int type; +}; + +template <typename T> +class S7 : public T { +protected: + T a; + S7() : a(0) {} + +public: + S7(typename T::type v) : a(v) { +#pragma omp parallel for private(a) private(this->a) private(T::a) + for (int k = 0; k < a.a; ++k) + ++this->a.a; + } + S7 &operator=(S7 &s) { +#pragma omp parallel for private(a) private(this->a) + for (int k = 0; k < s.a.a; ++k) + ++s.a.a; + return *this; + } +}; + +// CHECK: #pragma omp parallel for private(this->a) private(this->a) private(this->S::a) +// CHECK: #pragma omp parallel for private(this->a) private(this->a) private(T::a) +// CHECK: #pragma omp parallel for private(this->a) private(this->a) + +class S8 : public S7<S> { + S8() {} + +public: + S8(int v) : S7<S>(v){ +#pragma omp parallel for private(a) private(this->a) private(S7<S>::a) + for (int k = 0; k < a.a; ++k) + ++this->a.a; + } + S8 &operator=(S8 &s) { +#pragma omp parallel for private(a) private(this->a) + for (int k = 0; k < s.a.a; ++k) + ++s.a.a; + return *this; + } +}; + +// CHECK: #pragma omp parallel for private(this->a) private(this->a) private(this->S7<S>::a) +// CHECK: #pragma omp parallel for private(this->a) private(this->a) + template <class T, int N> T tmain(T argc) { T b = argc, c, d, e, f, h; diff --git a/clang/test/OpenMP/parallel_for_private_messages.cpp b/clang/test/OpenMP/parallel_for_private_messages.cpp index efc827b0d5e..cc1b79f4111 100644 --- a/clang/test/OpenMP/parallel_for_private_messages.cpp +++ b/clang/test/OpenMP/parallel_for_private_messages.cpp @@ -29,7 +29,11 @@ class S4 { S4(); // expected-note {{implicitly declared private here}} public: - S4(int v) : a(v) {} + S4(int v) : a(v) { +#pragma omp parallel for private(a) private(this->a) + for (int k = 0; k < v; ++k) + ++this->a; + } }; class S5 { int a; @@ -37,6 +41,50 @@ class S5 { public: S5(int v) : a(v) {} + S5 &operator=(S5 &s) { +#pragma omp parallel for private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}} + for (int k = 0; k < s.a; ++k) + ++s.a; + return *this; + } +}; + +template <typename T> +class S6 { +public: + T a; + + S6() : a(0) {} + S6(T v) : a(v) { +#pragma omp parallel for private(a) private(this->a) + for (int k = 0; k < v; ++k) + ++this->a; + } + S6 &operator=(S6 &s) { +#pragma omp parallel for private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}} + for (int k = 0; k < s.a; ++k) + ++s.a; + return *this; + } +}; + +template <typename T> +class S7 : public T { + T a; + S7() : a(0) {} + +public: + S7(T v) : a(v) { +#pragma omp parallel for private(a) private(this->a) private(T::a) + for (int k = 0; k < a.a; ++k) + ++this->a.a; + } + S7 &operator=(S7 &s) { +#pragma omp parallel for private(a) private(this->a) private(s.a) private(s.T::a) // expected-error 2 {{expected variable name or data member of current class}} + for (int k = 0; k < s.a.a; ++k) + ++s.a.a; + return *this; + } }; S3 h; @@ -119,6 +167,8 @@ using A::x; int main(int argc, char **argv) { S4 e(4); S5 g(5); + S6<float> s6(0.0) , s6_0(1.0); + S7<S6<float> > s7(0.0) , s7_0(1.0); int i; int &j = i; #pragma omp parallel for private // expected-error {{expected '(' after 'private'}} @@ -180,6 +230,8 @@ int main(int argc, char **argv) { for (int k = 0; k < argc; ++k) m = k + 2; - return 0; + s6 = s6_0; // expected-note {{in instantiation of member function 'S6<float>::operator=' requested here}} + s7 = s7_0; // expected-note {{in instantiation of member function 'S7<S6<float> >::operator=' requested here}} + return foomain(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<int, char>' requested here}} } diff --git a/clang/test/OpenMP/parallel_for_simd_ast_print.cpp b/clang/test/OpenMP/parallel_for_simd_ast_print.cpp index 1b9415d8dbf..cdd1b73b590 100644 --- a/clang/test/OpenMP/parallel_for_simd_ast_print.cpp +++ b/clang/test/OpenMP/parallel_for_simd_ast_print.cpp @@ -7,6 +7,58 @@ #define HEADER void foo() {} + +struct S1 { + S1() : a(0) {} + S1(int v) : a(v) {} + int a; + typedef int type; +}; + +template <typename T> +class S7 : public T { +protected: + T a; + S7() : a(0) {} + +public: + S7(typename T::type v) : a(v) { +#pragma omp parallel for simd private(a) private(this->a) private(T::a) + for (int k = 0; k < a.a; ++k) + ++this->a.a; + } + S7 &operator=(S7 &s) { +#pragma omp parallel for simd private(a) private(this->a) + for (int k = 0; k < s.a.a; ++k) + ++s.a.a; + return *this; + } +}; + +// CHECK: #pragma omp parallel for simd private(this->a) private(this->a) private(this->S1::a) +// CHECK: #pragma omp parallel for simd private(this->a) private(this->a) private(T::a) +// CHECK: #pragma omp parallel for simd private(this->a) private(this->a) + +class S8 : public S7<S1> { + S8() {} + +public: + S8(int v) : S7<S1>(v){ +#pragma omp parallel for simd private(a) private(this->a) private(S7<S1>::a) + for (int k = 0; k < a.a; ++k) + ++this->a.a; + } + S8 &operator=(S8 &s) { +#pragma omp parallel for simd private(a) private(this->a) + for (int k = 0; k < s.a.a; ++k) + ++s.a.a; + return *this; + } +}; + +// CHECK: #pragma omp parallel for simd private(this->a) private(this->a) private(this->S7<S1>::a) +// CHECK: #pragma omp parallel for simd private(this->a) private(this->a) + int g_ind = 1; template<class T, class N> T reduct(T* arr, N num) { N i; diff --git a/clang/test/OpenMP/parallel_for_simd_private_messages.cpp b/clang/test/OpenMP/parallel_for_simd_private_messages.cpp index a031d407ec1..a33b35d57d1 100644 --- a/clang/test/OpenMP/parallel_for_simd_private_messages.cpp +++ b/clang/test/OpenMP/parallel_for_simd_private_messages.cpp @@ -29,7 +29,11 @@ class S4 { S4(); // expected-note {{implicitly declared private here}} public: - S4(int v) : a(v) {} + S4(int v) : a(v) { +#pragma omp parallel for simd private(a) private(this->a) + for (int k = 0; k < v; ++k) + ++this->a; + } }; class S5 { int a; @@ -37,6 +41,50 @@ class S5 { public: S5(int v) : a(v) {} + S5 &operator=(S5 &s) { +#pragma omp parallel for simd private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}} + for (int k = 0; k < s.a; ++k) + ++s.a; + return *this; + } +}; + +template <typename T> +class S6 { +public: + T a; + + S6() : a(0) {} + S6(T v) : a(v) { +#pragma omp parallel for simd private(a) private(this->a) + for (int k = 0; k < v; ++k) + ++this->a; + } + S6 &operator=(S6 &s) { +#pragma omp parallel for simd private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}} + for (int k = 0; k < s.a; ++k) + ++s.a; + return *this; + } +}; + +template <typename T> +class S7 : public T { + T a; + S7() : a(0) {} + +public: + S7(T v) : a(v) { +#pragma omp parallel for simd private(a) private(this->a) private(T::a) + for (int k = 0; k < a.a; ++k) + ++this->a.a; + } + S7 &operator=(S7 &s) { +#pragma omp parallel for simd private(a) private(this->a) private(s.a) private(s.T::a) // expected-error 2 {{expected variable name or data member of current class}} + for (int k = 0; k < s.a.a; ++k) + ++s.a.a; + return *this; + } }; S3 h; @@ -119,6 +167,8 @@ using A::x; int main(int argc, char **argv) { S4 e(4); S5 g(5); + S6<float> s6(0.0) , s6_0(1.0); + S7<S6<float> > s7(0.0) , s7_0(1.0); int i; int &j = i; #pragma omp parallel for simd private // expected-error {{expected '(' after 'private'}} @@ -180,6 +230,8 @@ int main(int argc, char **argv) { for (int k = 0; k < argc; ++k) m = k + 3; - return 0; + s6 = s6_0; // expected-note {{in instantiation of member function 'S6<float>::operator=' requested here}} + s7 = s7_0; // expected-note {{in instantiation of member function 'S7<S6<float> >::operator=' requested here}} + return foomain(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<int, char>' requested here}} } diff --git a/clang/test/OpenMP/parallel_sections_private_messages.cpp b/clang/test/OpenMP/parallel_sections_private_messages.cpp index ac9280e74ce..40b0138b539 100644 --- a/clang/test/OpenMP/parallel_sections_private_messages.cpp +++ b/clang/test/OpenMP/parallel_sections_private_messages.cpp @@ -29,7 +29,13 @@ class S4 { S4(); // expected-note {{implicitly declared private here}} public: - S4(int v) : a(v) {} + S4(int v) : a(v) { +#pragma omp parallel sections private(a) private(this->a) + { + for (int k = 0; k < v; ++k) + ++this->a; + } + } }; class S5 { int a; @@ -37,6 +43,60 @@ class S5 { public: S5(int v) : a(v) {} + S5 &operator=(S5 &s) { +#pragma omp parallel sections private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}} + { + for (int k = 0; k < s.a; ++k) + ++s.a; + } + return *this; + } +}; + +template <typename T> +class S6 { +public: + T a; + + S6() : a(0) {} + S6(T v) : a(v) { +#pragma omp parallel sections private(a) private(this->a) + { + for (int k = 0; k < v; ++k) + ++this->a; + } + } + S6 &operator=(S6 &s) { +#pragma omp parallel sections private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}} + { + for (int k = 0; k < s.a; ++k) + ++s.a; + } + return *this; + } +}; + +template <typename T> +class S7 : public T { + T a; + S7() : a(0) {} + +public: + S7(T v) : a(v) { +#pragma omp parallel sections private(a) private(this->a) private(T::a) + { + for (int k = 0; k < a.a; ++k) + ++this->a.a; + } + } + S7 &operator=(S7 &s) { +#pragma omp parallel sections private(a) private(this->a) private(s.a) private(s.T::a) // expected-error 2 {{expected variable name or data member of current class}} + { + for (int k = 0; k < s.a.a; ++k) + ++s.a.a; + } + return *this; + } }; S3 h; @@ -134,6 +194,8 @@ using A::x; int main(int argc, char **argv) { S4 e(4); S5 g(5); + S6<float> s6(0.0) , s6_0(1.0); + S7<S6<float> > s7(0.0) , s7_0(1.0); int i; int &j = i; #pragma omp parallel sections private // expected-error {{expected '(' after 'private'}} @@ -212,6 +274,8 @@ int main(int argc, char **argv) { foo(); } - return 0; + s6 = s6_0; // expected-note {{in instantiation of member function 'S6<float>::operator=' requested here}} + s7 = s7_0; // expected-note {{in instantiation of member function 'S7<S6<float> >::operator=' requested here}} + return foomain(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<int, char>' requested here}} } diff --git a/clang/test/OpenMP/sections_private_messages.cpp b/clang/test/OpenMP/sections_private_messages.cpp index f13bbdb012e..27bb3136e72 100644 --- a/clang/test/OpenMP/sections_private_messages.cpp +++ b/clang/test/OpenMP/sections_private_messages.cpp @@ -29,7 +29,13 @@ class S4 { S4(); // expected-note {{implicitly declared private here}} public: - S4(int v) : a(v) {} + S4(int v) : a(v) { +#pragma omp sections private(a) private(this->a) + { + for (int k = 0; k < v; ++k) + ++this->a; + } + } }; class S5 { int a; @@ -37,6 +43,60 @@ class S5 { public: S5(int v) : a(v) {} + S5 &operator=(S5 &s) { +#pragma omp sections private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}} + { + for (int k = 0; k < s.a; ++k) + ++s.a; + } + return *this; + } +}; + +template <typename T> +class S6 { +public: + T a; + + S6() : a(0) {} + S6(T v) : a(v) { +#pragma omp sections private(a) private(this->a) + { + for (int k = 0; k < v; ++k) + ++this->a; + } + } + S6 &operator=(S6 &s) { +#pragma omp sections private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}} + { + for (int k = 0; k < s.a; ++k) + ++s.a; + } + return *this; + } +}; + +template <typename T> +class S7 : public T { + T a; + S7() : a(0) {} + +public: + S7(T v) : a(v) { +#pragma omp sections private(a) private(this->a) private(T::a) + { + for (int k = 0; k < a.a; ++k) + ++this->a.a; + } + } + S7 &operator=(S7 &s) { +#pragma omp sections private(a) private(this->a) private(s.a) private(s.T::a) // expected-error 2 {{expected variable name or data member of current class}} + { + for (int k = 0; k < s.a.a; ++k) + ++s.a.a; + } + return *this; + } }; S3 h; @@ -134,6 +194,8 @@ using A::x; int main(int argc, char **argv) { S4 e(4); S5 g(5); + S6<float> s6(0.0) , s6_0(1.0); + S7<S6<float> > s7(0.0) , s7_0(1.0); int i; int &j = i; #pragma omp sections private // expected-error {{expected '(' after 'private'}} @@ -212,6 +274,8 @@ int main(int argc, char **argv) { foo(); } - return 0; + s6 = s6_0; // expected-note {{in instantiation of member function 'S6<float>::operator=' requested here}} + s7 = s7_0; // expected-note {{in instantiation of member function 'S7<S6<float> >::operator=' requested here}} + return foomain(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<int, char>' requested here}} } diff --git a/clang/test/OpenMP/simd_private_messages.cpp b/clang/test/OpenMP/simd_private_messages.cpp index 3442d182ed0..1850101891f 100644 --- a/clang/test/OpenMP/simd_private_messages.cpp +++ b/clang/test/OpenMP/simd_private_messages.cpp @@ -26,13 +26,61 @@ class S4 { int a; S4(); // expected-note {{implicitly declared private here}} public: - S4(int v):a(v) { } + S4(int v) : a(v) { +#pragma omp simd private(a) private(this->a) + for (int k = 0; k < v; ++k) + ++this->a; + } }; class S5 { int a; S5():a(0) {} // expected-note {{implicitly declared private here}} public: S5(int v):a(v) { } + S5 &operator=(S5 &s) { +#pragma omp simd private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}} + for (int k = 0; k < s.a; ++k) + ++s.a; + return *this; + } +}; + +template <typename T> +class S6 { +public: + T a; + + S6() : a(0) {} + S6(T v) : a(v) { +#pragma omp simd private(a) private(this->a) + for (int k = 0; k < v; ++k) + ++this->a; + } + S6 &operator=(S6 &s) { +#pragma omp simd private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}} + for (int k = 0; k < s.a; ++k) + ++s.a; + return *this; + } +}; + +template <typename T> +class S7 : public T { + T a; + S7() : a(0) {} + +public: + S7(T v) : a(v) { +#pragma omp simd private(a) private(this->a) private(T::a) + for (int k = 0; k < a.a; ++k) + ++this->a.a; + } + S7 &operator=(S7 &s) { +#pragma omp simd private(a) private(this->a) private(s.a) private(s.T::a) // expected-error 2 {{expected variable name or data member of current class}} + for (int k = 0; k < s.a.a; ++k) + ++s.a.a; + return *this; + } }; S3 h; @@ -96,6 +144,8 @@ using A::x; int main(int argc, char **argv) { S4 e(4); S5 g(5); + S6<float> s6(0.0) , s6_0(1.0); + S7<S6<float> > s7(0.0) , s7_0(1.0); int i; int &j = i; #pragma omp simd private // expected-error {{expected '(' after 'private'}} @@ -137,6 +187,8 @@ int main(int argc, char **argv) { #pragma omp simd private(i) for (int k = 0; k < argc; ++k) ++k; - return 0; + s6 = s6_0; // expected-note {{in instantiation of member function 'S6<float>::operator=' requested here}} + s7 = s7_0; // expected-note {{in instantiation of member function 'S7<S6<float> >::operator=' requested here}} + return foomain(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<int, char>' requested here}} } diff --git a/clang/test/OpenMP/single_private_messages.cpp b/clang/test/OpenMP/single_private_messages.cpp index a24cf47cd2a..0ed0e6cfb09 100644 --- a/clang/test/OpenMP/single_private_messages.cpp +++ b/clang/test/OpenMP/single_private_messages.cpp @@ -29,7 +29,11 @@ class S4 { S4(); // expected-note {{implicitly declared private here}} public: - S4(int v) : a(v) {} + S4(int v) : a(v) { +#pragma omp single private(a) private(this->a) + for (int k = 0; k < v; ++k) + ++this->a; + } }; class S5 { int a; @@ -37,6 +41,50 @@ class S5 { public: S5(int v) : a(v) {} + S5 &operator=(S5 &s) { +#pragma omp single private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}} + for (int k = 0; k < s.a; ++k) + ++s.a; + return *this; + } +}; + +template <typename T> +class S6 { +public: + T a; + + S6() : a(0) {} + S6(T v) : a(v) { +#pragma omp single private(a) private(this->a) + for (int k = 0; k < v; ++k) + ++this->a; + } + S6 &operator=(S6 &s) { +#pragma omp single private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}} + for (int k = 0; k < s.a; ++k) + ++s.a; + return *this; + } +}; + +template <typename T> +class S7 : public T { + T a; + S7() : a(0) {} + +public: + S7(T v) : a(v) { +#pragma omp single private(a) private(this->a) private(T::a) + for (int k = 0; k < a.a; ++k) + ++this->a.a; + } + S7 &operator=(S7 &s) { +#pragma omp single private(a) private(this->a) private(s.a) private(s.T::a) // expected-error 2 {{expected variable name or data member of current class}} + for (int k = 0; k < s.a.a; ++k) + ++s.a.a; + return *this; + } }; S3 h; @@ -102,6 +150,8 @@ using A::x; int main(int argc, char **argv) { S4 e(4); S5 g(5); + S6<float> s6(0.0) , s6_0(1.0); + S7<S6<float> > s7(0.0) , s7_0(1.0); int i; int &j = i; #pragma omp single private // expected-error {{expected '(' after 'private'}} @@ -146,6 +196,8 @@ int main(int argc, char **argv) { #pragma omp single private(m) // OK foo(); - return 0; + s6 = s6_0; // expected-note {{in instantiation of member function 'S6<float>::operator=' requested here}} + s7 = s7_0; // expected-note {{in instantiation of member function 'S7<S6<float> >::operator=' requested here}} + return foomain(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<int, char>' requested here}} } diff --git a/clang/test/OpenMP/target_private_messages.cpp b/clang/test/OpenMP/target_private_messages.cpp index eb3b604feca..6c0ff044509 100644 --- a/clang/test/OpenMP/target_private_messages.cpp +++ b/clang/test/OpenMP/target_private_messages.cpp @@ -22,7 +22,11 @@ class S4 { S4(); // expected-note {{implicitly declared private here}} public: - S4(int v) : a(v) {} + S4(int v) : a(v) { +#pragma omp target private(a) private(this->a) + for (int k = 0; k < v; ++k) + ++this->a; + } }; class S5 { int a; @@ -30,6 +34,50 @@ class S5 { public: S5(int v) : a(v) {} + S5 &operator=(S5 &s) { +#pragma omp target private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}} + for (int k = 0; k < s.a; ++k) + ++s.a; + return *this; + } +}; + +template <typename T> +class S6 { +public: + T a; + + S6() : a(0) {} + S6(T v) : a(v) { +#pragma omp target private(a) private(this->a) + for (int k = 0; k < v; ++k) + ++this->a; + } + S6 &operator=(S6 &s) { +#pragma omp target private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}} + for (int k = 0; k < s.a; ++k) + ++s.a; + return *this; + } +}; + +template <typename T> +class S7 : public T { + T a; + S7() : a(0) {} + +public: + S7(T v) : a(v) { +#pragma omp target private(a) private(this->a) private(T::a) + for (int k = 0; k < a.a; ++k) + ++this->a.a; + } + S7 &operator=(S7 &s) { +#pragma omp target private(a) private(this->a) private(s.a) private(s.T::a) // expected-error 2 {{expected variable name or data member of current class}} + for (int k = 0; k < s.a.a; ++k) + ++s.a.a; + return *this; + } }; S3 h; @@ -86,6 +134,8 @@ using A::x; int main(int argc, char **argv) { S4 e(4); S5 g(5); + S6<float> s6(0.0) , s6_0(1.0); + S7<S6<float> > s7(0.0) , s7_0(1.0); int i; int &j = i; #pragma omp target private // expected-error {{expected '(' after 'private'}} @@ -116,6 +166,8 @@ int main(int argc, char **argv) { static int si; #pragma omp target private(si) // OK {} - return 0; + s6 = s6_0; // expected-note {{in instantiation of member function 'S6<float>::operator=' requested here}} + s7 = s7_0; // expected-note {{in instantiation of member function 'S7<S6<float> >::operator=' requested here}} + return foomain(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<int, char>' requested here}} } diff --git a/clang/test/OpenMP/task_ast_print.cpp b/clang/test/OpenMP/task_ast_print.cpp index 723139b0818..da3f5e48bb0 100644 --- a/clang/test/OpenMP/task_ast_print.cpp +++ b/clang/test/OpenMP/task_ast_print.cpp @@ -8,6 +8,57 @@ void foo() {} +struct S1 { + S1(): a(0) {} + S1(int v) : a(v) {} + int a; + typedef int type; +}; + +template <typename T> +class S7 : public T { +protected: + T a; + S7() : a(0) {} + +public: + S7(typename T::type v) : a(v) { +#pragma omp task private(a) private(this->a) private(T::a) + for (int k = 0; k < a.a; ++k) + ++this->a.a; + } + S7 &operator=(S7 &s) { +#pragma omp task private(a) private(this->a) + for (int k = 0; k < s.a.a; ++k) + ++s.a.a; + return *this; + } +}; + +// CHECK: #pragma omp task private(this->a) private(this->a) private(this->S1::a) +// CHECK: #pragma omp task private(this->a) private(this->a) private(T::a) +// CHECK: #pragma omp task private(this->a) private(this->a) + +class S8 : public S7<S1> { + S8() {} + +public: + S8(int v) : S7<S1>(v){ +#pragma omp task private(a) private(this->a) private(S7<S1>::a) + for (int k = 0; k < a.a; ++k) + ++this->a.a; + } + S8 &operator=(S8 &s) { +#pragma omp task private(a) private(this->a) + for (int k = 0; k < s.a.a; ++k) + ++s.a.a; + return *this; + } +}; + +// CHECK: #pragma omp task private(this->a) private(this->a) private(this->S7<S1>::a) +// CHECK: #pragma omp task private(this->a) private(this->a) + template <class T> struct S { operator T() { return T(); } diff --git a/clang/test/OpenMP/taskloop_private_messages.cpp b/clang/test/OpenMP/taskloop_private_messages.cpp index 3d00d3f252b..367d59da695 100644 --- a/clang/test/OpenMP/taskloop_private_messages.cpp +++ b/clang/test/OpenMP/taskloop_private_messages.cpp @@ -29,7 +29,11 @@ class S4 { S4(); // expected-note {{implicitly declared private here}} public: - S4(int v) : a(v) {} + S4(int v) : a(v) { +#pragma omp taskloop private(a) private(this->a) + for (int k = 0; k < v; ++k) + ++this->a; + } }; class S5 { int a; @@ -37,6 +41,50 @@ class S5 { public: S5(int v) : a(v) {} + S5 &operator=(S5 &s) { +#pragma omp taskloop private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}} + for (int k = 0; k < s.a; ++k) + ++s.a; + return *this; + } +}; + +template <typename T> +class S6 { +public: + T a; + + S6() : a(0) {} + S6(T v) : a(v) { +#pragma omp taskloop private(a) private(this->a) + for (int k = 0; k < v; ++k) + ++this->a; + } + S6 &operator=(S6 &s) { +#pragma omp taskloop private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}} + for (int k = 0; k < s.a; ++k) + ++s.a; + return *this; + } +}; + +template <typename T> +class S7 : public T { + T a; + S7() : a(0) {} + +public: + S7(T v) : a(v) { +#pragma omp taskloop private(a) private(this->a) private(T::a) + for (int k = 0; k < a.a; ++k) + ++this->a.a; + } + S7 &operator=(S7 &s) { +#pragma omp taskloop private(a) private(this->a) private(s.a) private(s.T::a) // expected-error 2 {{expected variable name or data member of current class}} + for (int k = 0; k < s.a.a; ++k) + ++s.a.a; + return *this; + } }; S3 h; @@ -126,6 +174,8 @@ using A::x; int main(int argc, char **argv) { S4 e(4); S5 g(5); + S6<float> s6(0.0) , s6_0(1.0); + S7<S6<float> > s7(0.0) , s7_0(1.0); int i; int &j = i; #pragma omp taskloop private // expected-error {{expected '(' after 'private'}} @@ -190,6 +240,8 @@ int main(int argc, char **argv) { for(int k = 0; k < argc; ++k) si = k + 1; - return 0; + s6 = s6_0; // expected-note {{in instantiation of member function 'S6<float>::operator=' requested here}} + s7 = s7_0; // expected-note {{in instantiation of member function 'S7<S6<float> >::operator=' requested here}} + return foomain(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<int, char>' requested here}} } diff --git a/clang/test/OpenMP/taskloop_simd_private_messages.cpp b/clang/test/OpenMP/taskloop_simd_private_messages.cpp index 4a9b08a7e9e..ba9e8da17e2 100644 --- a/clang/test/OpenMP/taskloop_simd_private_messages.cpp +++ b/clang/test/OpenMP/taskloop_simd_private_messages.cpp @@ -29,7 +29,11 @@ class S4 { S4(); // expected-note {{implicitly declared private here}} public: - S4(int v) : a(v) {} + S4(int v) : a(v) { +#pragma omp taskloop simd private(a) private(this->a) + for (int k = 0; k < v; ++k) + ++this->a; + } }; class S5 { int a; @@ -37,6 +41,50 @@ class S5 { public: S5(int v) : a(v) {} + S5 &operator=(S5 &s) { +#pragma omp taskloop simd private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}} + for (int k = 0; k < s.a; ++k) + ++s.a; + return *this; + } +}; + +template <typename T> +class S6 { +public: + T a; + + S6() : a(0) {} + S6(T v) : a(v) { +#pragma omp taskloop simd private(a) private(this->a) + for (int k = 0; k < v; ++k) + ++this->a; + } + S6 &operator=(S6 &s) { +#pragma omp taskloop simd private(a) private(this->a) private(s.a) // expected-error {{expected variable name or data member of current class}} + for (int k = 0; k < s.a; ++k) + ++s.a; + return *this; + } +}; + +template <typename T> +class S7 : public T { + T a; + S7() : a(0) {} + +public: + S7(T v) : a(v) { +#pragma omp taskloop simd private(a) private(this->a) private(T::a) + for (int k = 0; k < a.a; ++k) + ++this->a.a; + } + S7 &operator=(S7 &s) { +#pragma omp taskloop simd private(a) private(this->a) private(s.a) private(s.T::a) // expected-error 2 {{expected variable name or data member of current class}} + for (int k = 0; k < s.a.a; ++k) + ++s.a.a; + return *this; + } }; S3 h; @@ -126,6 +174,8 @@ using A::x; int main(int argc, char **argv) { S4 e(4); S5 g(5); + S6<float> s6(0.0) , s6_0(1.0); + S7<S6<float> > s7(0.0) , s7_0(1.0); int i; int &j = i; #pragma omp taskloop simd private // expected-error {{expected '(' after 'private'}} @@ -190,6 +240,8 @@ int main(int argc, char **argv) { for(int k = 0; k < argc; ++k) si = k + 1; - return 0; + s6 = s6_0; // expected-note {{in instantiation of member function 'S6<float>::operator=' requested here}} + s7 = s7_0; // expected-note {{in instantiation of member function 'S7<S6<float> >::operator=' requested here}} + return foomain(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<int, char>' requested here}} } |

