http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46838
Tobias Burnus <burnus at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |burnus at gcc dot gnu.org --- Comment #1 from Tobias Burnus <burnus at gcc dot gnu.org> 2010-12-07 17:00:19 UTC --- Work here as expected - but I get: ==32139== Conditional jump or move depends on uninitialised value(s) ==32139== at 0x400A36: cdall.1593 (oop.f90:139) ==32139== by 0x400CCE: create_matrix.1606 (oop.f90:117) Line 139 is: if (allocated(desc%indxmap)) then >From the dump: cdall (struct desc_type & restrict desc) struct desc_type D.1561; struct desc_type desc_type.0; desc_type.0.matrix_data = 0B; D.1561 = *desc; *desc = desc_type.0; D.1561.matrix_data = 0B; D.1561.indxmap._data = 0B; if (desc->indxmap._data != 0B) The way one has to read it is as follows: D.1561 = *desc; // Save pointers *dest = desc_type.0; // Default initialize // free allocatables via D.1561 The freeing works OK (except for a missing deep freeing, which is a different PR). However, the initializing does not work. There is a line missing which reads: desc_type.0.indxmap._data = 0B; The initialization happens via gfc_init_default_dt, which uses sym->value. Hence, the problem might be in resolve.c. * * * Modified version: If one changes indxmap into an array, one gets: oop.f90:21:0: internal compiler error: in gfc_conv_descriptor_data_get, at fortran/trans-array.c:144 * * * Reduced test case: module descriptor_type implicit none type :: indx_map end type indx_map type desc_type integer, allocatable :: matrix_data class(indx_map), allocatable :: indxmap end type desc_type end module descriptor_type program bug28 use descriptor_type implicit none type(desc_type) :: desc_a call cdall(desc_a) contains subroutine cdall(desc) type(desc_type), intent(out) :: desc if (allocated(desc%indxmap)) stop 'ERROR' STOP 'OK' end subroutine cdall end program bug28