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