Skip to content

Instantly share code, notes, and snippets.

@certik
Last active February 18, 2019 20:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save certik/2293270ac39f2589ae702ed751f405f8 to your computer and use it in GitHub Desktop.
Save certik/2293270ac39f2589ae702ed751f405f8 to your computer and use it in GitHub Desktop.
program exceptions
implicit none
integer :: s, stat_manual
integer, status :: stat
call mysum(5, s, stat_manual)
if (stat_manual /= 0) error stop
print *, s
! Equivalent to the above
call mysum(5, s, stat)
print *, s
! This will fail in 'allocate' below
call mysum(5, s)
print *, s
contains
subroutine mysum(n, s, stat)
integer, intent(in) :: n
integer, intent(out), optional, status :: stat
integer, intent(out) :: s
integer, allocatable :: A(:)
integer :: i
call myallocate(n, A, stat=stat)
do i = 1, n
A(i) = i
end do
s = sum(A)
end subroutine
subroutine myallocate(n, A, stat)
integer, intent(in) :: n
integer, intent(out), optional, status :: stat
integer, allocatable, intent(out) :: A(:)
integer :: mystat
! This assumes that `allocate` works with the STATUS attribute
allocate(A(n), stat=stat)
end subroutine
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment