! { dg-do run } ! { dg-options "-fdec-static -fno-automatic -finit-local-zero" } ! ! Test STATIC and AUTOMATIC with -fno-automatic and recursive subroutines. ! subroutine assert(s, i1, i2) implicit none integer, intent(in) :: i1, i2 character(*), intent(in) :: s if (i1 .ne. i2) then print *, s, ": expected ", i2, " but was ", i1 STOP 1 endif endsubroutine function f (x) implicit none integer f integer, intent(in) :: x integer, static :: a ! should be SAVEd a = a + x ! should increment by x every time f = a return endfunction recursive subroutine g (x) implicit none integer, intent(in) :: x integer, automatic :: a ! should be automatic (in recursive) a = a + x ! should be set to x every time call assert ("g%a", a, x) endsubroutine subroutine h (x) implicit none integer, intent(in) :: x integer, automatic :: a ! should be automatic (outside recursive) a = a + x ! should be set to x every time call assert ("h%a", a, x) endsubroutine implicit none integer :: f ! Should return static value of c; accumulates x call assert ("f()", f(3), 3) call assert ("f()", f(4), 7) call assert ("f()", f(2), 9) call g(3) call g(4) call g(2) call h(3) call h(4) call h(2) end