summaryrefslogtreecommitdiffstats
path: root/clang/test/OpenMP/declare_mapper_messages.c
diff options
context:
space:
mode:
authorMichael Kruse <llvm@meinersbur.de>2019-02-19 16:38:20 +0000
committerMichael Kruse <llvm@meinersbur.de>2019-02-19 16:38:20 +0000
commit4304e9d14399904441bdc01b5d8812f83ea710d4 (patch)
tree52719f02bb527a037f372202f5d4925f93f066a9 /clang/test/OpenMP/declare_mapper_messages.c
parent9d575db85ed52e87e759cb0fc88c221ef19898a4 (diff)
downloadbcm5719-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.c15
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;
OpenPOWER on IntegriCloud