fortran: Factor the evaluation of MINLOC/MAXLOC's BACK argument
[official-gcc.git] / libgomp / testsuite / libgomp.c / target-37.c
blobb3cc6a25215119ef0be518b08c8a1d29a2dd83f5
1 extern void abort (void);
2 struct S { int e, f; };
4 void
5 foo (int n)
7 int a[4] = { 0, 1, 2, 3 }, b[n], c = 4;
8 struct S d = { 5, 6 };
9 int *p = a + 1, i, err;
10 for (i = 0; i < n; i++)
11 b[i] = 9 + i;
12 #pragma omp target data use_device_ptr(p) map(from:err) map(to:a)
13 #pragma omp target is_device_ptr(p) private(i) map(from:err)
15 err = 0;
16 for (i = 0; i < 4; i++)
17 if (p[i - 1] != i)
18 err = 1;
20 if (err)
21 abort ();
22 for (i = 0; i < 4; i++)
23 a[i] = 23 + i;
24 #pragma omp target data map(to:a) use_device_addr(a) map(from:err)
25 #pragma omp target is_device_ptr(a) private(i) map(from:err)
27 err = 0;
28 for (i = 0; i < 4; i++)
29 if (a[i] != 23 + i)
30 err = 1;
32 if (err)
33 abort ();
34 #pragma omp target data use_device_addr(b) map(from:err) map(to:b)
35 #pragma omp target is_device_ptr(b) private(i) map(from:err)
37 err = 0;
38 for (i = 0; i < 4; i++)
39 if (b[i] != 9 + i)
40 err = 1;
42 if (err)
43 abort ();
44 #pragma omp target data map(to:c) use_device_addr(c) map(from:err)
46 int *q = &c;
47 #pragma omp target is_device_ptr(q) map(from:err)
49 err = *q != 4;
52 if (err)
53 abort ();
54 #pragma omp target data use_device_addr(d) map(to:d) map(from:err)
56 struct S *r = &d;
57 #pragma omp target is_device_ptr(r) map(from:err)
59 err = r->e != 5 || r->f != 6;
62 if (err)
63 abort ();
66 int
67 main ()
69 foo (9);
70 return 0;