Bug 34681 - SAVEd derived type with allocatable components causes ICE
Summary: SAVEd derived type with allocatable components causes ICE
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: fortran (show other bugs)
Version: 4.3.0
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-01-05 20:35 UTC by Paul Thomas
Modified: 2008-01-08 15:16 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2008-01-06 10:08:09


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Paul Thomas 2008-01-05 20:35:39 UTC
The following segfaults on the second call to mah because the allocatable components are automatically deallocated.  I have yet to check the F2003 standard but this logically makes no sense.  It comes about because t.data is NULLED on entry to mah

program boh
  !
  call mah (0)
  call mah (1)
  call mah (2)
  !
end program boh
!
subroutine mah (i)
  !
  integer, intent(in) :: i
  !
  type mix_type
     real(8), allocatable :: a(:)
     complex(8), allocatable :: b(:)
  end type mix_type
  type(mix_type), allocatable, save :: t(:)
  integer :: j, n=1024
  !
  if (i==0) then
     allocate (t(1))
     allocate (t(1)%a(n))
     allocate (t(1)%b(n))
     do j=1,n
        t(1)%a(j) = j
        t(1)%b(j) = n-j
     end do
  end if
  c = sum( t(1)%a(:) ) + sum( t(1)%b(:) )
  print *, 'c=',c
  if ( i==2) then
     deallocate (t(1)%b)
     deallocate (t(1)%a)
     deallocate (t)
  end if
end subroutine mah

Posted to the list by F-X COudert

http://gcc.gnu.org/ml/fortran/2008-01/msg00044.html
Comment 1 Tobias Burnus 2008-01-06 10:08:09 UTC
Patch posted by Paul:
http://gcc.gnu.org/ml/fortran/2008-01/msg00048.html
Comment 2 Tobias Burnus 2008-01-08 09:22:12 UTC
Patch by Paul: http://gcc.gnu.org/ml/gcc-patches/2008-01/msg00269.html
Comment 3 Paul Thomas 2008-01-08 15:13:22 UTC
Subject: Bug 34681

Author: pault
Date: Tue Jan  8 15:12:34 2008
New Revision: 131395

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=131395
Log:
2008-01-08  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/34681
	* trans_array.c (gfc_trans_deferred_array): Do not null the
	data pointer on entering scope, nor deallocate it on leaving
	scope, if the symbol has the 'save' attribute.

	PR fortran/34704
	* trans_decl.c (gfc_finish_var_decl): Derived types with
	allocatable components and an initializer must be TREE_STATIC.

2008-01-08  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/34681
	PR fortran/34704
	* gfortran.dg/alloc_comp_default_init_1.f90: New test.



Added:
    trunk/gcc/testsuite/gfortran.dg/alloc_comp_default_init_1.f90
Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/trans-array.c
    trunk/gcc/fortran/trans-decl.c
    trunk/gcc/testsuite/ChangeLog

Comment 4 Paul Thomas 2008-01-08 15:16:14 UTC
Fixed on trunk

Paul