xfail scan-tree-dump-not throw in g++.dg/pr99966.C on hppa*64*-*-*
[official-gcc.git] / libgomp / testsuite / libgomp.c-c++-common / ptr-attach-1.c
blobe7deec6e006bc97fd36699524c39df239ed51d81
1 #include <stdlib.h>
3 struct S
5 int a, b;
6 int *ptr;
7 int c, d;
8 };
9 typedef struct S S;
11 #pragma omp declare target
12 int *gp;
13 #pragma omp end declare target
15 #define N 10
16 int main (void)
18 /* Test to see if pointer attachment works, for scalar pointers,
19 and pointer fields in structures. */
21 int *ptr = (int *) malloc (sizeof (int) * N);
22 int *orig_ptr = ptr;
24 #pragma omp target map (ptr, ptr[:N])
26 for (int i = 0; i < N; i++)
27 ptr[i] = N - i;
30 if (ptr != orig_ptr)
31 abort ();
33 for (int i = 0; i < N; i++)
34 if (ptr[i] != N - i)
35 abort ();
37 S s = { 0 };
38 s.ptr = ptr;
39 #pragma omp target map (s, s.ptr[:N])
41 for (int i = 0; i < N; i++)
42 s.ptr[i] = i;
44 s.a = 1;
45 s.b = 2;
48 if (s.ptr != ptr)
49 abort ();
51 for (int i = 0; i < N; i++)
52 if (s.ptr[i] != i)
53 abort ();
55 if (s.a != 1 || s.b != 2 || s.c != 0 || s.d != 0)
56 abort ();
58 gp = (int *) malloc (sizeof (int) * N);
59 orig_ptr = gp;
61 for (int i = 0; i < N; i++)
62 gp[i] = i - 1;
64 #pragma omp target map (gp[:N])
66 for (int i = 0; i < N; i++)
67 gp[i] += 1;
70 if (gp != orig_ptr)
71 abort ();
73 for (int i = 0; i < N; i++)
74 if (gp[i] != i)
75 abort ();
77 free (ptr);
78 free (gp);
80 return 0;