| ! { 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 |