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

            Bug ID: 93925
           Summary: Invalid memory reference upon call of a routine taking
                    a procedure pointer as argument
           Product: gcc
           Version: 9.1.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: mscfd at gmx dot net
  Target Milestone: ---

The following code aborts with a segfault (invalid memory reference) upon call
of the apply function. This happens with gfortran 9.1.1 as well as a recent
gfortran-10.

module cs

implicit none
private

public classStar_map_ifc
public fun, apply

abstract interface
   function classStar_map_ifc(x) result(y)
      class(*), pointer            :: y
      class(*), target, intent(in) :: x
   end function classStar_map_ifc
end interface

contains

   function fun(x) result(y)
      class(*), pointer            :: y
      class(*), target, intent(in) :: x
      select type (x)
      type is (integer)
         y => x
      class default
         y => null()
      end select
   end function fun

   function apply(f, x) result(y)
      procedure(classStar_map_ifc) :: f
      integer, intent(in) :: x
      integer :: y
      class(*), pointer :: p
      p => f(x)
      select type (p)
      type is (integer)
         y = p
      end select
   end function apply

end module cs


program classStar_map2

use cs
implicit none

integer :: x, y
procedure(classStar_map_ifc), pointer :: f

x = 123654
y = apply(fun, x)
print *, x, y

end program classStar_map2

Reply via email to