| ! { dg-do run } |
| ! |
| ! PR fortran/51218 |
| ! |
| ! Contributed by Harald Anlauf |
| ! |
| |
| module a |
| implicit none |
| integer :: neval = 0 |
| contains |
| subroutine inc_eval |
| neval = neval + 1 |
| end subroutine inc_eval |
| end module a |
| |
| module b |
| use a |
| implicit none |
| contains |
| function f(x) ! Should be implicit pure |
| real :: f |
| real, intent(in) :: x |
| f = x |
| end function f |
| |
| function g(x) ! Should NOT be implicit pure |
| real :: g |
| real, intent(in) :: x |
| call inc_eval |
| g = x |
| end function g |
| end module b |
| |
| program gfcbug114a |
| use a |
| use b |
| implicit none |
| real :: x = 1, y = 1, t, u, v, w |
| if (neval /= 0) STOP 1 |
| t = f(x)*f(y) |
| if (neval /= 0) STOP 2 |
| u = f(x)*f(y) + f(x)*f(y) |
| if (neval /= 0) STOP 3 |
| v = g(x)*g(y) |
| if (neval /= 2) STOP 4 |
| w = g(x)*g(y) + g(x)*g(y) |
| if (neval /= 6) STOP 5 |
| if (t /= 1.0 .or. u /= 2.0 .or. v /= 1.0 .or. w /= 2) STOP 6 |
| end program gfcbug114a |
| |
| ! { dg-final { scan-module "b" "IMPLICIT_PURE" } } |