! { dg-do run } use omp_lib integer :: err, e !$omp atomic write err = 0 !$omp parallel shared(err) private(e) if (omp_in_final ()) then !$omp atomic write err = 1 endif !$omp task if (.false.) shared(err) if (omp_in_final ()) then !$omp atomic write err = 1 endif !$omp task if (.false.) shared(err) if (omp_in_final ()) then !$omp atomic write err = 1 endif !$omp end task !$omp end task !$omp atomic read e = err !$omp task final (e .eq. 0) shared(err) if (.not.omp_in_final ()) then !$omp atomic write err = 1 endif !$omp taskyield !$omp taskwait !$omp task shared(err) if (.not.omp_in_final ()) then !$omp atomic write err = 1 endif !$omp end task !$omp end task !$omp end parallel !$omp atomic read e = err if (e .ne. 0) call abort end