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: [email protected]
ReportedBy: [email protected]
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