1extern "C" void abort ();
2
3int a = 18;
4
5void
6f1 (int i, int j, int k)
7{
8  int l = 6, m = 7, n = 8;
9#pragma omp task private(j, m) shared(k, n)
10  {
11    j = 6;
12    m = 5;
13    if (++a != 19 || ++i != 9 || j != 6 || ++l != 7 || m != 5 || ++n != 9)
14      #pragma omp atomic
15	k++;
16  }
17#pragma omp taskwait
18  if (a != 19 || i != 8 || j != 26 || k != 0 || l != 6 || m != 7 || n != 9)
19    abort ();
20}
21
22int v1 = 1, v2 = 2, v5 = 5;
23int e;
24
25void
26f2 (void)
27{
28  int v3 = 3;
29#pragma omp sections private (v1) firstprivate (v2)
30  {
31  #pragma omp section
32    {
33      int v4 = 4;
34      v1 = 7;
35      #pragma omp task
36	{
37	  if (++v1 != 8 || ++v2 != 3 || ++v3 != 4 || ++v4 != 5 || ++v5 != 6)
38	    e = 1;
39	}
40      #pragma omp taskwait
41      if (v1 != 7 || v2 != 2 || v3 != 3 || v4 != 4 || v5 != 6)
42	abort ();
43      if (e)
44	abort ();
45    }
46  }
47}
48
49void
50f3 (int i, int j, int k)
51{
52  int l = 6, m = 7, n = 8;
53#pragma omp task private(j, m) shared(k, n) untied
54  {
55    j = 6;
56    m = 5;
57    if (++a != 19 || ++i != 9 || j != 6 || ++l != 7 || m != 5 || ++n != 9)
58      #pragma omp atomic
59	k++;
60  }
61#pragma omp taskwait
62  if (a != 19 || i != 8 || j != 26 || k != 0 || l != 6 || m != 7 || n != 9)
63    abort ();
64}
65
66int
67main ()
68{
69  f1 (8, 26, 0);
70  f2 ();
71  a = 18;
72  f3 (8, 26, 0);
73  a = 18;
74#pragma omp parallel num_threads(4)
75  {
76    #pragma omp master
77      {
78	f1 (8, 26, 0);
79	a = 18;
80	f3 (8, 26, 0);
81      }
82  }
83}
84