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