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/42647] Missed initialization/dealloc of allocatable scalar DT with allocatable component



------- Comment #4 from dominiq at lps dot ens dot fr  2010-01-10 15:36 -------
The patch in comment #1 fixes the test in comment#0, bootstrapped, regtested,
and passed my tests.

I have split the tests in comment#2 and #3 in two:

module m                                                                        
type st                                                                         
  integer , allocatable :: a1                                                   
end type st                                                                     
type at                                                                         
  integer , allocatable :: a2(:)                                                
end type at                                                                     

type t1
  type(st), allocatable :: b1
end type t1
type t3
  type(at), allocatable :: b3
end type t3
end module m

use m
type(t1) :: na1, a1, aa1(:)
type(t3) :: na3, a3, aa3(:)
allocatable :: a1, a3, aa1, aa3

if(allocated(a1)) call abort()
if(allocated(a3)) call abort()
if(allocated(aa1)) call abort()
if(allocated(aa3)) call abort()

if(allocated(na1%b1)) call abort()
if(allocated(na3%b3)) call abort()

print *, 'end'
end

and

module m                                                                        
type st                                                                         
  integer , allocatable :: a1                                                   
end type st                                                                     
type at                                                                         
  integer , allocatable :: a2(:)                                                
end type at                                                                     

type t2
  type(st), allocatable :: b2(:)
end type t2
type t4
  type(at), allocatable :: b4(:)
end type t4
end module m

use m
type(t2) :: na2, a2, aa2(:)
type(t4) :: na4, a4, aa4(:)
allocatable :: a2, a4, aa2, aa4

!if(allocated(a2)) call abort()
!if(allocated(a4)) call abort()
if(allocated(aa2)) call abort()
if(allocated(aa4)) call abort()

if(allocated(na2%b2)) call abort()
if(allocated(na4%b4)) call abort()

print *, 'end'
end

As such, both pass with the patch, while the first one gives a "Segmentation
fault" before the print without the patch (the second pass). If I remove one of
the '!', the test fails with  "Segmentation fault" AFTER the print with or
without the patch.


-- 


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


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