https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61281
Bug ID: 61281 Summary: Memory corruption on assigning a polymorphic variable to a non-polymorphic one Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: rouson at stanford dot edu The code below demonstrates a bug isolated from code from my collaborator Rob Rosenberg of the Naval Research Laboratory. The code exhibits an apparent memory corruption issue with gfortran 4.9 dated 20140416. Gfortran 4.8.2 rejects the code with the message below. Damian $ cat rob.f90 type employees character(3) :: name="rob" end type type companies type(employees) :: list end type type(companies) :: nrl print *,nrl%list call map print *,nrl%list contains type (employees) function give_raise(e) class(employees) :: e ! Switch to "type" to hide bug give_raise=e end function subroutine map() nrl%list=give_raise(nrl%list) end subroutine end $ gfortran rob.f90 $ ./a.out rob 8?? $ gfortran --version GNU Fortran (MacPorts gcc49 4.9-20140416_0) 4.9.0 20140416 (prerelease) Copyright (C) 2014 Free Software Foundation, Inc. $ sudo port select --set gcc mp-gcc48 Selecting 'mp-gcc48' for 'gcc' succeeded. 'mp-gcc48' is now active. $ gfortran rob.f90 rob.f90:14.15: give_raise=e 1 Error: Can't convert CLASS(employees) to TYPE(employees) at (1) localhost:Desktop rouson$ gfortran --version GNU Fortran (MacPorts gcc48 4.8.2_0) 4.8.2