diff options
| author | Michael Kruse <llvm@meinersbur.de> | 2019-02-19 16:38:20 +0000 |
|---|---|---|
| committer | Michael Kruse <llvm@meinersbur.de> | 2019-02-19 16:38:20 +0000 |
| commit | 4304e9d14399904441bdc01b5d8812f83ea710d4 (patch) | |
| tree | 52719f02bb527a037f372202f5d4925f93f066a9 /clang/test/OpenMP/declare_mapper_messages.c | |
| parent | 9d575db85ed52e87e759cb0fc88c221ef19898a4 (diff) | |
| download | bcm5719-llvm-4304e9d14399904441bdc01b5d8812f83ea710d4.tar.gz bcm5719-llvm-4304e9d14399904441bdc01b5d8812f83ea710d4.zip | |
[OpenMP 5.0] Parsing/sema support for map clause with mapper modifier.
This patch implements the parsing and sema support for OpenMP map
clauses with potential user-defined mapper attached. User defined mapper
is a new feature in OpenMP 5.0. A map clause can have an explicit or
implicit associated mapper, which instructs the compiler to generate
extra data mapping. An example is shown below:
struct S { int len; int *d; };
#pragma omp declare mapper(id: struct S s) map(s, s.d[0:s.len])
struct S ss;
#pragma omp target map(mapper(id) tofrom: ss) // use the mapper with name 'id' to map ss
Contributed-by: Lingda Li <lildmh@gmail.com>
Differential Revision: https://reviews.llvm.org/D58074
llvm-svn: 354347
Diffstat (limited to 'clang/test/OpenMP/declare_mapper_messages.c')
| -rw-r--r-- | clang/test/OpenMP/declare_mapper_messages.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/clang/test/OpenMP/declare_mapper_messages.c b/clang/test/OpenMP/declare_mapper_messages.c index c8e65b2a365..fc8fa9dbda5 100644 --- a/clang/test/OpenMP/declare_mapper_messages.c +++ b/clang/test/OpenMP/declare_mapper_messages.c @@ -35,6 +35,21 @@ int fun(int arg) { #pragma omp declare mapper(id: struct vec v) map(v.len) // expected-error {{redefinition of user-defined mapper for type 'struct vec' with name 'id'}} { #pragma omp declare mapper(id: struct vec v) map(v.len) + struct vec vv, v1; +#pragma omp target map(mapper) // expected-error {{use of undeclared identifier 'mapper'}} + {} +#pragma omp target map(mapper:vv) // expected-error {{expected '(' after 'mapper'}} + {} +#pragma omp target map(mapper( :vv) // expected-error {{expected expression}} expected-error {{expected ')'}} expected-warning {{implicit declaration of function 'mapper' is invalid in C99}} expected-note {{to match this '('}} + {} +#pragma omp target map(mapper(aa :vv) // expected-error {{use of undeclared identifier 'aa'}} expected-error {{expected ')'}} expected-warning {{implicit declaration of function 'mapper' is invalid in C99}} expected-note {{to match this '('}} + {} +#pragma omp target map(mapper(ab) :vv) // expected-error {{missing map type}} expected-error {{cannot find a valid user-defined mapper for type 'struct vec' with name 'ab'}} + {} +#pragma omp target map(mapper(aa) :vv) // expected-error {{missing map type}} + {} +#pragma omp target map(mapper(aa) to:vv) map(close mapper(aa) from:v1) + {} } } return arg; |

