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