Метки оператора (например, «50») должны быть определены в текущей «единице определения объема», которая в основном переводится в этом контексте в подпрограмму / функцию, в которой находится вызов goto (или в главную программу, есливызов находится в основной программе).
Так, например, в следующей программе основная программа и обе содержащиеся в ней подпрограммы имеют собственную метку 50, и goto переходят на «свою» строку 50.
program testgotos
implicit none
goto 50
call second
50 call first
call second
contains
subroutine first
integer :: a = 10
goto 50
a = 20
50 print *,'First: a = ', a
end subroutine first
subroutine second
integer :: a = 20
goto 50
a = 40
50 print *,'Second: a = ', a
end subroutine second
end program testgotos