------- Comment #9 from burnus at gcc dot gnu dot org  2007-06-25 20:49 -------
Besides local allocated variables, one can think of local pointers as well:

integer, pointer :: a
a = 4 ! wrong
if(associated(a)) ! wrong
nullify(a)
if(associated(a)) ! ok
a = 4 ! wrong

For allocation, one could also think about:

subroutine foo(a)
  integer, intent(out), allocatable :: a(:)
  a = 5 ! wrong: error!
---------
interface
  subroutine bar1(x); integer, intent(in), allocatable :: x(:); end subroutine
  subroutine bar2(x); integer :: x(:); end subroutine
end interface
integer, allocatable :: a(:)
! call bar1(a) ! ok as if(allocated(a)) is used -> no warning
! -- or --
call bar2(a) ! invalid though harmless as long bar2 does not use the variable
             ! -> warning

Analogously, for pointer, except that one could check for NULL as well:
interface
  subroutine bar1(x); integer, intent(in), pointer :: x(:); end subroutine
  subroutine bar2(x); integer :: x(:); end subroutine
end interface
integer, allocatable :: a(:)
call bar1(a) ! potentially invalid (unless bar1 does not use the variable)
             ! as the pointer has unknown status -> warning
call bar2(a) ! wrong (harmless if not accessed) -> warning
nullify(a)
call bar2(a) ! -> invalid (unless bar2 does not use the variable) -> warning


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20520

Reply via email to