| ! { dg-do run } |
| ! { dg-options "-fno-automatic" } |
| ! |
| ! PR fortran/55733 |
| ! |
| ! Check that -fno-automatic makes the local variable SAVEd |
| ! |
| |
| ! Scalar allocatable |
| subroutine foo(i) |
| integer :: i |
| integer, allocatable :: j |
| if (i == 1) j = 42 |
| if (.not. allocated (j)) STOP 1 |
| if (j /= 42) STOP 2 |
| end |
| |
| ! Deferred-length string scalar |
| subroutine bar() |
| logical, save :: first = .true. |
| character(len=:), allocatable :: str |
| if (first) then |
| first = .false. |
| if (allocated (str)) STOP 3 |
| str = "ABCDEF" |
| end if |
| if (.not. allocated (str)) STOP 4 |
| if (len (str) /= 6) STOP 5 |
| if (str(1:6) /= "ABCDEF") STOP 6 |
| end subroutine bar |
| |
| ! Deferred-length string array |
| subroutine bar_array() |
| logical, save :: first = .true. |
| character(len=:), allocatable :: str |
| if (first) then |
| first = .false. |
| if (allocated (str)) STOP 7 |
| str = "ABCDEF" |
| end if |
| if (.not. allocated (str)) STOP 8 |
| if (len (str) /= 6) STOP 9 |
| if (str(1:6) /= "ABCDEF") STOP 10 |
| end subroutine bar_array |
| |
| call foo(1) |
| call foo(2) |
| call bar() |
| call bar_array() |
| call bar() |
| call bar_array() |
| end |