http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54618



Salvatore Filippone <sfilippone at uniroma2 dot it> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

                 CC|                            |sfilippone at uniroma2 dot

                   |                            |it



--- Comment #18 from Salvatore Filippone <sfilippone at uniroma2 dot it> 
2013-04-05 09:32:25 UTC ---

(In reply to comment #17)

Hi,

I am seeing intermittent issues with CLASS,ALLOCATABLE,INTENT(OUT) variables

that have a CLASS,ALLOCATABLE component; however when I tried to reduce to the

following test code, it segfaults on the inner clone, whereas the full code

only fails on the outer code. In any case, the attached code is supposed to

work, and it fails  (under 4.7.2, 4.8.0 and trunk)

===============================================

module base_inner

  type inner 

    integer, allocatable :: iv(:)

  contains

    procedure, pass(val) :: clone => inner_clone

  end type inner



contains

  subroutine inner_clone(val,res)

    class(inner) :: val

    class(inner), allocatable, intent(out) :: res



    allocate(inner :: res)

    res%iv = val%iv

  end subroutine inner_clone

end module base_inner

module base_outer

  use base_inner

  type outer

    class(inner), allocatable :: inn

  contains

    procedure, pass(val) :: clone => outer_clone

  end type outer



contains

  subroutine outer_clone(val,res)

    class(outer) :: val

    class(outer), allocatable, intent(out) :: res



    allocate(outer :: res)

    call val%inn%clone(res%inn)

  end subroutine outer_clone

end module base_outer



program testclass



  use base_outer



  class(inner), allocatable :: inner1, inner2

  class(outer), allocatable :: outer1, outer2



  allocate(inner :: inner1)

  allocate(inner1%iv(3))

  call inner1%clone(inner2)

  write(0,*) allocated(inner1),allocated(inner2)



  allocate(outer :: outer1)

  allocate(inner :: outer1%inn)

  allocate(outer1%inn%iv(3))

  call outer1%clone(outer2)

  write(0,*) allocated(outer1),allocated(outer2)





end program testclass

Reply via email to