Issue error if a DO construct associated with a loop does not have loop control. Currently, it is issued only for the loop immediately following the loop construct. This patch extends it to cases like collapse where there is more than one loop associated. It also fixes a crash since the existing code always expects loop control. This is covered in OpenMP 4.5 standard, Section 2.7.1. "The do-loop cannot be a DO WHILE or a DO loop without loop control." OpenACC 3.3 covers this indirectly in Section 2.9.1. The trip count for all loops associated with the collapse clause must be computable and invariant in all the loops". Reviewed By: clementval Differential Revision: https://reviews.llvm.org/D144290
34 lines
870 B
Fortran
34 lines
870 B
Fortran
!RUN: %python %S/../test_errors.py %s %flang -fopenmp
|
|
! OpenMP Version 4.5
|
|
! 2.7.1 Collapse Clause
|
|
program omp_doCollapse
|
|
integer:: i,j
|
|
!ERROR: The value of the parameter in the COLLAPSE or ORDERED clause must not be larger than the number of nested loops following the construct.
|
|
!$omp do collapse(3)
|
|
do i = 1,10
|
|
do j = 1, 10
|
|
print *, "hello"
|
|
end do
|
|
end do
|
|
!$omp end do
|
|
|
|
do i = 1,10
|
|
do j = 1, 10
|
|
!ERROR: The value of the parameter in the COLLAPSE or ORDERED clause must not be larger than the number of nested loops following the construct.
|
|
!$omp do collapse(2)
|
|
do k = 1, 10
|
|
print *, "hello"
|
|
end do
|
|
!$omp end do
|
|
end do
|
|
end do
|
|
|
|
!$omp parallel do collapse(2)
|
|
do i = 1, 3
|
|
!ERROR: Loop control is not present in the DO LOOP
|
|
do
|
|
end do
|
|
end do
|
|
end program omp_doCollapse
|
|
|