1! Related to PR 15326. Try calling string functions whose lengths depend 2! on the lengths of other strings. 3! { dg-do run } 4pure function double (string) 5 character (len = *), intent (in) :: string 6 character (len = len (string) * 2) :: double 7 double = string // string 8end function double 9 10function f1 (string) 11 character (len = *) :: string 12 character (len = len (string)) :: f1 13 f1 = '' 14end function f1 15 16function f2 (string1, string2) 17 character (len = *) :: string1 18 character (len = len (string1) - 20) :: string2 19 character (len = len (string1) + len (string2) / 2) :: f2 20 f2 = '' 21end function f2 22 23program main 24 implicit none 25 26 interface 27 pure function double (string) 28 character (len = *), intent (in) :: string 29 character (len = len (string) * 2) :: double 30 end function double 31 function f1 (string) 32 character (len = *) :: string 33 character (len = len (string)) :: f1 34 end function f1 35 function f2 (string1, string2) 36 character (len = *) :: string1 37 character (len = len (string1) - 20) :: string2 38 character (len = len (string1) + len (string2) / 2) :: f2 39 end function f2 40 end interface 41 42 integer :: a 43 character (len = 80) :: text 44 character (len = 70), target :: textt 45 character (len = 70), pointer :: textp 46 47 a = 42 48 textp => textt 49 50 call test (f1 (text), 80) 51 call test (f2 (text, text), 110) 52 call test (f3 (text), 115) 53 call test (f4 (text), 192) 54 call test (f5 (text), 160) 55 call test (f6 (text), 39) 56 57 call test (f1 (textp), 70) 58 call test (f2 (textp, text), 95) 59 call test (f3 (textp), 105) 60 call test (f4 (textp), 192) 61 call test (f5 (textp), 140) 62 call test (f6 (textp), 29) 63 64 call indirect (textp) 65contains 66 function f3 (string) 67 integer, parameter :: l1 = 30 68 character (len = *) :: string 69 character (len = len (string) + l1 + 5) :: f3 70 f3 = '' 71 end function f3 72 73 function f4 (string) 74 character (len = len (text) - 10) :: string 75 character (len = len (string) + len (text) + a) :: f4 76 f4 = '' 77 end function f4 78 79 function f5 (string) 80 character (len = *) :: string 81 character (len = len (double (string))) :: f5 82 f5 = '' 83 end function f5 84 85 function f6 (string) 86 character (len = *) :: string 87 character (len = len (string (a:))) :: f6 88 f6 = '' 89 end function f6 90 91 subroutine indirect (text2) 92 character (len = *) :: text2 93 94 call test (f1 (text), 80) 95 call test (f2 (text, text), 110) 96 call test (f3 (text), 115) 97 call test (f4 (text), 192) 98 call test (f5 (text), 160) 99 call test (f6 (text), 39) 100 101 call test (f1 (text2), 70) 102 call test (f2 (text2, text2), 95) 103 call test (f3 (text2), 105) 104 call test (f4 (text2), 192) 105 call test (f5 (text2), 140) 106 call test (f6 (text2), 29) 107 end subroutine indirect 108 109 subroutine test (string, length) 110 character (len = *) :: string 111 integer, intent (in) :: length 112 if (len (string) .ne. length) call abort 113 end subroutine test 114end program main 115