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

Reply via email to