! { dg-additional-options "-fdump-tree-original" } subroutine foo implicit none integer :: i, a(5) !$omp do do i = 1, 5 end do !$omp end do nowait !$omp do simd do i = 1, 5 end do !$omp end do simd nowait !$omp scope !$omp end scope nowait !$omp sections !$omp section block; end block !$omp end sections nowait !$omp single !$omp end single nowait !$omp target !$omp end target nowait !$omp target parallel !$omp end target parallel nowait !$omp target parallel do do i = 1, 5 end do !$omp end target parallel do nowait !$omp target parallel do simd do i = 1, 5 end do !$omp end target parallel do simd nowait !$omp target parallel loop do i = 1, 5 end do !$omp end target parallel loop nowait !$omp target teams distribute parallel do do i = 1, 5 end do !$omp end target teams distribute parallel do nowait !$omp target teams distribute parallel do simd do i = 1, 5 end do !$omp end target teams distribute parallel do simd nowait !$omp target simd do i = 1, 5 end do !$omp end target simd nowait !$omp target teams !$omp end target teams nowait !$omp target teams distribute do i = 1, 5 end do !$omp end target teams distribute nowait !$omp target teams distribute simd do i = 1, 5 end do !$omp end target teams distribute simd nowait !$omp target teams loop do i = 1, 5 end do !$omp end target teams loop nowait !$omp workshare A(:) = 5 !$omp end workshare nowait end ! Note: internally, for '... parallel do ...', 'nowait' is always added ! such that for 'omp end target parallel do nowait', 'nowait' is on both ! 'target' as specified in the OpenMP spec and and on 'do' due to internal usage. ! Expected with 'nowait' ! { dg-final { scan-tree-dump-times "#pragma omp for nowait" 6 "original" } } ! { dg-final { scan-tree-dump-times "#pragma omp for schedule\\(static\\) nowait" 1 "original" } } ! { dg-final { scan-tree-dump-times "#pragma omp sections nowait" 1 "original" } } ! { dg-final { scan-tree-dump-times "#pragma omp single nowait" 1 "original" } } ! { dg-final { scan-tree-dump-times "#pragma omp target nowait" 12 "original" } } ! Never: ! { dg-final { scan-tree-dump-not "#pragma omp distribute\[^\n\r]*nowait" "original" } } ! { dg-final { scan-tree-dump-not "#pragma omp loop\[^\n\r]*nowait" "original" } } ! { dg-final { scan-tree-dump-not "#pragma omp parallel\[^\n\r]*nowait" "original" } } ! { dg-final { scan-tree-dump-not "#pragma omp section\[^s\]\[^\n\r]*nowait" "original" } } ! { dg-final { scan-tree-dump-not "#pragma omp simd\[^\n\r]*nowait" "original" } } ! { dg-final { scan-tree-dump-not "#pragma omp teams\[^\n\r]*nowait" "original" } } ! Sometimes or never with nowait: ! { dg-final { scan-tree-dump-times "#pragma omp distribute\[\n\r]" 4 "original" } } ! { dg-final { scan-tree-dump-times "#pragma omp loop\[\n\r]" 2 "original" } } ! { dg-final { scan-tree-dump-times "#pragma omp parallel\[\n\r]" 6 "original" } } ! { dg-final { scan-tree-dump-times "#pragma omp section\[\n\r]" 1 "original" } } ! { dg-final { scan-tree-dump-times "#pragma omp simd linear\\(i:1\\)\[\n\r]" 5 "original" } } ! { dg-final { scan-tree-dump-times "#pragma omp teams\[\n\r]" 6 "original" } } ! { dg-final { scan-tree-dump-times "#pragma omp target\[\n\r]" 0 "original" } } ! { dg-final { scan-tree-dump-times "#pragma omp for\[\n\r]" 0 "original" } }