Fix xfail for 32-bit hppa*-*-* in gcc.dg/pr84877.c
[official-gcc.git] / libgomp / testsuite / libgomp.c++ / pr93931.C
blob4d4232ef3405b419aff4a260971e45b9e727c2dd
1 // PR c++/93931
2 // { dg-do run }
3 // { dg-options "-O2 -std=c++14" }
5 extern "C" void abort ();
7 void
8 sink (int &x)
10   int *volatile p;
11   p = &x;
12   (*p)++;
15 int
16 foo ()
18   int r = 0;
19   [&r] () {
20 #pragma omp parallel for reduction(+ : r)
21     for (int i = 0; i < 1024; ++i)
22       r += i;
23   } ();
24   return r;
27 int
28 bar ()
30   int l = 0;
31   [&l] () {
32 #pragma omp parallel for lastprivate (l)
33     for (int i = 0; i < 1024; ++i)
34       l = i;
35   } ();
36   return l;
39 void
40 baz ()
42   int f = 18;
43   [&f] () {
44 #pragma omp parallel for firstprivate (f)
45     for (int i = 0; i < 1024; ++i)
46       {
47         sink (f);
48         f += 3;
49         sink (f);
50         if (f != 23)
51           abort ();
52         sink (f);
53         f -= 7;
54         sink (f);
55       }
56   } ();
57   if (f != 18)
58     abort ();
61 int
62 qux ()
64   int r = 0;
65   [&] () {
66 #pragma omp parallel for reduction(+ : r)
67     for (int i = 0; i < 1024; ++i)
68       r += i;
69   } ();
70   return r;
73 int
74 corge ()
76   int l = 0;
77   [&] () {
78 #pragma omp parallel for lastprivate (l)
79     for (int i = 0; i < 1024; ++i)
80       l = i;
81   } ();
82   return l;
85 void
86 garply ()
88   int f = 18;
89   [&] () {
90 #pragma omp parallel for firstprivate (f)
91     for (int i = 0; i < 1024; ++i)
92       {
93         sink (f);
94         f += 3;
95         sink (f);
96         if (f != 23)
97           abort ();
98         sink (f);
99         f -= 7;
100         sink (f);
101       }
102   } ();
103   if (f != 18)
104     abort ();
108 main ()
110   if (foo () != 1024 * 1023 / 2)
111     abort ();
112   if (bar () != 1023)
113     abort ();
114   baz ();
115   if (qux () != 1024 * 1023 / 2)
116     abort ();
117   if (corge () != 1023)
118     abort ();
119   garply ();