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