1! { dg-do run }
2
3  use omp_lib
4  integer :: err, e
5
6!$omp atomic write
7  err = 0
8!$omp parallel shared(err) private(e)
9  if (omp_in_final ()) then
10!$omp atomic write
11    err = 1
12  endif
13!$omp task if (.false.) shared(err)
14  if (omp_in_final ()) then
15!$omp atomic write
16    err = 1
17  endif
18!$omp task if (.false.) shared(err)
19  if (omp_in_final ()) then
20!$omp atomic write
21    err = 1
22  endif
23!$omp end task
24!$omp end task
25!$omp atomic read
26  e = err
27!$omp task final (e .eq. 0) shared(err)
28  if (.not.omp_in_final ()) then
29!$omp atomic write
30    err = 1
31  endif
32!$omp taskyield
33!$omp taskwait
34!$omp task shared(err)
35  if (.not.omp_in_final ()) then
36!$omp atomic write
37    err = 1
38  endif
39!$omp end task
40!$omp end task
41!$omp end parallel
42!$omp atomic read
43  e = err
44  if (e .ne. 0) stop 1
45end
46