xref: /openbsd-src/gnu/gcc/libgomp/testsuite/libgomp.c++/shared-2.C (revision 404b540a9034ac75a6199ad1a32d1bbc7a0d4210)
1*404b540aSrobert extern "C" void abort (void);
2*404b540aSrobert 
3*404b540aSrobert void
parallel(int a,int b)4*404b540aSrobert parallel (int a, int b)
5*404b540aSrobert {
6*404b540aSrobert   int bad, LASTPRIV, LASTPRIV_SEC;
7*404b540aSrobert   int i;
8*404b540aSrobert 
9*404b540aSrobert   a = b = 3;
10*404b540aSrobert 
11*404b540aSrobert   bad = 0;
12*404b540aSrobert 
13*404b540aSrobert   #pragma omp parallel firstprivate (a,b) shared (bad) num_threads (5)
14*404b540aSrobert     {
15*404b540aSrobert       if (a != 3 || b != 3)
16*404b540aSrobert 	bad = 1;
17*404b540aSrobert 
18*404b540aSrobert       #pragma omp for lastprivate (LASTPRIV)
19*404b540aSrobert       for (i = 0; i < 10; i++)
20*404b540aSrobert 	LASTPRIV = i;
21*404b540aSrobert 
22*404b540aSrobert       #pragma omp sections lastprivate (LASTPRIV_SEC)
23*404b540aSrobert 	{
24*404b540aSrobert 	  #pragma omp section
25*404b540aSrobert 	    { LASTPRIV_SEC = 3; }
26*404b540aSrobert 
27*404b540aSrobert 	  #pragma omp section
28*404b540aSrobert 	    { LASTPRIV_SEC = 42; }
29*404b540aSrobert 	}
30*404b540aSrobert 
31*404b540aSrobert     }
32*404b540aSrobert 
33*404b540aSrobert   if (LASTPRIV != 9)
34*404b540aSrobert     abort ();
35*404b540aSrobert 
36*404b540aSrobert   if (LASTPRIV_SEC != 42)
37*404b540aSrobert     abort ();
38*404b540aSrobert 
39*404b540aSrobert   if (bad)
40*404b540aSrobert     abort ();
41*404b540aSrobert }
42*404b540aSrobert 
main()43*404b540aSrobert int main()
44*404b540aSrobert {
45*404b540aSrobert   parallel (1, 2);
46*404b540aSrobert   return 0;
47*404b540aSrobert }
48