xref: /openbsd-src/gnu/gcc/libgomp/testsuite/libgomp.c/nestedfn-5.c (revision 404b540a9034ac75a6199ad1a32d1bbc7a0d4210)
1*404b540aSrobert /* { dg-do run } */
2*404b540aSrobert /* { dg-options "-O2" } */
3*404b540aSrobert 
4*404b540aSrobert extern void abort (void);
5*404b540aSrobert 
6*404b540aSrobert void
foo(int * j)7*404b540aSrobert foo (int *j)
8*404b540aSrobert {
9*404b540aSrobert   int i = 5;
10*404b540aSrobert   int bar (void) { return i + 1; }
11*404b540aSrobert #pragma omp sections
12*404b540aSrobert   {
13*404b540aSrobert     #pragma omp section
14*404b540aSrobert       {
15*404b540aSrobert 	if (bar () != 6)
16*404b540aSrobert 	#pragma omp atomic
17*404b540aSrobert 	  ++*j;
18*404b540aSrobert       }
19*404b540aSrobert     #pragma omp section
20*404b540aSrobert       {
21*404b540aSrobert 	if (bar () != 6)
22*404b540aSrobert 	#pragma omp atomic
23*404b540aSrobert 	  ++*j;
24*404b540aSrobert       }
25*404b540aSrobert   }
26*404b540aSrobert }
27*404b540aSrobert 
28*404b540aSrobert int
main(void)29*404b540aSrobert main (void)
30*404b540aSrobert {
31*404b540aSrobert   int j = 0;
32*404b540aSrobert #pragma omp parallel num_threads (2)
33*404b540aSrobert   foo (&j);
34*404b540aSrobert   if (j)
35*404b540aSrobert     abort ();
36*404b540aSrobert   return 0;
37*404b540aSrobert }
38*404b540aSrobert 
39