| /* { dg-do compile } */ |
| /* { dg-additional-options "-fdump-tree-gimple" } */ |
| |
| struct S { |
| int x,y; |
| }; |
| |
| #pragma omp declare mapper(default : struct S var) map(mapper(default), tofrom: var) |
| #pragma omp declare mapper(only_x : struct S var) map(mapper(default), tofrom: var.x) |
| |
| void f(){ |
| struct S z = {1,2}; |
| #pragma omp target defaultmap(alloc) |
| z.x += 5; |
| #pragma omp target map(z) |
| z.x += 7; |
| #pragma omp target map(mapper(default), tofrom: z) |
| z.x += 8; |
| #pragma omp target map(mapper(only_x), tofrom: z) |
| z.x += 9; |
| if (z.x != 1+5+7+8+9) __builtin_abort (); |
| } |
| |
| /* { dg-final { scan-tree-dump-times "#pragma omp target num_teams\\(-2\\) thread_limit\\(0\\) defaultmap\\(alloc\\) map\\(tofrom:z \\\[len: 8\\\]\\)" 1 "gimple" } } */ |
| /* { dg-final { scan-tree-dump-times "#pragma omp target num_teams\\(-2\\) thread_limit\\(0\\) map\\(tofrom:z \\\[len: 8\\\]\\)" 2 "gimple" } } */ |
| /* { dg-final { scan-tree-dump-times "#pragma omp target num_teams\\(-2\\) thread_limit\\(0\\) map\\(struct:z \\\[len: 1\\\]\\) map\\(tofrom:z.x \\\[len: 4\\\]\\)" 1 "gimple" } } */ |
| |
| int main() { |
| f(); |
| } |