subroutine f() !$omp parallel block end block !$omp parallel block inner: block block end block end block inner end block end subroutine f2() !$omp parallel my_name : block end block my_name !$omp parallel another_block : block inner: block block end block end block inner end block another_block end subroutine f3() !$omp parallel my_name : block end block my_name2 ! { dg-error "Expected label 'my_name' for END BLOCK statement" } end block my_name ! avoid follow up errors end subroutine subroutine f4 integer :: n n = 5 !$omp parallel my: block integer :: A(n) A(1) = 1 end block my end subroutine f4a intrinsic :: sin !$omp parallel block procedure(), pointer :: proc procedure(sin) :: my_sin proc => sin end block end subroutine subroutine f5(x) !$omp parallel block intent(in) :: x ! { dg-error "INTENT is not allowed inside of BLOCK" } optional :: x ! { dg-error "OPTIONAL is not allowed inside of BLOCK" } value :: x ! { dg-error "VALUE is not allowed inside of BLOCK" } end block end subroutine f6() !$omp parallel myblock: block cycle myblock ! { dg-error "CYCLE statement at .1. is not applicable to non-loop construct 'myblock'" } end block myblock !$omp parallel myblock2: block exit myblock2 ! OK. ! jumps to the end of the block but stays in the structured block end block myblock2 !$omp end parallel end