1 extern void abort (void);
2 
3 void
foo(int n)4 foo (int n)
5 {
6   int a[4] = { 0, 1, 2, 3 }, b[n];
7   int *p = a + 1, i, err;
8   for (i = 0; i < n; i++)
9     b[i] = 9 + i;
10   #pragma omp target data map(to:a)
11   #pragma omp target data use_device_ptr(p) map(from:err)
12   #pragma omp target is_device_ptr(p) private(i) map(from:err)
13   {
14     err = 0;
15     for (i = 0; i < 4; i++)
16       if (p[i - 1] != i)
17 	err = 1;
18   }
19   if (err)
20     abort ();
21   for (i = 0; i < 4; i++)
22     a[i] = 23 + i;
23   #pragma omp target data map(to:a)
24   #pragma omp target data use_device_ptr(a) map(from:err)
25   #pragma omp target is_device_ptr(a) private(i) map(from:err)
26   {
27     err = 0;
28     for (i = 0; i < 4; i++)
29       if (a[i] != 23 + i)
30 	err = 1;
31   }
32   if (err)
33     abort ();
34   #pragma omp target data map(to:b)
35   #pragma omp target data use_device_ptr(b) map(from:err)
36   #pragma omp target is_device_ptr(b) private(i) map(from:err)
37   {
38     err = 0;
39     for (i = 0; i < 4; i++)
40       if (b[i] != 9 + i)
41 	err = 1;
42   }
43   if (err)
44     abort ();
45 }
46 
47 int
main()48 main ()
49 {
50   foo (9);
51   return 0;
52 }
53