Fix xfail for 32-bit hppa*-*-* in gcc.dg/pr84877.c
[official-gcc.git] / libgomp / testsuite / libgomp.c++ / depobj-1.C
blob91edf8cc34b11209a1637b77b4fe6454d3503308
1 #include <stdlib.h>
2 #include <omp.h>
4 void
5 dep (omp_depend_t &d1, omp_depend_t *d2)
7   int x = 1;
8   #pragma omp depobj (d1) depend(in: x)
9   #pragma omp depobj (*d2) depend(in: x)
11   #pragma omp depobj (d2[0]) update(out)
12   #pragma omp parallel
13   #pragma omp single
14   {
15     #pragma omp task shared (x) depend(depobj:*d2)
16     x = 2;
17     #pragma omp task shared (x) depend(depobj : d1)
18     if (x != 2)
19       abort ();
20   }
21   #pragma omp depobj (d2[0]) destroy
22   #pragma omp depobj (d1) destroy
25 template <typename T>
26 void
27 dep2 (T &d2)
29   T d1;
30   #pragma omp parallel
31   #pragma omp single
32   {
33     int x = 1;
34     #pragma omp depobj (d1) depend(out: x)
35     #pragma omp depobj (*&d2) depend (in:x)
36     #pragma omp depobj(d2)update(in)
37     #pragma omp task shared (x) depend(depobj :d1)
38     x = 2;
39     #pragma omp task shared (x) depend(depobj: d2)
40     if (x != 2)
41       abort ();
42     #pragma omp taskwait
43     #pragma omp depobj(d1)destroy
44     #pragma omp depobj((&d2)[0]) destroy
45   }
48 template <typename T>
49 void
50 dep3 (void)
52   T d[2];
53   #pragma omp parallel
54   {
55     int x = 1;
56     #pragma omp single
57     {
58       #pragma omp depobj(d[0]) depend(out:x)
59       #pragma omp depobj(d[1]) depend(in: x)
60       #pragma omp task shared (x) depend(depobj:*d)
61       x = 2;
62       #pragma omp task shared (x) depend(depobj:*(d + 1))
63       if (x != 2)
64         abort ();
65     }
66   }
67   #pragma omp depobj(d[0]) destroy
68   #pragma omp depobj(d[1]) destroy
71 int xx;
72 omp_depend_t dd1, dd2;
74 template <int N>
75 void
76 antidep (void)
78   xx = 1;
79   #pragma omp parallel
80   #pragma omp single
81   {
82     #pragma omp task shared(xx) depend(depobj:dd2)
83     if (xx != 1)
84       abort ();
85     #pragma omp task shared(xx) depend(depobj:dd1)
86     xx = 2;
87   }
90 int
91 main ()
93   omp_depend_t d1, d2, d3;
94   dep (d1, &d2);
95   dep2 <omp_depend_t> (d3);
96   dep3 <omp_depend_t> ();
97   #pragma omp depobj (dd1) depend (inout: xx)
98   #pragma omp depobj (dd2) depend (in : xx)
99   antidep <0> ();
100   #pragma omp depobj (dd2) destroy
101   #pragma omp depobj (dd1) destroy
102   return 0;