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

            Bug ID: 85537
           Summary: Invalid memory reference at runtime when calling
                    subroutine through procedure pointer
           Product: gcc
           Version: 4.8.5
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: dev-zero at gentoo dot org
  Target Milestone: ---

Given the following code, the runtime generates a segfault on the same function
when called through the procedure pointer instead of a direct function call:

  module m
     implicit none
  contains
     subroutine foo()
        integer :: a

        abstract interface
           subroutine ibar()
           end subroutine
        end interface

        procedure(ibar), pointer :: bar_ptr => bar_impl

        a = 0
        call bar_impl()
        call bar_ptr()

     contains
        subroutine bar_impl()
           write (*,*) "foo"
           a = a + 1
        end subroutine

     end subroutine
  end module

  program main
     use m

     call foo()
  end program

it will generate the following output:

$ ./segfault_minimal_rep 
 foo
 foo

Program received signal SIGSEGV: Segmentation fault - invalid memory reference.

Backtrace for this error:
#0  0x7f34795e7bbd in ???
#1  0x7f34795e6e03 in ???
#2  0x7f3478b02fdf in ???
#3  0x400788 in bar_impl
        at /users/tiziano/tmp/segfault_minimal_rep.f90:21
#4  0x4007c6 in __m_MOD_foo
        at /users/tiziano/tmp/segfault_minimal_rep.f90:16
#5  0x4007d1 in MAIN__
        at /users/tiziano/tmp/segfault_minimal_rep.f90:30
#6  0x400808 in main
        at /users/tiziano/tmp/segfault_minimal_rep.f90:28
Segmentation fault (core dumped)

Reply via email to