1 extern void abort (void); 2 3 void foo(int n)4foo (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()48main () 49 { 50 foo (9); 51 return 0; 52 } 53