blob: c93f0b07c7bdb28dd0344a1388b357280d4ddf51 [file] [log] [blame]
! { dg-do run }
! { dg-options "-fno-automatic -finit-local-zero -fdump-tree-original" }
!
! PR fortran/62309
!
! Make sure variables are saved with -fno-automatic except in
! functions marked RECURSIVE, and that they are still initialized with
! -finit-local-zero.
!
function f (x)
implicit none
integer f, x
integer a ! should be SAVEd
a = a + x ! should increment by y every time
f = a
return
endfunction
function f2 (x)
implicit none
integer f2, x
block
named: block
block
integer a ! should be SAVEd
a = a + x ! should increment by y every time
f2 = a
end block
end block named
end block
return
endfunction
recursive function g (x)
implicit none
integer g, x
integer b ! should be automatic
b = b + x ! should be set to y every time
g = b
return
endfunction
recursive function g2 (x)
implicit none
integer g2, x
block
named: block
block
integer b ! should be automatic
b = b + x ! should be set to y every time
g2 = b
end block
end block named
end block
return
endfunction
implicit none
integer f, f2, g, g2
! Should return static value of a; accumulates y
if ( f(3) .ne. 3 ) STOP 1
if ( f(4) .ne. 7 ) STOP 2
if ( f(2) .ne. 9 ) STOP 3
if ( f2(3) .ne. 3 ) STOP 4
if ( f2(4) .ne. 7 ) STOP 5
if ( f2(2) .ne. 9 ) STOP 6
! Should return automatic value of a; equal to y each time
if ( g(3) .ne. 3 ) STOP 7
if ( g(4) .ne. 4 ) STOP 8
if ( g(2) .ne. 2 ) STOP 9
if ( g2(3) .ne. 3 ) STOP 10
if ( g2(4) .ne. 4 ) STOP 11
if ( g2(2) .ne. 2 ) STOP 12
end
! { dg-final { scan-tree-dump-times " static integer\\\(kind=4\\\) a = 0;" 2 "original" } }
! { dg-final { scan-tree-dump-times " b = 0;" 2 "original" } }