------- Comment #5 from burnus at gcc dot gnu dot org 2009-06-15 13:09 ------- Juergen: Thanks for the report, but it is not a regression - it might not crash with 4.3 (or your 4.4) but I think that's just by chance.
Paul, I think also this bug touches code for which you have the expertise. The problem is the automatic deallocation of an allocatable component. The DT with this component is returned by a function but treated as variable and not as function. The crucial part is that the return value is a pointer! If I don't use a pointer, the dump looks as follows: D.1558 = func (); sub (&D.1558); if (D.1558.a.data != 0B) __builtin_free (D.1558.a.data); D.1558.a.data = 0B; with POINTER: sub (func ()); if (func ()->a.data != 0B) __builtin_free (func ()->a.data); func ()->a.data = 0B; Testcase: !-------------------------------------------- implicit none type t integer, allocatable :: A(:) end type t call sub(func()) contains function func() type(t),pointer :: func integer :: i = 0 if (i /= 0) call abort() i = i + 1 end function func subroutine sub(a) type(t), intent(IN),target :: a end subroutine sub end -- burnus at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |pault at gcc dot gnu dot | |org, burnus at gcc dot gnu | |dot org Status|UNCONFIRMED |NEW Ever Confirmed|0 |1 GCC host triplet|both MAC OS X Darwin 9.7.0 | |and Linux Debian Edge | Known to fail|4.4.1 4.5.0 |4.4.1 4.5.0 4.3.3 Known to work|4.3.3 | Last reconfirmed|0000-00-00 00:00:00 |2009-06-15 13:09:45 date| | Summary|[4.4/4.5 Regression] Garbage|Automatic deallocation |or segmentation fault in |component of DT function |allocatable array derived |return value |type structures | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40440