blob: b7821486fc0cabdcc98ee7af545341b041a46c2e [file]
/* { dg-do compile { target { c || c++11 } } } */
/* { dg-additional-options "-fdump-tree-original" } */
typedef struct {
int a, b, c, d;
} S;
#pragma omp declare mapper (S s) map(alloc: s.a) map(to: s.b) map(from: s.c) \
map(tofrom: s.d)
#pragma omp declare mapper (update: S s) map(s.a, s.b, s.c, s.d)
int main()
{
S v;
#pragma omp target update to(v)
/* { dg-warning {dropping .from. clause during mapper expansion in .#pragma omp target update.} "" { target *-*-* } .-1 } */
/* { dg-warning {dropping .alloc. clause during mapper expansion in .#pragma omp target update.} "" { target *-*-* } .-2 } */
/* { dg-final { scan-tree-dump-times {(?n)update to\(v\.d\) to\(v\.b\)$} 1 "original" } } */
#pragma omp target update from(v)
/* { dg-warning {dropping .to. clause during mapper expansion in .#pragma omp target update.} "" { target *-*-* } .-1 } */
/* { dg-warning {dropping .alloc. clause during mapper expansion in .#pragma omp target update.} "" { target *-*-* } .-2 } */
/* { dg-final { scan-tree-dump-times {(?n)update from\(v\.d\) from\(v\.c\)$} 1 "original" } } */
#pragma omp target update to(mapper(update): v)
/* { dg-final { scan-tree-dump-times {(?n)update to\(v\.d\) to\(v\.c\) to\(v\.b\) to\(v\.a\)$} 1 "original" } } */
#pragma omp target update from(mapper(update): v)
/* { dg-final { scan-tree-dump-times {(?n)update from\(v\.d\) from\(v\.c\) from\(v\.b\) from\(v\.a\)$} 1 "original" } } */
#pragma omp target update to(present, mapper(update): v)
/* { dg-final { scan-tree-dump-times {(?n)update to\(present:v\.d\) to\(present:v\.c\) to\(present:v\.b\) to\(present:v\.a\)$} 2 "original" } } */
#pragma omp target update from(present, mapper(update): v)
/* { dg-final { scan-tree-dump-times {(?n)update from\(present:v\.d\) from\(present:v\.c\) from\(present:v\.b\) from\(present:v\.a\)$} 2 "original" } } */
#pragma omp target update to(present: v.a, v.b, v.c, v.d)
#pragma omp target update from(present: v.a, v.b, v.c, v.d)
return 0;
}