Files
clang-p2996/flang/test/Semantics/OpenMP/depend-substring.f90
Tom Eccles 4a47634a00 [flang][OpenMP] Support substrings and complex part refs for DEPEND (#143907)
Fixes #142404

The parser can't tell the difference between array indexing and a
substring: that has to be done in semantics once we have types.
Substrings can only be in the form string([lower]:[higher]) not
string(index) or string(lower:higher:step). I added semantic checks to
catch this for the DEPEND clause.

This patch also adds lowering for correct substrings and for complex
part references.
2025-06-13 14:16:58 +01:00

66 lines
2.0 KiB
Fortran

! RUN: %python %S/../test_errors.py %s %flang -fopenmp
! Test for parsing confusion between array indexing and string subscripts
! This is okay: selects the whole substring
subroutine substring_0(c)
character(:), pointer :: c
!PORTABILITY: The use of substrings in OpenMP argument lists has been disallowed since OpenMP 5.2.
!$omp task depend(out:c(:))
!$omp end task
end
! This is okay: selects from the second character onwards
subroutine substring_1(c)
character(:), pointer :: c
!PORTABILITY: The use of substrings in OpenMP argument lists has been disallowed since OpenMP 5.2.
!$omp task depend(out:c(2:))
!$omp end task
end
! This is okay: selects the first 2 characters
subroutine substring_2(c)
character(:), pointer :: c
!PORTABILITY: The use of substrings in OpenMP argument lists has been disallowed since OpenMP 5.2.
!$omp task depend(out:c(:2))
!$omp end task
end
! Error
subroutine substring_3(c)
character(:), pointer :: c
!PORTABILITY: The use of substrings in OpenMP argument lists has been disallowed since OpenMP 5.2.
!ERROR: Substrings must be in the form parent-string(lb:ub)
!$omp task depend(out:c(2))
!$omp end task
end
! This is okay: interpreted as indexing into the array not as a substring
subroutine substring_3b(c)
character(:), pointer :: c(:)
!$omp task depend(out:c(2))
!$omp end task
end
! This is okay: no indexing or substring at all
subroutine substring_4(c)
character(:), pointer :: c
!$omp task depend(out:c)
!$omp end task
end
! This is not okay: substrings can't have a stride
subroutine substring_5(c)
character(:), pointer :: c
!PORTABILITY: The use of substrings in OpenMP argument lists has been disallowed since OpenMP 5.2.
!ERROR: Cannot specify a step for a substring
!$omp task depend(out:c(1:20:5))
!$omp end task
end
! This is okay: interpreted as indexing the array
subroutine substring_5b(c)
character(:), pointer :: c(:)
!$omp task depend(out:c(1:20:5))
!$omp end task
end