! Testing the Semantics of nested Loop Transformation Constructs !RUN: %python %S/../test_errors.py %s %flang -fopenmp -fopenmp-version=51 subroutine loop_transformation_construct1 implicit none !$omp do !ERROR: A DO loop must follow the UNROLL directive !$omp unroll end subroutine subroutine loop_transformation_construct2 implicit none integer :: i = 5 integer :: x integer :: v(i) !$omp do !$omp tile do x = 1, i v(x) = v(x) * 2 end do !$omp end tile !$omp end do !ERROR: The END TILE directive must follow the DO loop associated with the loop construct !$omp end tile end subroutine subroutine loop_transformation_construct2 implicit none integer :: i = 5 integer :: x integer :: v(i) !$omp do !ERROR: Only Loop Transformation Constructs or Loop Nests can be nested within Loop Constructs !$omp parallel do do x = 1, i v(x) = v(x) * 2 end do end subroutine subroutine loop_transformation_construct3 implicit none integer :: i = 5 integer :: x integer :: v(i) !$omp do do x = 1, i v(x) = v(x) * 2 end do !ERROR: A DO loop must follow the TILE directive !$omp tile end subroutine subroutine loop_transformation_construct4 implicit none integer :: i = 5 integer :: x integer :: v(i) !$omp do !ERROR: If a loop construct has been fully unrolled, it cannot then be further transformed !$omp tile !$omp unroll full do x = 1, i v(x) = v(x) * 2 end do end subroutine subroutine loop_transformation_construct5 implicit none integer :: i = 5 integer :: x integer :: v(i) !$omp do !ERROR: If a loop construct has been fully unrolled, it cannot then be further transformed !$omp tile !$omp unroll do x = 1, i v(x) = v(x) * 2 end do end subroutine subroutine loop_transformation_construct6 implicit none integer :: i = 5 integer :: x integer :: v(i) !$omp do !$omp tile !$omp unroll partial(2) do x = 1, i v(x) = v(x) * 2 end do end subroutine