| ! RUN: %python %S/test_folding.py %s %flang_fc1 |
| ! Test folding of LBOUND and UBOUND |
| |
| module m |
| contains |
| function foo() |
| real :: foo(2:3,4:6) |
| end function |
| subroutine test(n1,a1,a2) |
| integer, intent(in) :: n1 |
| real, intent(in) :: a1(0:n1), a2(0:*) |
| type :: t |
| real :: a |
| end type |
| type(t) :: ta(0:2) |
| character(len=2) :: ca(-1:1) |
| integer, parameter :: lba1(*) = lbound(a1) |
| logical, parameter :: test_lba1 = all(lba1 == [0]) |
| integer, parameter :: lba2(*) = lbound(a2) |
| logical, parameter :: test_lba2 = all(lba2 == [0]) |
| integer, parameter :: lbtadim = lbound(ta,1) |
| logical, parameter :: test_lbtadim = lbtadim == 0 |
| integer, parameter :: ubtadim = ubound(ta,1) |
| logical, parameter :: test_ubtadim = ubtadim == 2 |
| integer, parameter :: lbta1(*) = lbound(ta) |
| logical, parameter :: test_lbta1 = all(lbta1 == [0]) |
| integer, parameter :: ubta1(*) = ubound(ta) |
| logical, parameter :: test_ubta1 = all(ubta1 == [2]) |
| integer, parameter :: lbta2(*) = lbound(ta(:)) |
| logical, parameter :: test_lbta2 = all(lbta2 == [1]) |
| integer, parameter :: ubta2(*) = ubound(ta(:)) |
| logical, parameter :: test_ubta2 = all(ubta2 == [3]) |
| integer, parameter :: lbta3(*) = lbound(ta%a) |
| logical, parameter :: test_lbta3 = all(lbta3 == [1]) |
| integer, parameter :: ubta3(*) = ubound(ta%a) |
| logical, parameter :: test_ubta3 = all(ubta3 == [3]) |
| integer, parameter :: lbca1(*) = lbound(ca) |
| logical, parameter :: test_lbca1 = all(lbca1 == [-1]) |
| integer, parameter :: ubca1(*) = ubound(ca) |
| logical, parameter :: test_ubca1 = all(ubca1 == [1]) |
| integer, parameter :: lbca2(*) = lbound(ca(:)(1:1)) |
| logical, parameter :: test_lbca2 = all(lbca2 == [1]) |
| integer, parameter :: ubca2(*) = ubound(ca(:)(1:1)) |
| logical, parameter :: test_ubca2 = all(ubca2 == [3]) |
| integer, parameter :: lbfoo(*) = lbound(foo()) |
| logical, parameter :: test_lbfoo = all(lbfoo == [1,1]) |
| integer, parameter :: ubfoo(*) = ubound(foo()) |
| logical, parameter :: test_ubfoo = all(ubfoo == [2,3]) |
| end subroutine |
| subroutine test2 |
| real :: a(2:3,4:6) |
| associate (b => a) |
| block |
| integer, parameter :: lbb(*) = lbound(b) |
| logical, parameter :: test_lbb = all(lbb == [2,4]) |
| integer, parameter :: ubb(*) = ubound(b) |
| logical, parameter :: test_ubb = all(ubb == [3,6]) |
| end block |
| end associate |
| associate (b => a + 0) |
| block |
| integer, parameter :: lbb(*) = lbound(b) |
| logical, parameter :: test_lbb = all(lbb == [1,1]) |
| integer, parameter :: ubb(*) = ubound(b) |
| logical, parameter :: test_ubb = all(ubb == [2,3]) |
| end block |
| end associate |
| end subroutine |
| end |