! Related to PR 15326. Try calling string functions whose lengths depend ! on the lengths of other strings. ! { dg-do run } pure function double (string) character (len = *), intent (in) :: string character (len = len (string) * 2) :: double double = string // string end function double function f1 (string) character (len = *) :: string character (len = len (string)) :: f1 f1 = '' end function f1 function f2 (string1, string2) character (len = *) :: string1 character (len = len (string1) - 20) :: string2 character (len = len (string1) + len (string2) / 2) :: f2 f2 = '' end function f2 program main implicit none interface pure function double (string) character (len = *), intent (in) :: string character (len = len (string) * 2) :: double end function double function f1 (string) character (len = *) :: string character (len = len (string)) :: f1 end function f1 function f2 (string1, string2) character (len = *) :: string1 character (len = len (string1) - 20) :: string2 character (len = len (string1) + len (string2) / 2) :: f2 end function f2 end interface integer :: a character (len = 80) :: text character (len = 70), target :: textt character (len = 70), pointer :: textp a = 42 textp => textt call test (f1 (text), 80) call test (f2 (text, text), 110) call test (f3 (text), 115) call test (f4 (text), 192) call test (f5 (text), 160) call test (f6 (text), 39) call test (f1 (textp), 70) call test (f2 (textp, text), 95) call test (f3 (textp), 105) call test (f4 (textp), 192) call test (f5 (textp), 140) call test (f6 (textp), 29) call indirect (textp) contains function f3 (string) integer, parameter :: l1 = 30 character (len = *) :: string character (len = len (string) + l1 + 5) :: f3 f3 = '' end function f3 function f4 (string) character (len = len (text) - 10) :: string character (len = len (string) + len (text) + a) :: f4 f4 = '' end function f4 function f5 (string) character (len = *) :: string character (len = len (double (string))) :: f5 f5 = '' end function f5 function f6 (string) character (len = *) :: string character (len = len (string (a:))) :: f6 f6 = '' end function f6 subroutine indirect (text2) character (len = *) :: text2 call test (f1 (text), 80) call test (f2 (text, text), 110) call test (f3 (text), 115) call test (f4 (text), 192) call test (f5 (text), 160) call test (f6 (text), 39) call test (f1 (text2), 70) call test (f2 (text2, text2), 95) call test (f3 (text2), 105) call test (f4 (text2), 192) call test (f5 (text2), 140) call test (f6 (text2), 29) end subroutine indirect subroutine test (string, length) character (len = *) :: string integer, intent (in) :: length if (len (string) .ne. length) call abort end subroutine test end program main