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

             Bug #: 50225
           Summary: The allocation status for polymorphic allocatable
                    variables is not set properly
    Classification: Unclassified
           Product: gcc
           Version: 4.3.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: arjen.markus...@gmail.com


If you compile the program below with "-fcheck=all", it fails, claiming that 
the result variable in the function add_vector() is already allocated. The 
error disappears when you change "class(point2d)" to "type(point2d)".

(In a more elaborate version of the program, it also fails without this option
and with this option there is a segmentation fault.)

module points2d3d

  implicit none

  type point2d
      real :: x, y

  end type

contains

 subroutine print( point )

   class(point2d) :: point
   write(*,'(2f10.4)') point%x, point%y
 end subroutine


 subroutine random_vector( point )

   class(point2d) :: point
   call random_number( point%x )
   call random_number( point%y )
   point%x = 2.0 * (point%x - 0.5)
   point%y = 2.0 * (point%y - 0.5)
 end subroutine


 function add_vector( point, vector )

   class(point2d), intent(in)  :: point, vector
   class(point2d), allocatable :: add_vector

   allocate( add_vector )
   add_vector%x = point%x + vector%x
   add_vector%y = point%y + vector%y
 end function


end module points2d3d


program random_walk

 use points2d3d


 type(point2d), target   :: point_2d, vector_2d
 class(point2d), pointer :: point, vector
 integer :: i


 point  => point_2d
 vector => vector_2d
 write(*,*) 'Two-dimensional walk:'


 do i=1,10
   call random_vector(point)
   call random_vector(vector)
   call print(add_vector(point, vector))
 end do

end program random_walk

Reply via email to