|  | ! { 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) stop 1 | 
|  | end |