1! Related to PR 15326.  Try calling string functions whose lengths involve
2! some sort of array calculation.
3! { dg-do run }
4pure elemental function double (x)
5  integer, intent (in) :: x
6  integer :: double
7  double = x * 2
8end function double
9
10program main
11  implicit none
12
13  interface
14    pure elemental function double (x)
15      integer, intent (in) :: x
16      integer :: double
17    end function double
18  end interface
19
20  integer, dimension (100:104), target :: a
21  integer, dimension (:), pointer :: ap
22  integer :: i, lower
23
24  a = (/ (i + 5, i = 0, 4) /)
25  ap => a
26  lower = 11
27
28  call test (f1 (a), 35)
29  call test (f1 (ap), 35)
30  call test (f1 ((/ 5, 10, 50 /)), 65)
31  call test (f1 (a (101:103)), 21)
32
33  call test (f2 (a), 115)
34  call test (f2 (ap), 115)
35  call test (f2 ((/ 5, 10, 50 /)), 119)
36  call test (f2 (a (101:103)), 116)
37
38  call test (f3 (a), 60)
39  call test (f3 (ap), 60)
40  call test (f3 ((/ 5, 10, 50 /)), 120)
41  call test (f3 (a (101:103)), 30)
42
43  call test (f4 (a, 13, 1), 21)
44  call test (f4 (ap, 13, 2), 14)
45  call test (f4 ((/ 5, 10, 50 /), 12, 1), 60)
46  call test (f4 (a (101:103), 12, 1), 15)
47contains
48  function f1 (array)
49    integer, dimension (10:) :: array
50    character (len = sum (array)) :: f1
51    f1 = ''
52  end function f1
53
54  function f2 (array)
55    integer, dimension (10:) :: array
56    character (len = array (11) + a (104) + 100) :: f2
57    f2 = ''
58  end function f2
59
60  function f3 (array)
61    integer, dimension (:) :: array
62    character (len = sum (double (array (2:)))) :: f3
63    f3 = ''
64  end function f3
65
66  function f4 (array, upper, stride)
67    integer, dimension (10:) :: array
68    integer :: upper, stride
69    character (len = sum (array (lower:upper:stride))) :: f4
70    f4 = ''
71  end function f4
72
73  subroutine test (string, length)
74    character (len = *) :: string
75    integer, intent (in) :: length
76    if (len (string) .ne. length) call abort
77  end subroutine test
78end program main
79