! { dg-do run } ! Tests the fix for PR38907, in which any expressions, including unary plus, ! in front of the call to S_REAL_SUM_I (marked) would throw the mechanism ! for correcting invalid host association. ! ! Contributed by Dick Hendrickson ! module sa0054_stuff REAL :: S_REAL_SUM_2(10) = [(REAL (I), I = 1, 10)] contains ELEMENTAL FUNCTION S_REAL_SUM_I (A) REAL :: S_REAL_SUM_I REAL, INTENT(IN) :: A X = 1.0 S_REAL_SUM_I = X END FUNCTION S_REAL_SUM_I SUBROUTINE SA0054 (RDA) REAL RDA(:) RDA = + S_REAL_SUM_I (RDA) ! Reported problem => ICE RDA = RDA + S_REAL_SUM_2 (INT (RDA)) ! Also failed CONTAINS ELEMENTAL FUNCTION S_REAL_SUM_I (A) REAL :: S_REAL_SUM_I REAL, INTENT(IN) :: A S_REAL_SUM_I = 2.0 * A END FUNCTION S_REAL_SUM_I ELEMENTAL FUNCTION S_REAL_SUM_2 (A) REAL :: S_REAL_SUM_2 INTEGER, INTENT(IN) :: A S_REAL_SUM_2 = 2.0 * A END FUNCTION S_REAL_SUM_2 END SUBROUTINE end module sa0054_stuff use sa0054_stuff REAL :: RDA(10) = [(REAL(I), I = 1, 10)] call SA0054 (RDA) IF (ANY (INT (RDA) .ne. [(6 * I, I = 1, 10)])) print *, rda END ! { dg-final { cleanup-modules "sa0054_stuff" } }