1! { dg-do run } 2! Testcase for PR 31203 3! We used to create strings with negative length 4subroutine foo(i) 5 integer :: i 6 character(len=i) :: s(2) 7 if (len(s) < 0) call abort 8 if (len(s) /= max(i,0)) call abort 9end 10 11function gee(i) 12 integer, intent(in) :: i 13 character(len=i) :: gee 14 15 gee = "" 16end function gee 17 18subroutine s1(i,j) 19 character(len=i-j) :: a 20 if (len(a) < 0) call abort() 21end subroutine 22 23program test 24 interface 25 function gee(i) 26 integer, intent(in) :: i 27 character(len=i) :: gee 28 end function gee 29 end interface 30 31 call foo(2) 32 call foo(-1) 33 call s1(1,2) 34 call s1(-1,-8) 35 call s1(-8,-1) 36 37 if (len(gee(2)) /= 2) call abort 38 if (len(gee(-5)) /= 0) call abort 39 if (len(gee(intfunc(3))) /= max(intfunc(3),0)) call abort 40 if (len(gee(intfunc(2))) /= max(intfunc(2),0)) call abort 41 42 if (len(bar(2)) /= 2) call abort 43 if (len(bar(-5)) /= 0) call abort 44 if (len(bar(intfunc(3))) /= max(intfunc(3),0)) call abort 45 if (len(bar(intfunc(2))) /= max(intfunc(2),0)) call abort 46 47 if (cow(bar(2)) /= 2) call abort 48 if (cow(bar(-5)) /= 0) call abort 49 if (cow(bar(intfunc(3))) /= max(intfunc(3),0)) call abort 50 if (cow(bar(intfunc(2))) /= max(intfunc(2),0)) call abort 51 52contains 53 54 function bar(i) 55 integer, intent(in) :: i 56 character(len=i) :: bar 57 58 bar = "" 59 end function bar 60 61 function cow(c) 62 character(len=*), intent(in) :: c 63 integer :: cow 64 cow = len(c) 65 end function cow 66 67 pure function intfunc(i) 68 integer, intent(in) :: i 69 integer :: intfunc 70 71 intfunc = 2*i-5 72 end function intfunc 73 74end program test 75