1 extern "C" void abort ();
4 __attribute__((noinline, noclone)) void
5 foo (int &a, int (&b)[10], short &c, long (&d)[5], int n)
11 for (int i = 0; i < n + 1; i++)
13 #pragma omp target enter data map (to: z, c) map (alloc: b, t)
14 #pragma omp target update to (b, t)
15 #pragma omp target map (tofrom: a, d) map (from: b, c) map (alloc: t, z) map (from: err)
18 for (int i = 0; i < 10; i++)
20 err |= b[i] != 10 - i;
23 err |= z[i] != i + 27;
26 err |= d[i] != 12L + i;
35 #pragma omp target update from (z, c)
36 #pragma omp target exit data map (from: b, t) map (release: z, c)
37 if (a != 8 || c != 142 || t != 19)
42 for (int i = 0; i < 10; i++)
44 if (b[i] != i - 16) abort ();
47 if (z[i] != 2 * i + 9) abort ();
50 if (d[i] != i + 7) abort ();
53 #pragma omp target defaultmap(tofrom: scalar)
56 for (int i = 0; i < 10; i++)
61 err |= z[i] != 2 * i + 10;
64 err |= d[i] != 7L - i;
72 if (err || a != 30 || c != -2 || t != 155)
74 for (int i = 0; i < 10; i++)
76 if (b[i] != i + 5) abort ();
78 if (z[i] != 9 - 3 * i) abort ();
81 if (d[i] != i) abort ();
83 #pragma omp target data map (alloc: z)
85 #pragma omp target update to (z)
86 #pragma omp target map(from: err)
89 for (int i = 0; i < 6; i++)
90 if (z[i] != 10 - 3 * i) err = 1;
94 #pragma omp target update from (z)
96 for (int i = 0; i < 6; i++)
105 int b[10] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
107 long d[5] = { 12, 13, 14, 15, 16 };