blob: 6b53b1b1e18df6a7b70c9286ac46e6b94f328b9d [file]
// { dg-do compile { target { c || c++11 } } }
// { dg-additional-options "-fdump-tree-gimple" }
typedef struct S { int x;} S;
int x;
S s1;
S s2;
void f() {
#pragma omp declare mapper(S var) map(to: var)
#pragma omp target exit data map(always, from: s1)
}
void f2() {
#pragma omp declare mapper(S var) map(present, to: var)
#pragma omp target enter data map(always, tofrom : s2)
}
void f3()
{
S x;
int y;
#pragma omp declare mapper (S var) map(always, to: var, y)
#pragma omp target enter data map(x)
}
// to + 'exit date' always from -> release
// { dg final { scan-dump "static int omp declare mapper <default> = struct S #pragma omp declare mapper \\(struct S var\\) map\\(to:var\\);" "gimple" }
// { dg final { scan-dump "#pragma omp target exit data map\\(release:s1 \\\[len: 4\\\]\\)" "gimple" }
// present,to + always,from -> always,present,to
// { dg final { scan-dump "static int omp declare mapper <default> = struct S #pragma omp declare mapper \\(struct S var\\) map\\(present,to:var\\);" "gimple" }
// { dg final { scan-dump "#pragma omp target enter data map\\(always,present,to:s2 \\\[len: 4\\\]\\)" "gimple" }
// always,to + - -> always,to
// { dg final { scan-dump "static int omp declare mapper <default> = struct S #pragma omp declare mapper \\(struct S var\\) map\\(always,to:y\\) map\\(always,to:var\\);" "gimple" }
// { dg final { scan-dump "#pragma omp target enter data map\\(always,to:y \\\[len: 4\\\]\\) map\\(always,to:x \\\[len: 4\\\]\\)" "gimple" }