1#include <stdio.h>
2#include <omp.h>
3
4extern void abort (void);
5
6void
7parallel (int a, int b)
8{
9  int bad, LASTPRIV, LASTPRIV_SEC;
10  int i;
11
12  a = b = 3;
13
14  bad = 0;
15
16  #pragma omp parallel firstprivate (a,b) shared (bad) num_threads (5)
17    {
18      if (a != 3 || b != 3)
19	bad = 1;
20
21      #pragma omp for lastprivate (LASTPRIV)
22      for (i = 0; i < 10; i++)
23	LASTPRIV = i;
24
25      #pragma omp sections lastprivate (LASTPRIV_SEC)
26	{
27	  #pragma omp section
28	    { LASTPRIV_SEC = 3; }
29
30	  #pragma omp section
31	    { LASTPRIV_SEC = 42; }
32	}
33
34    }
35
36  if (LASTPRIV != 9)
37    abort ();
38
39  if (LASTPRIV_SEC != 42)
40    abort ();
41
42  if (bad)
43    abort ();
44}
45
46int main()
47{
48  parallel (1, 2);
49  return 0;
50}
51