1! Related to PR 15326.  Try calling string functions whose lengths depend
2! on a dummy procedure.
3! { dg-do run }
4integer pure function double (x)
5  integer, intent (in) :: x
6  double = x * 2
7end function double
8
9program main
10  implicit none
11
12  interface
13    integer pure function double (x)
14      integer, intent (in) :: x
15    end function double
16  end interface
17
18  call test (f1 (double, 100), 200)
19
20  call indirect (double)
21contains
22  function f1 (fn, i)
23    integer :: i
24    interface
25      integer pure function fn (x)
26        integer, intent (in) :: x
27      end function fn
28    end interface
29    character (len = fn (i)) :: f1
30    f1 = ''
31  end function f1
32
33  subroutine indirect (fn)
34    interface
35      integer pure function fn (x)
36        integer, intent (in) :: x
37      end function fn
38    end interface
39    call test (f1 (fn, 100), 200)
40  end subroutine indirect
41
42  subroutine test (string, length)
43    character (len = *) :: string
44    integer, intent (in) :: length
45    if (len (string) .ne. length) STOP 1
46  end subroutine test
47end program main
48