diff options
author | Alexey Bataev <a.bataev@hotmail.com> | 2014-07-23 07:46:59 +0000 |
---|---|---|
committer | Alexey Bataev <a.bataev@hotmail.com> | 2014-07-23 07:46:59 +0000 |
commit | dea4761c06f9dd40032c31c952922e2cb62ae3c4 (patch) | |
tree | 3dd047b93989f4a11c379e73e6caa04c6a960829 /clang/test/OpenMP/atomic_messages.cpp | |
parent | 9a0051cd59d108f70b12acb54bdc5bee246f3fae (diff) | |
download | bcm5719-llvm-dea4761c06f9dd40032c31c952922e2cb62ae3c4.tar.gz bcm5719-llvm-dea4761c06f9dd40032c31c952922e2cb62ae3c4.zip |
[OPENMP] Initial parsing an sema analysis for 'write' clause of 'atomic' directive.
llvm-svn: 213728
Diffstat (limited to 'clang/test/OpenMP/atomic_messages.cpp')
-rw-r--r-- | clang/test/OpenMP/atomic_messages.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/clang/test/OpenMP/atomic_messages.cpp b/clang/test/OpenMP/atomic_messages.cpp index 7b35e42dc79..4bc7686c112 100644 --- a/clang/test/OpenMP/atomic_messages.cpp +++ b/clang/test/OpenMP/atomic_messages.cpp @@ -45,3 +45,59 @@ int read() { return read<int>(); } + +template <class T> +T write() { + T a, b = 0; +// Test for atomic write +#pragma omp atomic write +// expected-error@+1 {{the statement for 'atomic write' must be an expression statement of form 'x = expr;', where x is an l-value expression with scalar type}} + ; +// expected-error@+1 {{directive '#pragma omp atomic' cannot contain more than one 'write' clause}} +#pragma omp atomic write write + a = b; + + return T(); +} + +int write() { + int a, b = 0; +// Test for atomic write +#pragma omp atomic write +// expected-error@+1 {{the statement for 'atomic write' must be an expression statement of form 'x = expr;', where x is an l-value expression with scalar type}} + ; +// expected-error@+1 {{directive '#pragma omp atomic' cannot contain more than one 'write' clause}} +#pragma omp atomic write write + a = b; + + return write<int>(); +} + +template <class T> +T mixed() { + T a, b = T(); +// expected-error@+2 2 {{directive '#pragma omp atomic' cannot contain more than one 'read', 'write', 'update' or 'capture' clause}} +// expected-note@+1 2 {{'read' clause used here}} +#pragma omp atomic read write + a = b; +// expected-error@+2 2 {{directive '#pragma omp atomic' cannot contain more than one 'read', 'write', 'update' or 'capture' clause}} +// expected-note@+1 2 {{'write' clause used here}} +#pragma omp atomic write read + a = b; + return T(); +} + +int mixed() { + int a, b = 0; +// expected-error@+2 {{directive '#pragma omp atomic' cannot contain more than one 'read', 'write', 'update' or 'capture' clause}} +// expected-note@+1 {{'read' clause used here}} +#pragma omp atomic read write + a = b; +// expected-error@+2 {{directive '#pragma omp atomic' cannot contain more than one 'read', 'write', 'update' or 'capture' clause}} +// expected-note@+1 {{'write' clause used here}} +#pragma omp atomic write read + a = b; +// expected-note@+1 {{in instantiation of function template specialization 'mixed<int>' requested here}} + return mixed<int>(); +} + |