If a pointer or target is used as a dummy argument, then an explicit interface is required at the place of call. The reason is that a pointer argument can be interpreted in two ways:
In the folowing example Pint2 is dereferenced before being passed to Beer, Pint1 is not:
program Brew integer, pointer :: Pint1, Pint2 call Beer(Pint1,Pint2) ... contains subroutine Beer(arg1,arg2) integer, pointer :: arg1 integer, intent(in) :: arg2 ... end subroutine Beer end program BrewPint1 in the calling unit and arg1 in Beer reffer to the same space; however, if an unassociated pointer is the actual argument, and is associated in the procedure, it is not guaranteed that the pointer will still be associated after return.