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

            Bug ID: 119802
           Summary: Defined assignment not called for component of derived
                    type
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: abensonca at gcc dot gnu.org
  Target Milestone: ---

A type-bound assignment of an allocatable component of a derived type is not
called if the parent type does not use type-bound assignment:

module bugMod

  type :: rm
     integer :: c
   contains
     procedure :: rma
     generic   :: assignment(=) => rma
  end type rm

  type :: w
     type(rm), allocatable :: wc  ! "allocatable" attribute required for this
bug
   contains
     ! uncomment the following two lines - using defined assignment avoids this
bug
     ! procedure :: wa
     ! generic   :: assignment(=) => wa
  end type w

contains

  subroutine rma(to,from)
    implicit none
    class(rm), intent(  out) :: to
    class(rm), intent(in   ) :: from

    to%c=from%c+1
    return
  end subroutine rma

  subroutine wa(to,from)
    implicit none
    class(w), intent(  out) :: to
    class(w), intent(in   ) :: from

    allocate(to%wc)
    to%wc=from%wc
    return
  end subroutine wa

end module bugMod

program bug
  use bugMod
  implicit none
  type(w) :: i

  i=w(rm(3))
  write (0,*) "expected 4, got ",i%wc%c
end program bug

$ gfortran bug.F90
$ ./a.out
 expected 4, got            3

With ifort I get:
 expected 4, got            4

Reply via email to