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

            Bug ID: 121401
           Summary: Pointer assignment from polymorphic pointer to
                    non-polymorphic function result doesn't set the vtype
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: mikael at gcc dot gnu.org
  Target Milestone: ---

Testcase:

program test
  implicit none
  type :: t
    integer :: c
  end type
  type, extends(t) :: u
    integer :: d
  end type
  type(u), target :: a(5)
  class(t), pointer :: p(:)
  a = [ u(3,5), u(7,11), u(13,17), u(19,23), u(29,31) ]
  p => f()
  ! print *, shape(p)
  if (any(shape(p) /= [5])) error stop 1
  ! print *, p%c
  if (any(p%c /= [ 3,7,13,19,29 ])) error stop 2
contains
  function f()
    type(u), pointer :: f(:)
    f => a
  end function
end program


It gives a segmentation fault when executed.

The dump of the p => f() pointer assignment is:

    ...
    ptrtemp.9.span = 4;
    f (&ptrtemp.9);
    p._data = ptrtemp.9;
    ...

So the p._vptr field is never set.

Reply via email to