https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121145

            Bug ID: 121145
           Summary: Unnecessary runtime error: non-associated procedure
                    pointer passed to optional argument
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libfortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: federico.perini at gmail dot com
  Target Milestone: ---

module m

  abstract interface
    subroutine fun(x) ! just a function
        real, intent(in) :: x
    end subroutine fun   
  end interface   

  contains

  subroutine with_fun(sub)
     procedure(fun), optional :: sub
     print *, present(sub)
  end subroutine   

end module m

program p
  use m

  procedure(fun), pointer :: ptr => null()

  call with_fun()        ! no runtime error 
  call with_fun(sub=ptr) ! runtime error if `fcheck=pointer`

end  


The example shows that a non-associated procedure pointer, legally passed to a
procedure where it is `optional`, triggers a Fortran runtime error with
`fcheck=pointer`.

The same does not happen when the argument is a data variable, instead of a
procedure.

This is a very minor thing but I believe it would be a great quality-of-life
improvement (turning off pointer checks is bad, in debug builds...)

I put a live example here: https://godbolt.org/z/5brn1h3Ga
I find this issue on all versions of gfortran, so I may be wrong about this
request, in which case, apologies and do feel free to close this issue.

Thank you, 
Federico

Reply via email to