This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug fortran/40796] Invalid code when returning unallocated component of derived type



------- Comment #2 from burnus at gcc dot gnu dot org  2009-07-20 08:32 -------
Further simplified test below. Valgrind shows first:
  ==29083== Conditional jump or move depends on uninitialised value(s)
  ==29083==    at 0x4007E4: MAIN__ (aa.f90:12)

The problem is that t2's y is unallocated, which is valid but confuses the
algorithm.

For the following program, gfortran generates:

  fun ()
  {
    (void) 0;
  }

which is then used as:
    q = fun ();
    if (D.1570.y.data != 0B)
      __builtin_free (D.1570.y.data);
    q.y.data = 0B;

I think the proper code would be:

  fun ()
  {
    struct t2 q = {};
    return q;
  }



module mod_all
 implicit none
 type t2
  integer, allocatable :: y(:)
 end type t2
contains
 pure function fun() result(q)
  type(t2) :: q
  ! Returning q - consisting only of one deallocated compound
 end function fun
end module mod_all

program main
 use mod_all
 implicit none
 type(t2) :: q
 q = fun()
end program main


-- 

burnus at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
      Known to fail|                            |4.5.0 4.4.0 4.3.3 4.2.1
            Summary|Double free or corruption   |Invalid code when returning
                   |with derived types with     |unallocated component of
                   |allocatable components      |derived type


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40796


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]