1! { dg-do run }
2!
3! Tests the fix for PR64952.
4!
5! Original report by Nick Maclaren  <nmm1@cam.ac.uk> on clf
6! https://groups.google.com/forum/#!topic/comp.lang.fortran/TvVY5j3GPmg
7! See elemental_dependency_4.f90
8!
9! This test contributed by Mikael Morin  <mikael.morin@sfr.fr>
10!
11MODULE M
12    INTEGER, PRIVATE :: i
13
14    TYPE, ABSTRACT :: t
15      REAL :: f
16    CONTAINS
17      PROCEDURE(Fred_ifc), DEFERRED, PASS :: tbp
18    END TYPE t
19    TYPE, EXTENDS(t) :: t2
20    CONTAINS
21      PROCEDURE :: tbp => Fred
22    END TYPE t2
23
24    TYPE(t2) :: array(5) = (/ (t2(i+0.0), i = 1,5) /)
25
26    INTERFACE
27        ELEMENTAL FUNCTION Fred_ifc (x, n)
28            IMPORT
29            REAL :: Fred
30            CLASS(T), INTENT(IN) :: x
31            INTEGER, INTENT(IN) :: n
32        END FUNCTION Fred_ifc
33    END INTERFACE
34
35CONTAINS
36    ELEMENTAL FUNCTION Fred (x, n)
37        REAL :: Fred
38        CLASS(T2), INTENT(IN) :: x
39        INTEGER, INTENT(IN) :: n
40        Fred = x%f+SUM(array(:n-1)%f)+SUM(array(n+1:)%f)
41     END FUNCTION Fred
42END MODULE M
43
44PROGRAM Main
45    USE M
46    INTEGER :: i, index(5) = (/ (i, i = 1,5) /)
47
48    array%f = array%tbp(index)
49    if (any (array%f .ne. array(1)%f)) call abort
50
51    array%f = index
52    call Jack(array)
53  CONTAINS
54    SUBROUTINE Jack(dummy)
55        CLASS(t) :: dummy(:)
56        dummy%f = dummy%tbp(index)
57        !print *, dummy%f
58        if (any (dummy%f .ne. 15.0)) call abort
59    END SUBROUTINE
60END PROGRAM Main
61
62