Peter Steinfeld dd3eb3f332 [flang] Substrings with lower bound greater than upper bound
According to section 9.4.1, paragraph 3,
 If the starting point is greater than the ending point, the substring has
 length zero

But the compilers code for substring processing was failing a call to `CHECK()`
in this case.  I fixed this by just setting the number of items in the
resulting string to 0 for this situation.

Differential Revision: https://reviews.llvm.org/D87799
2020-09-16 14:56:23 -07:00

53 lines
876 B
Fortran

! RUN: %S/test_errors.sh %s %t %f18
! Test section subscript
program p1
real :: a(10,10)
real :: b(5,5)
real :: c
integer :: n
n = 2
b = a(1:10:n,1:n+3)
end
! Test substring
program p2
type t1(n1,n2)
integer,kind :: n1,n2
integer :: c2(iachar('ABCDEFGHIJ'(n1:n1)))
end type
character :: a(10)
character :: b(5)
character :: c(0)
integer :: n
n = 3
b = a(n:7)
b = a(n+3:)
b = a(:n+2)
a(n:7) = b
a(n+3:) = b
a(:n+2) = b
n = iachar(1_'ABCDEFGHIJ'(1:1))
c = 'ABCDEFGHIJ'(1:0)
end
! Test pointer assignment with bounds
program p3
integer, pointer :: a(:,:)
integer, target :: b(2,2)
integer :: n
n = 2
a(n:,n:) => b
a(1:n,1:n) => b
end
! Test pointer assignment to array element
program p4
type :: t
real, pointer :: a
end type
type(t) :: x(10)
integer :: i
real, target :: y
x(i)%a => y
end program